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