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