1#ifndef _LINUX_MM_H
2#define _LINUX_MM_H
3
4#include <linux/errno.h>
5
6#ifdef __KERNEL__
7
8#include <linux/gfp.h>
9#include <linux/list.h>
10#include <linux/mmzone.h>
11#include <linux/rbtree.h>
12#include <linux/prio_tree.h>
13#include <linux/debug_locks.h>
14#include <linux/mm_types.h>
15
16struct mempolicy;
17struct anon_vma;
18struct file_ra_state;
19struct user_struct;
20struct writeback_control;
21struct rlimit;
22
23#ifndef CONFIG_DISCONTIGMEM
24extern unsigned long max_mapnr;
25#endif
26
27extern unsigned long num_physpages;
28extern void * high_memory;
29extern int page_cluster;
30
31#ifdef CONFIG_SYSCTL
32extern int sysctl_legacy_va_layout;
33#else
34#define sysctl_legacy_va_layout 0
35#endif
36
37#include <asm/page.h>
38#include <asm/pgtable.h>
39#include <asm/processor.h>
40
41#define nth_page(page,n) pfn_to_page(page_to_pfn((page)) + (n))
42
43
44#define PAGE_ALIGN(addr) ALIGN(addr, PAGE_SIZE)
45
46
47
48
49
50
51
52
53
54
55extern struct kmem_cache *vm_area_cachep;
56
57#ifndef CONFIG_MMU
58extern struct rb_root nommu_region_tree;
59extern struct rw_semaphore nommu_region_sem;
60
61extern unsigned int kobjsize(const void *objp);
62#endif
63
64
65
66
67#define VM_READ 0x00000001
68#define VM_WRITE 0x00000002
69#define VM_EXEC 0x00000004
70#define VM_SHARED 0x00000008
71
72
73#define VM_MAYREAD 0x00000010
74#define VM_MAYWRITE 0x00000020
75#define VM_MAYEXEC 0x00000040
76#define VM_MAYSHARE 0x00000080
77
78#define VM_GROWSDOWN 0x00000100
79#define VM_GROWSUP 0x00000200
80#define VM_PFNMAP 0x00000400
81#define VM_DENYWRITE 0x00000800
82
83#define VM_EXECUTABLE 0x00001000
84#define VM_LOCKED 0x00002000
85#define VM_IO 0x00004000
86
87
88#define VM_SEQ_READ 0x00008000
89#define VM_RAND_READ 0x00010000
90
91#define VM_DONTCOPY 0x00020000
92#define VM_DONTEXPAND 0x00040000
93#define VM_RESERVED 0x00080000
94#define VM_ACCOUNT 0x00100000
95#define VM_NORESERVE 0x00200000
96#define VM_HUGETLB 0x00400000
97#define VM_NONLINEAR 0x00800000
98#define VM_MAPPED_COPY 0x01000000
99#define VM_INSERTPAGE 0x02000000
100#define VM_ALWAYSDUMP 0x04000000
101
102#define VM_CAN_NONLINEAR 0x08000000
103#define VM_MIXEDMAP 0x10000000
104#define VM_SAO 0x20000000
105#define VM_PFN_AT_MMAP 0x40000000
106
107#ifndef VM_STACK_DEFAULT_FLAGS
108#define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS
109#endif
110
111#ifdef CONFIG_STACK_GROWSUP
112#define VM_STACK_FLAGS (VM_GROWSUP | VM_STACK_DEFAULT_FLAGS | VM_ACCOUNT)
113#else
114#define VM_STACK_FLAGS (VM_GROWSDOWN | VM_STACK_DEFAULT_FLAGS | VM_ACCOUNT)
115#endif
116
117#define VM_READHINTMASK (VM_SEQ_READ | VM_RAND_READ)
118#define VM_ClearReadHint(v) (v)->vm_flags &= ~VM_READHINTMASK
119#define VM_NormalReadHint(v) (!((v)->vm_flags & VM_READHINTMASK))
120#define VM_SequentialReadHint(v) ((v)->vm_flags & VM_SEQ_READ)
121#define VM_RandomReadHint(v) ((v)->vm_flags & VM_RAND_READ)
122
123
124
125
126#define VM_SPECIAL (VM_IO | VM_DONTEXPAND | VM_RESERVED | VM_PFNMAP)
127
128
129
130
131
132extern pgprot_t protection_map[16];
133
134#define FAULT_FLAG_WRITE 0x01
135#define FAULT_FLAG_NONLINEAR 0x02
136#define FAULT_FLAG_MKWRITE 0x04
137
138
139
140
141
142
143
144
145
146static inline int is_linear_pfn_mapping(struct vm_area_struct *vma)
147{
148 return (vma->vm_flags & VM_PFN_AT_MMAP);
149}
150
151static inline int is_pfn_mapping(struct vm_area_struct *vma)
152{
153 return (vma->vm_flags & VM_PFNMAP);
154}
155
156
157
158
159
160
161
162
163
164
165struct vm_fault {
166 unsigned int flags;
167 pgoff_t pgoff;
168 void __user *virtual_address;
169
170 struct page *page;
171
172
173
174
175};
176
177
178
179
180
181
182struct vm_operations_struct {
183 void (*open)(struct vm_area_struct * area);
184 void (*close)(struct vm_area_struct * area);
185 int (*fault)(struct vm_area_struct *vma, struct vm_fault *vmf);
186
187
188
189 int (*page_mkwrite)(struct vm_area_struct *vma, struct vm_fault *vmf);
190
191
192
193
194 int (*access)(struct vm_area_struct *vma, unsigned long addr,
195 void *buf, int len, int write);
196#ifdef CONFIG_NUMA
197
198
199
200
201
202
203
204 int (*set_policy)(struct vm_area_struct *vma, struct mempolicy *new);
205
206
207
208
209
210
211
212
213
214
215
216 struct mempolicy *(*get_policy)(struct vm_area_struct *vma,
217 unsigned long addr);
218 int (*migrate)(struct vm_area_struct *vma, const nodemask_t *from,
219 const nodemask_t *to, unsigned long flags);
220#endif
221};
222
223struct mmu_gather;
224struct inode;
225
226#define page_private(page) ((page)->private)
227#define set_page_private(page, v) ((page)->private = (v))
228
229
230
231
232
233#include <linux/page-flags.h>
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251static inline int put_page_testzero(struct page *page)
252{
253 VM_BUG_ON(atomic_read(&page->_count) == 0);
254 return atomic_dec_and_test(&page->_count);
255}
256
257
258
259
260
261static inline int get_page_unless_zero(struct page *page)
262{
263 return atomic_inc_not_zero(&page->_count);
264}
265
266
267struct page *vmalloc_to_page(const void *addr);
268unsigned long vmalloc_to_pfn(const void *addr);
269
270
271
272
273
274
275
276static inline int is_vmalloc_addr(const void *x)
277{
278#ifdef CONFIG_MMU
279 unsigned long addr = (unsigned long)x;
280
281 return addr >= VMALLOC_START && addr < VMALLOC_END;
282#else
283 return 0;
284#endif
285}
286
287static inline struct page *compound_head(struct page *page)
288{
289 if (unlikely(PageTail(page)))
290 return page->first_page;
291 return page;
292}
293
294static inline int page_count(struct page *page)
295{
296 return atomic_read(&compound_head(page)->_count);
297}
298
299static inline void get_page(struct page *page)
300{
301 page = compound_head(page);
302 VM_BUG_ON(atomic_read(&page->_count) == 0);
303 atomic_inc(&page->_count);
304}
305
306static inline struct page *virt_to_head_page(const void *x)
307{
308 struct page *page = virt_to_page(x);
309 return compound_head(page);
310}
311
312
313
314
315
316static inline void init_page_count(struct page *page)
317{
318 atomic_set(&page->_count, 1);
319}
320
321void put_page(struct page *page);
322void put_pages_list(struct list_head *pages);
323
324void split_page(struct page *page, unsigned int order);
325
326
327
328
329
330
331typedef void compound_page_dtor(struct page *);
332
333static inline void set_compound_page_dtor(struct page *page,
334 compound_page_dtor *dtor)
335{
336 page[1].lru.next = (void *)dtor;
337}
338
339static inline compound_page_dtor *get_compound_page_dtor(struct page *page)
340{
341 return (compound_page_dtor *)page[1].lru.next;
342}
343
344static inline int compound_order(struct page *page)
345{
346 if (!PageHead(page))
347 return 0;
348 return (unsigned long)page[1].lru.prev;
349}
350
351static inline void set_compound_order(struct page *page, unsigned long order)
352{
353 page[1].lru.prev = (void *)order;
354}
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436#if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP)
437#define SECTIONS_WIDTH SECTIONS_SHIFT
438#else
439#define SECTIONS_WIDTH 0
440#endif
441
442#define ZONES_WIDTH ZONES_SHIFT
443
444#if SECTIONS_WIDTH+ZONES_WIDTH+NODES_SHIFT <= BITS_PER_LONG - NR_PAGEFLAGS
445#define NODES_WIDTH NODES_SHIFT
446#else
447#ifdef CONFIG_SPARSEMEM_VMEMMAP
448#error "Vmemmap: No space for nodes field in page flags"
449#endif
450#define NODES_WIDTH 0
451#endif
452
453
454#define SECTIONS_PGOFF ((sizeof(unsigned long)*8) - SECTIONS_WIDTH)
455#define NODES_PGOFF (SECTIONS_PGOFF - NODES_WIDTH)
456#define ZONES_PGOFF (NODES_PGOFF - ZONES_WIDTH)
457
458
459
460
461
462#if !(NODES_WIDTH > 0 || NODES_SHIFT == 0)
463#define NODE_NOT_IN_PAGE_FLAGS
464#endif
465
466#ifndef PFN_SECTION_SHIFT
467#define PFN_SECTION_SHIFT 0
468#endif
469
470
471
472
473
474
475#define SECTIONS_PGSHIFT (SECTIONS_PGOFF * (SECTIONS_WIDTH != 0))
476#define NODES_PGSHIFT (NODES_PGOFF * (NODES_WIDTH != 0))
477#define ZONES_PGSHIFT (ZONES_PGOFF * (ZONES_WIDTH != 0))
478
479
480#ifdef NODE_NOT_IN_PAGEFLAGS
481#define ZONEID_SHIFT (SECTIONS_SHIFT + ZONES_SHIFT)
482#define ZONEID_PGOFF ((SECTIONS_PGOFF < ZONES_PGOFF)? \
483 SECTIONS_PGOFF : ZONES_PGOFF)
484#else
485#define ZONEID_SHIFT (NODES_SHIFT + ZONES_SHIFT)
486#define ZONEID_PGOFF ((NODES_PGOFF < ZONES_PGOFF)? \
487 NODES_PGOFF : ZONES_PGOFF)
488#endif
489
490#define ZONEID_PGSHIFT (ZONEID_PGOFF * (ZONEID_SHIFT != 0))
491
492#if SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH > BITS_PER_LONG - NR_PAGEFLAGS
493#error SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH > BITS_PER_LONG - NR_PAGEFLAGS
494#endif
495
496#define ZONES_MASK ((1UL << ZONES_WIDTH) - 1)
497#define NODES_MASK ((1UL << NODES_WIDTH) - 1)
498#define SECTIONS_MASK ((1UL << SECTIONS_WIDTH) - 1)
499#define ZONEID_MASK ((1UL << ZONEID_SHIFT) - 1)
500
501static inline enum zone_type page_zonenum(struct page *page)
502{
503 return (page->flags >> ZONES_PGSHIFT) & ZONES_MASK;
504}
505
506
507
508
509
510
511
512
513
514static inline int page_zone_id(struct page *page)
515{
516 return (page->flags >> ZONEID_PGSHIFT) & ZONEID_MASK;
517}
518
519static inline int zone_to_nid(struct zone *zone)
520{
521#ifdef CONFIG_NUMA
522 return zone->node;
523#else
524 return 0;
525#endif
526}
527
528#ifdef NODE_NOT_IN_PAGE_FLAGS
529extern int page_to_nid(struct page *page);
530#else
531static inline int page_to_nid(struct page *page)
532{
533 return (page->flags >> NODES_PGSHIFT) & NODES_MASK;
534}
535#endif
536
537static inline struct zone *page_zone(struct page *page)
538{
539 return &NODE_DATA(page_to_nid(page))->node_zones[page_zonenum(page)];
540}
541
542#if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP)
543static inline unsigned long page_to_section(struct page *page)
544{
545 return (page->flags >> SECTIONS_PGSHIFT) & SECTIONS_MASK;
546}
547#endif
548
549static inline void set_page_zone(struct page *page, enum zone_type zone)
550{
551 page->flags &= ~(ZONES_MASK << ZONES_PGSHIFT);
552 page->flags |= (zone & ZONES_MASK) << ZONES_PGSHIFT;
553}
554
555static inline void set_page_node(struct page *page, unsigned long node)
556{
557 page->flags &= ~(NODES_MASK << NODES_PGSHIFT);
558 page->flags |= (node & NODES_MASK) << NODES_PGSHIFT;
559}
560
561static inline void set_page_section(struct page *page, unsigned long section)
562{
563 page->flags &= ~(SECTIONS_MASK << SECTIONS_PGSHIFT);
564 page->flags |= (section & SECTIONS_MASK) << SECTIONS_PGSHIFT;
565}
566
567static inline void set_page_links(struct page *page, enum zone_type zone,
568 unsigned long node, unsigned long pfn)
569{
570 set_page_zone(page, zone);
571 set_page_node(page, node);
572 set_page_section(page, pfn_to_section_nr(pfn));
573}
574
575
576
577
578#include <linux/vmstat.h>
579
580static __always_inline void *lowmem_page_address(struct page *page)
581{
582 return __va(page_to_pfn(page) << PAGE_SHIFT);
583}
584
585#if defined(CONFIG_HIGHMEM) && !defined(WANT_PAGE_VIRTUAL)
586#define HASHED_PAGE_VIRTUAL
587#endif
588
589#if defined(WANT_PAGE_VIRTUAL)
590#define page_address(page) ((page)->virtual)
591#define set_page_address(page, address) \
592 do { \
593 (page)->virtual = (address); \
594 } while(0)
595#define page_address_init() do { } while(0)
596#endif
597
598#if defined(HASHED_PAGE_VIRTUAL)
599void *page_address(struct page *page);
600void set_page_address(struct page *page, void *virtual);
601void page_address_init(void);
602#endif
603
604#if !defined(HASHED_PAGE_VIRTUAL) && !defined(WANT_PAGE_VIRTUAL)
605#define page_address(page) lowmem_page_address(page)
606#define set_page_address(page, address) do { } while(0)
607#define page_address_init() do { } while(0)
608#endif
609
610
611
612
613
614
615
616
617
618
619#define PAGE_MAPPING_ANON 1
620
621extern struct address_space swapper_space;
622static inline struct address_space *page_mapping(struct page *page)
623{
624 struct address_space *mapping = page->mapping;
625
626 VM_BUG_ON(PageSlab(page));
627#ifdef CONFIG_SWAP
628 if (unlikely(PageSwapCache(page)))
629 mapping = &swapper_space;
630 else
631#endif
632 if (unlikely((unsigned long)mapping & PAGE_MAPPING_ANON))
633 mapping = NULL;
634 return mapping;
635}
636
637static inline int PageAnon(struct page *page)
638{
639 return ((unsigned long)page->mapping & PAGE_MAPPING_ANON) != 0;
640}
641
642
643
644
645
646static inline pgoff_t page_index(struct page *page)
647{
648 if (unlikely(PageSwapCache(page)))
649 return page_private(page);
650 return page->index;
651}
652
653
654
655
656
657
658static inline void reset_page_mapcount(struct page *page)
659{
660 atomic_set(&(page)->_mapcount, -1);
661}
662
663static inline int page_mapcount(struct page *page)
664{
665 return atomic_read(&(page)->_mapcount) + 1;
666}
667
668
669
670
671static inline int page_mapped(struct page *page)
672{
673 return atomic_read(&(page)->_mapcount) >= 0;
674}
675
676
677
678
679
680
681
682#define VM_FAULT_MINOR 0
683
684#define VM_FAULT_OOM 0x0001
685#define VM_FAULT_SIGBUS 0x0002
686#define VM_FAULT_MAJOR 0x0004
687#define VM_FAULT_WRITE 0x0008
688
689#define VM_FAULT_NOPAGE 0x0100
690#define VM_FAULT_LOCKED 0x0200
691
692#define VM_FAULT_ERROR (VM_FAULT_OOM | VM_FAULT_SIGBUS)
693
694
695
696
697extern void pagefault_out_of_memory(void);
698
699#define offset_in_page(p) ((unsigned long)(p) & ~PAGE_MASK)
700
701extern void show_free_areas(void);
702
703#ifdef CONFIG_SHMEM
704extern int shmem_lock(struct file *file, int lock, struct user_struct *user);
705#else
706static inline int shmem_lock(struct file *file, int lock,
707 struct user_struct *user)
708{
709 return 0;
710}
711#endif
712struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags);
713
714int shmem_zero_setup(struct vm_area_struct *);
715
716#ifndef CONFIG_MMU
717extern unsigned long shmem_get_unmapped_area(struct file *file,
718 unsigned long addr,
719 unsigned long len,
720 unsigned long pgoff,
721 unsigned long flags);
722#endif
723
724extern int can_do_mlock(void);
725extern int user_shm_lock(size_t, struct user_struct *);
726extern void user_shm_unlock(size_t, struct user_struct *);
727
728
729
730
731struct zap_details {
732 struct vm_area_struct *nonlinear_vma;
733 struct address_space *check_mapping;
734 pgoff_t first_index;
735 pgoff_t last_index;
736 spinlock_t *i_mmap_lock;
737 unsigned long truncate_count;
738};
739
740struct page *vm_normal_page(struct vm_area_struct *vma, unsigned long addr,
741 pte_t pte);
742
743int zap_vma_ptes(struct vm_area_struct *vma, unsigned long address,
744 unsigned long size);
745unsigned long zap_page_range(struct vm_area_struct *vma, unsigned long address,
746 unsigned long size, struct zap_details *);
747unsigned long unmap_vmas(struct mmu_gather **tlb,
748 struct vm_area_struct *start_vma, unsigned long start_addr,
749 unsigned long end_addr, unsigned long *nr_accounted,
750 struct zap_details *);
751
752
753
754
755
756
757
758
759
760
761
762struct mm_walk {
763 int (*pgd_entry)(pgd_t *, unsigned long, unsigned long, struct mm_walk *);
764 int (*pud_entry)(pud_t *, unsigned long, unsigned long, struct mm_walk *);
765 int (*pmd_entry)(pmd_t *, unsigned long, unsigned long, struct mm_walk *);
766 int (*pte_entry)(pte_t *, unsigned long, unsigned long, struct mm_walk *);
767 int (*pte_hole)(unsigned long, unsigned long, struct mm_walk *);
768 struct mm_struct *mm;
769 void *private;
770};
771
772int walk_page_range(unsigned long addr, unsigned long end,
773 struct mm_walk *walk);
774void free_pgd_range(struct mmu_gather *tlb, unsigned long addr,
775 unsigned long end, unsigned long floor, unsigned long ceiling);
776int copy_page_range(struct mm_struct *dst, struct mm_struct *src,
777 struct vm_area_struct *vma);
778void unmap_mapping_range(struct address_space *mapping,
779 loff_t const holebegin, loff_t const holelen, int even_cows);
780int follow_pfn(struct vm_area_struct *vma, unsigned long address,
781 unsigned long *pfn);
782int follow_phys(struct vm_area_struct *vma, unsigned long address,
783 unsigned int flags, unsigned long *prot, resource_size_t *phys);
784int generic_access_phys(struct vm_area_struct *vma, unsigned long addr,
785 void *buf, int len, int write);
786
787static inline void unmap_shared_mapping_range(struct address_space *mapping,
788 loff_t const holebegin, loff_t const holelen)
789{
790 unmap_mapping_range(mapping, holebegin, holelen, 0);
791}
792
793extern int vmtruncate(struct inode * inode, loff_t offset);
794extern int vmtruncate_range(struct inode * inode, loff_t offset, loff_t end);
795
796#ifdef CONFIG_MMU
797extern int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
798 unsigned long address, unsigned int flags);
799#else
800static inline int handle_mm_fault(struct mm_struct *mm,
801 struct vm_area_struct *vma, unsigned long address,
802 unsigned int flags)
803{
804
805 BUG();
806 return VM_FAULT_SIGBUS;
807}
808#endif
809
810extern int make_pages_present(unsigned long addr, unsigned long end);
811extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write);
812
813int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
814 unsigned long start, int nr_pages, int write, int force,
815 struct page **pages, struct vm_area_struct **vmas);
816int get_user_pages_fast(unsigned long start, int nr_pages, int write,
817 struct page **pages);
818
819extern int try_to_release_page(struct page * page, gfp_t gfp_mask);
820extern void do_invalidatepage(struct page *page, unsigned long offset);
821
822int __set_page_dirty_nobuffers(struct page *page);
823int __set_page_dirty_no_writeback(struct page *page);
824int redirty_page_for_writepage(struct writeback_control *wbc,
825 struct page *page);
826void account_page_dirtied(struct page *page, struct address_space *mapping);
827int set_page_dirty(struct page *page);
828int set_page_dirty_lock(struct page *page);
829int clear_page_dirty_for_io(struct page *page);
830
831extern unsigned long move_page_tables(struct vm_area_struct *vma,
832 unsigned long old_addr, struct vm_area_struct *new_vma,
833 unsigned long new_addr, unsigned long len);
834extern unsigned long do_mremap(unsigned long addr,
835 unsigned long old_len, unsigned long new_len,
836 unsigned long flags, unsigned long new_addr);
837extern int mprotect_fixup(struct vm_area_struct *vma,
838 struct vm_area_struct **pprev, unsigned long start,
839 unsigned long end, unsigned long newflags);
840
841
842
843
844int __get_user_pages_fast(unsigned long start, int nr_pages, int write,
845 struct page **pages);
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862struct shrinker {
863 int (*shrink)(int nr_to_scan, gfp_t gfp_mask);
864 int seeks;
865
866
867 struct list_head list;
868 long nr;
869};
870#define DEFAULT_SEEKS 2
871extern void register_shrinker(struct shrinker *);
872extern void unregister_shrinker(struct shrinker *);
873
874int vma_wants_writenotify(struct vm_area_struct *vma);
875
876extern pte_t *get_locked_pte(struct mm_struct *mm, unsigned long addr, spinlock_t **ptl);
877
878#ifdef __PAGETABLE_PUD_FOLDED
879static inline int __pud_alloc(struct mm_struct *mm, pgd_t *pgd,
880 unsigned long address)
881{
882 return 0;
883}
884#else
885int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address);
886#endif
887
888#ifdef __PAGETABLE_PMD_FOLDED
889static inline int __pmd_alloc(struct mm_struct *mm, pud_t *pud,
890 unsigned long address)
891{
892 return 0;
893}
894#else
895int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address);
896#endif
897
898int __pte_alloc(struct mm_struct *mm, pmd_t *pmd, unsigned long address);
899int __pte_alloc_kernel(pmd_t *pmd, unsigned long address);
900
901
902
903
904
905#if defined(CONFIG_MMU) && !defined(__ARCH_HAS_4LEVEL_HACK)
906static inline pud_t *pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
907{
908 return (unlikely(pgd_none(*pgd)) && __pud_alloc(mm, pgd, address))?
909 NULL: pud_offset(pgd, address);
910}
911
912static inline pmd_t *pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address)
913{
914 return (unlikely(pud_none(*pud)) && __pmd_alloc(mm, pud, address))?
915 NULL: pmd_offset(pud, address);
916}
917#endif
918
919#if USE_SPLIT_PTLOCKS
920
921
922
923
924
925
926#define __pte_lockptr(page) &((page)->ptl)
927#define pte_lock_init(_page) do { \
928 spin_lock_init(__pte_lockptr(_page)); \
929} while (0)
930#define pte_lock_deinit(page) ((page)->mapping = NULL)
931#define pte_lockptr(mm, pmd) ({(void)(mm); __pte_lockptr(pmd_page(*(pmd)));})
932#else
933
934
935
936#define pte_lock_init(page) do {} while (0)
937#define pte_lock_deinit(page) do {} while (0)
938#define pte_lockptr(mm, pmd) ({(void)(pmd); &(mm)->page_table_lock;})
939#endif
940
941static inline void pgtable_page_ctor(struct page *page)
942{
943 pte_lock_init(page);
944 inc_zone_page_state(page, NR_PAGETABLE);
945}
946
947static inline void pgtable_page_dtor(struct page *page)
948{
949 pte_lock_deinit(page);
950 dec_zone_page_state(page, NR_PAGETABLE);
951}
952
953#define pte_offset_map_lock(mm, pmd, address, ptlp) \
954({ \
955 spinlock_t *__ptl = pte_lockptr(mm, pmd); \
956 pte_t *__pte = pte_offset_map(pmd, address); \
957 *(ptlp) = __ptl; \
958 spin_lock(__ptl); \
959 __pte; \
960})
961
962#define pte_unmap_unlock(pte, ptl) do { \
963 spin_unlock(ptl); \
964 pte_unmap(pte); \
965} while (0)
966
967#define pte_alloc_map(mm, pmd, address) \
968 ((unlikely(!pmd_present(*(pmd))) && __pte_alloc(mm, pmd, address))? \
969 NULL: pte_offset_map(pmd, address))
970
971#define pte_alloc_map_lock(mm, pmd, address, ptlp) \
972 ((unlikely(!pmd_present(*(pmd))) && __pte_alloc(mm, pmd, address))? \
973 NULL: pte_offset_map_lock(mm, pmd, address, ptlp))
974
975#define pte_alloc_kernel(pmd, address) \
976 ((unlikely(!pmd_present(*(pmd))) && __pte_alloc_kernel(pmd, address))? \
977 NULL: pte_offset_kernel(pmd, address))
978
979extern void free_area_init(unsigned long * zones_size);
980extern void free_area_init_node(int nid, unsigned long * zones_size,
981 unsigned long zone_start_pfn, unsigned long *zholes_size);
982#ifdef CONFIG_ARCH_POPULATES_NODE_MAP
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010extern void free_area_init_nodes(unsigned long *max_zone_pfn);
1011extern void add_active_range(unsigned int nid, unsigned long start_pfn,
1012 unsigned long end_pfn);
1013extern void remove_active_range(unsigned int nid, unsigned long start_pfn,
1014 unsigned long end_pfn);
1015extern void remove_all_active_ranges(void);
1016extern unsigned long absent_pages_in_range(unsigned long start_pfn,
1017 unsigned long end_pfn);
1018extern void get_pfn_range_for_nid(unsigned int nid,
1019 unsigned long *start_pfn, unsigned long *end_pfn);
1020extern unsigned long find_min_pfn_with_active_regions(void);
1021extern void free_bootmem_with_active_regions(int nid,
1022 unsigned long max_low_pfn);
1023typedef int (*work_fn_t)(unsigned long, unsigned long, void *);
1024extern void work_with_active_regions(int nid, work_fn_t work_fn, void *data);
1025extern void sparse_memory_present_with_active_regions(int nid);
1026#endif
1027
1028#if !defined(CONFIG_ARCH_POPULATES_NODE_MAP) && \
1029 !defined(CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID)
1030static inline int __early_pfn_to_nid(unsigned long pfn)
1031{
1032 return 0;
1033}
1034#else
1035
1036extern int __meminit early_pfn_to_nid(unsigned long pfn);
1037#ifdef CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID
1038
1039extern int __meminit __early_pfn_to_nid(unsigned long pfn);
1040#endif
1041#endif
1042
1043extern void set_dma_reserve(unsigned long new_dma_reserve);
1044extern void memmap_init_zone(unsigned long, int, unsigned long,
1045 unsigned long, enum memmap_context);
1046extern void setup_per_zone_wmarks(void);
1047extern void calculate_zone_inactive_ratio(struct zone *zone);
1048extern void mem_init(void);
1049extern void __init mmap_init(void);
1050extern void show_mem(void);
1051extern void si_meminfo(struct sysinfo * val);
1052extern void si_meminfo_node(struct sysinfo *val, int nid);
1053extern int after_bootmem;
1054
1055#ifdef CONFIG_NUMA
1056extern void setup_per_cpu_pageset(void);
1057#else
1058static inline void setup_per_cpu_pageset(void) {}
1059#endif
1060
1061
1062extern atomic_long_t mmap_pages_allocated;
1063
1064
1065void vma_prio_tree_add(struct vm_area_struct *, struct vm_area_struct *old);
1066void vma_prio_tree_insert(struct vm_area_struct *, struct prio_tree_root *);
1067void vma_prio_tree_remove(struct vm_area_struct *, struct prio_tree_root *);
1068struct vm_area_struct *vma_prio_tree_next(struct vm_area_struct *vma,
1069 struct prio_tree_iter *iter);
1070
1071#define vma_prio_tree_foreach(vma, iter, root, begin, end) \
1072 for (prio_tree_iter_init(iter, root, begin, end), vma = NULL; \
1073 (vma = vma_prio_tree_next(vma, iter)); )
1074
1075static inline void vma_nonlinear_insert(struct vm_area_struct *vma,
1076 struct list_head *list)
1077{
1078 vma->shared.vm_set.parent = NULL;
1079 list_add_tail(&vma->shared.vm_set.list, list);
1080}
1081
1082
1083extern int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin);
1084extern void vma_adjust(struct vm_area_struct *vma, unsigned long start,
1085 unsigned long end, pgoff_t pgoff, struct vm_area_struct *insert);
1086extern struct vm_area_struct *vma_merge(struct mm_struct *,
1087 struct vm_area_struct *prev, unsigned long addr, unsigned long end,
1088 unsigned long vm_flags, struct anon_vma *, struct file *, pgoff_t,
1089 struct mempolicy *);
1090extern struct anon_vma *find_mergeable_anon_vma(struct vm_area_struct *);
1091extern int split_vma(struct mm_struct *,
1092 struct vm_area_struct *, unsigned long addr, int new_below);
1093extern int insert_vm_struct(struct mm_struct *, struct vm_area_struct *);
1094extern void __vma_link_rb(struct mm_struct *, struct vm_area_struct *,
1095 struct rb_node **, struct rb_node *);
1096extern void unlink_file_vma(struct vm_area_struct *);
1097extern struct vm_area_struct *copy_vma(struct vm_area_struct **,
1098 unsigned long addr, unsigned long len, pgoff_t pgoff);
1099extern void exit_mmap(struct mm_struct *);
1100
1101extern int mm_take_all_locks(struct mm_struct *mm);
1102extern void mm_drop_all_locks(struct mm_struct *mm);
1103
1104#ifdef CONFIG_PROC_FS
1105
1106extern void added_exe_file_vma(struct mm_struct *mm);
1107extern void removed_exe_file_vma(struct mm_struct *mm);
1108#else
1109static inline void added_exe_file_vma(struct mm_struct *mm)
1110{}
1111
1112static inline void removed_exe_file_vma(struct mm_struct *mm)
1113{}
1114#endif
1115
1116extern int may_expand_vm(struct mm_struct *mm, unsigned long npages);
1117extern int install_special_mapping(struct mm_struct *mm,
1118 unsigned long addr, unsigned long len,
1119 unsigned long flags, struct page **pages);
1120
1121extern unsigned long get_unmapped_area(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
1122
1123extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
1124 unsigned long len, unsigned long prot,
1125 unsigned long flag, unsigned long pgoff);
1126extern unsigned long mmap_region(struct file *file, unsigned long addr,
1127 unsigned long len, unsigned long flags,
1128 unsigned int vm_flags, unsigned long pgoff);
1129
1130static inline unsigned long do_mmap(struct file *file, unsigned long addr,
1131 unsigned long len, unsigned long prot,
1132 unsigned long flag, unsigned long offset)
1133{
1134 unsigned long ret = -EINVAL;
1135 if ((offset + PAGE_ALIGN(len)) < offset)
1136 goto out;
1137 if (!(offset & ~PAGE_MASK))
1138 ret = do_mmap_pgoff(file, addr, len, prot, flag, offset >> PAGE_SHIFT);
1139out:
1140 return ret;
1141}
1142
1143extern int do_munmap(struct mm_struct *, unsigned long, size_t);
1144
1145extern unsigned long do_brk(unsigned long, unsigned long);
1146
1147
1148extern unsigned long page_unuse(struct page *);
1149extern void truncate_inode_pages(struct address_space *, loff_t);
1150extern void truncate_inode_pages_range(struct address_space *,
1151 loff_t lstart, loff_t lend);
1152
1153
1154extern int filemap_fault(struct vm_area_struct *, struct vm_fault *);
1155
1156
1157int write_one_page(struct page *page, int wait);
1158void task_dirty_inc(struct task_struct *tsk);
1159
1160
1161#define VM_MAX_READAHEAD 128
1162#define VM_MIN_READAHEAD 16
1163
1164int force_page_cache_readahead(struct address_space *mapping, struct file *filp,
1165 pgoff_t offset, unsigned long nr_to_read);
1166
1167void page_cache_sync_readahead(struct address_space *mapping,
1168 struct file_ra_state *ra,
1169 struct file *filp,
1170 pgoff_t offset,
1171 unsigned long size);
1172
1173void page_cache_async_readahead(struct address_space *mapping,
1174 struct file_ra_state *ra,
1175 struct file *filp,
1176 struct page *pg,
1177 pgoff_t offset,
1178 unsigned long size);
1179
1180unsigned long max_sane_readahead(unsigned long nr);
1181unsigned long ra_submit(struct file_ra_state *ra,
1182 struct address_space *mapping,
1183 struct file *filp);
1184
1185
1186extern int expand_stack(struct vm_area_struct *vma, unsigned long address);
1187#ifdef CONFIG_IA64
1188extern int expand_upwards(struct vm_area_struct *vma, unsigned long address);
1189#endif
1190extern int expand_stack_downwards(struct vm_area_struct *vma,
1191 unsigned long address);
1192
1193
1194extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long addr);
1195extern struct vm_area_struct * find_vma_prev(struct mm_struct * mm, unsigned long addr,
1196 struct vm_area_struct **pprev);
1197
1198
1199
1200static inline struct vm_area_struct * find_vma_intersection(struct mm_struct * mm, unsigned long start_addr, unsigned long end_addr)
1201{
1202 struct vm_area_struct * vma = find_vma(mm,start_addr);
1203
1204 if (vma && end_addr <= vma->vm_start)
1205 vma = NULL;
1206 return vma;
1207}
1208
1209static inline unsigned long vma_pages(struct vm_area_struct *vma)
1210{
1211 return (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;
1212}
1213
1214pgprot_t vm_get_page_prot(unsigned long vm_flags);
1215struct vm_area_struct *find_extend_vma(struct mm_struct *, unsigned long addr);
1216int remap_pfn_range(struct vm_area_struct *, unsigned long addr,
1217 unsigned long pfn, unsigned long size, pgprot_t);
1218int vm_insert_page(struct vm_area_struct *, unsigned long addr, struct page *);
1219int vm_insert_pfn(struct vm_area_struct *vma, unsigned long addr,
1220 unsigned long pfn);
1221int vm_insert_mixed(struct vm_area_struct *vma, unsigned long addr,
1222 unsigned long pfn);
1223
1224struct page *follow_page(struct vm_area_struct *, unsigned long address,
1225 unsigned int foll_flags);
1226#define FOLL_WRITE 0x01
1227#define FOLL_TOUCH 0x02
1228#define FOLL_GET 0x04
1229#define FOLL_ANON 0x08
1230
1231typedef int (*pte_fn_t)(pte_t *pte, pgtable_t token, unsigned long addr,
1232 void *data);
1233extern int apply_to_page_range(struct mm_struct *mm, unsigned long address,
1234 unsigned long size, pte_fn_t fn, void *data);
1235
1236#ifdef CONFIG_PROC_FS
1237void vm_stat_account(struct mm_struct *, unsigned long, struct file *, long);
1238#else
1239static inline void vm_stat_account(struct mm_struct *mm,
1240 unsigned long flags, struct file *file, long pages)
1241{
1242}
1243#endif
1244
1245#ifdef CONFIG_DEBUG_PAGEALLOC
1246extern int debug_pagealloc_enabled;
1247
1248extern void kernel_map_pages(struct page *page, int numpages, int enable);
1249
1250static inline void enable_debug_pagealloc(void)
1251{
1252 debug_pagealloc_enabled = 1;
1253}
1254#ifdef CONFIG_HIBERNATION
1255extern bool kernel_page_present(struct page *page);
1256#endif
1257#else
1258static inline void
1259kernel_map_pages(struct page *page, int numpages, int enable) {}
1260static inline void enable_debug_pagealloc(void)
1261{
1262}
1263#ifdef CONFIG_HIBERNATION
1264static inline bool kernel_page_present(struct page *page) { return true; }
1265#endif
1266#endif
1267
1268extern struct vm_area_struct *get_gate_vma(struct task_struct *tsk);
1269#ifdef __HAVE_ARCH_GATE_AREA
1270int in_gate_area_no_task(unsigned long addr);
1271int in_gate_area(struct task_struct *task, unsigned long addr);
1272#else
1273int in_gate_area_no_task(unsigned long addr);
1274#define in_gate_area(task, addr) ({(void)task; in_gate_area_no_task(addr);})
1275#endif
1276
1277int drop_caches_sysctl_handler(struct ctl_table *, int, struct file *,
1278 void __user *, size_t *, loff_t *);
1279unsigned long shrink_slab(unsigned long scanned, gfp_t gfp_mask,
1280 unsigned long lru_pages);
1281
1282#ifndef CONFIG_MMU
1283#define randomize_va_space 0
1284#else
1285extern int randomize_va_space;
1286#endif
1287
1288const char * arch_vma_name(struct vm_area_struct *vma);
1289void print_vma_addr(char *prefix, unsigned long rip);
1290
1291struct page *sparse_mem_map_populate(unsigned long pnum, int nid);
1292pgd_t *vmemmap_pgd_populate(unsigned long addr, int node);
1293pud_t *vmemmap_pud_populate(pgd_t *pgd, unsigned long addr, int node);
1294pmd_t *vmemmap_pmd_populate(pud_t *pud, unsigned long addr, int node);
1295pte_t *vmemmap_pte_populate(pmd_t *pmd, unsigned long addr, int node);
1296void *vmemmap_alloc_block(unsigned long size, int node);
1297void vmemmap_verify(pte_t *, int, unsigned long, unsigned long);
1298int vmemmap_populate_basepages(struct page *start_page,
1299 unsigned long pages, int node);
1300int vmemmap_populate(struct page *start_page, unsigned long pages, int node);
1301void vmemmap_populate_print_last(void);
1302
1303extern int account_locked_memory(struct mm_struct *mm, struct rlimit *rlim,
1304 size_t size);
1305extern void refund_locked_memory(struct mm_struct *mm, size_t size);
1306#endif
1307#endif
1308