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