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