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/atomic.h>
14#include <linux/debug_locks.h>
15#include <linux/mm_types.h>
16#include <linux/range.h>
17#include <linux/pfn.h>
18#include <linux/bit_spinlock.h>
19#include <linux/shrinker.h>
20
21struct mempolicy;
22struct anon_vma;
23struct file_ra_state;
24struct user_struct;
25struct writeback_control;
26
27#ifndef CONFIG_DISCONTIGMEM
28extern unsigned long max_mapnr;
29#endif
30
31extern unsigned long num_physpages;
32extern unsigned long totalram_pages;
33extern void * high_memory;
34extern int page_cluster;
35
36#ifdef CONFIG_SYSCTL
37extern int sysctl_legacy_va_layout;
38#else
39#define sysctl_legacy_va_layout 0
40#endif
41
42#include <asm/page.h>
43#include <asm/pgtable.h>
44#include <asm/processor.h>
45
46#define nth_page(page,n) pfn_to_page(page_to_pfn((page)) + (n))
47
48
49#define PAGE_ALIGN(addr) ALIGN(addr, PAGE_SIZE)
50
51
52
53
54
55
56
57
58
59
60extern struct kmem_cache *vm_area_cachep;
61
62#ifndef CONFIG_MMU
63extern struct rb_root nommu_region_tree;
64extern struct rw_semaphore nommu_region_sem;
65
66extern unsigned int kobjsize(const void *objp);
67#endif
68
69
70
71
72#define VM_READ 0x00000001
73#define VM_WRITE 0x00000002
74#define VM_EXEC 0x00000004
75#define VM_SHARED 0x00000008
76
77
78#define VM_MAYREAD 0x00000010
79#define VM_MAYWRITE 0x00000020
80#define VM_MAYEXEC 0x00000040
81#define VM_MAYSHARE 0x00000080
82
83#define VM_GROWSDOWN 0x00000100
84#if defined(CONFIG_STACK_GROWSUP) || defined(CONFIG_IA64)
85#define VM_GROWSUP 0x00000200
86#else
87#define VM_GROWSUP 0x00000000
88#define VM_NOHUGEPAGE 0x00000200
89#endif
90#define VM_PFNMAP 0x00000400
91#define VM_DENYWRITE 0x00000800
92
93#define VM_EXECUTABLE 0x00001000
94#define VM_LOCKED 0x00002000
95#define VM_IO 0x00004000
96
97
98#define VM_SEQ_READ 0x00008000
99#define VM_RAND_READ 0x00010000
100
101#define VM_DONTCOPY 0x00020000
102#define VM_DONTEXPAND 0x00040000
103#define VM_RESERVED 0x00080000
104#define VM_ACCOUNT 0x00100000
105#define VM_NORESERVE 0x00200000
106#define VM_HUGETLB 0x00400000
107#define VM_NONLINEAR 0x00800000
108#ifndef CONFIG_TRANSPARENT_HUGEPAGE
109#define VM_MAPPED_COPY 0x01000000
110#else
111#define VM_HUGEPAGE 0x01000000
112#endif
113#define VM_INSERTPAGE 0x02000000
114#define VM_ALWAYSDUMP 0x04000000
115
116#define VM_CAN_NONLINEAR 0x08000000
117#define VM_MIXEDMAP 0x10000000
118#define VM_SAO 0x20000000
119#define VM_PFN_AT_MMAP 0x40000000
120#define VM_MERGEABLE 0x80000000
121
122
123#define VM_STACK_INCOMPLETE_SETUP (VM_RAND_READ | VM_SEQ_READ)
124
125#ifndef VM_STACK_DEFAULT_FLAGS
126#define VM_STACK_DEFAULT_FLAGS VM_DATA_DEFAULT_FLAGS
127#endif
128
129#ifdef CONFIG_STACK_GROWSUP
130#define VM_STACK_FLAGS (VM_GROWSUP | VM_STACK_DEFAULT_FLAGS | VM_ACCOUNT)
131#else
132#define VM_STACK_FLAGS (VM_GROWSDOWN | VM_STACK_DEFAULT_FLAGS | VM_ACCOUNT)
133#endif
134
135#define VM_READHINTMASK (VM_SEQ_READ | VM_RAND_READ)
136#define VM_ClearReadHint(v) (v)->vm_flags &= ~VM_READHINTMASK
137#define VM_NormalReadHint(v) (!((v)->vm_flags & VM_READHINTMASK))
138#define VM_SequentialReadHint(v) ((v)->vm_flags & VM_SEQ_READ)
139#define VM_RandomReadHint(v) ((v)->vm_flags & VM_RAND_READ)
140
141
142
143
144
145#define VM_SPECIAL (VM_IO | VM_DONTEXPAND | VM_RESERVED | VM_PFNMAP)
146
147
148
149
150
151extern pgprot_t protection_map[16];
152
153#define FAULT_FLAG_WRITE 0x01
154#define FAULT_FLAG_NONLINEAR 0x02
155#define FAULT_FLAG_MKWRITE 0x04
156#define FAULT_FLAG_ALLOW_RETRY 0x08
157#define FAULT_FLAG_RETRY_NOWAIT 0x10
158#define FAULT_FLAG_KILLABLE 0x20
159
160
161
162
163
164
165
166
167
168static inline int is_linear_pfn_mapping(struct vm_area_struct *vma)
169{
170 return !!(vma->vm_flags & VM_PFN_AT_MMAP);
171}
172
173static inline int is_pfn_mapping(struct vm_area_struct *vma)
174{
175 return !!(vma->vm_flags & VM_PFNMAP);
176}
177
178
179
180
181
182
183
184
185
186
187struct vm_fault {
188 unsigned int flags;
189 pgoff_t pgoff;
190 void __user *virtual_address;
191
192 struct page *page;
193
194
195
196
197};
198
199
200
201
202
203
204struct vm_operations_struct {
205 void (*open)(struct vm_area_struct * area);
206 void (*close)(struct vm_area_struct * area);
207 int (*fault)(struct vm_area_struct *vma, struct vm_fault *vmf);
208
209
210
211 int (*page_mkwrite)(struct vm_area_struct *vma, struct vm_fault *vmf);
212
213
214
215
216 int (*access)(struct vm_area_struct *vma, unsigned long addr,
217 void *buf, int len, int write);
218#ifdef CONFIG_NUMA
219
220
221
222
223
224
225
226 int (*set_policy)(struct vm_area_struct *vma, struct mempolicy *new);
227
228
229
230
231
232
233
234
235
236
237
238 struct mempolicy *(*get_policy)(struct vm_area_struct *vma,
239 unsigned long addr);
240 int (*migrate)(struct vm_area_struct *vma, const nodemask_t *from,
241 const nodemask_t *to, unsigned long flags);
242#endif
243};
244
245struct mmu_gather;
246struct inode;
247
248#define page_private(page) ((page)->private)
249#define set_page_private(page, v) ((page)->private = (v))
250
251
252
253
254
255#include <linux/page-flags.h>
256#include <linux/huge_mm.h>
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274static inline int put_page_testzero(struct page *page)
275{
276 VM_BUG_ON(atomic_read(&page->_count) == 0);
277 return atomic_dec_and_test(&page->_count);
278}
279
280
281
282
283
284static inline int get_page_unless_zero(struct page *page)
285{
286 return atomic_inc_not_zero(&page->_count);
287}
288
289extern int page_is_ram(unsigned long pfn);
290
291
292struct page *vmalloc_to_page(const void *addr);
293unsigned long vmalloc_to_pfn(const void *addr);
294
295
296
297
298
299
300
301static inline int is_vmalloc_addr(const void *x)
302{
303#ifdef CONFIG_MMU
304 unsigned long addr = (unsigned long)x;
305
306 return addr >= VMALLOC_START && addr < VMALLOC_END;
307#else
308 return 0;
309#endif
310}
311#ifdef CONFIG_MMU
312extern int is_vmalloc_or_module_addr(const void *x);
313#else
314static inline int is_vmalloc_or_module_addr(const void *x)
315{
316 return 0;
317}
318#endif
319
320static inline void compound_lock(struct page *page)
321{
322#ifdef CONFIG_TRANSPARENT_HUGEPAGE
323 bit_spin_lock(PG_compound_lock, &page->flags);
324#endif
325}
326
327static inline void compound_unlock(struct page *page)
328{
329#ifdef CONFIG_TRANSPARENT_HUGEPAGE
330 bit_spin_unlock(PG_compound_lock, &page->flags);
331#endif
332}
333
334static inline unsigned long compound_lock_irqsave(struct page *page)
335{
336 unsigned long uninitialized_var(flags);
337#ifdef CONFIG_TRANSPARENT_HUGEPAGE
338 local_irq_save(flags);
339 compound_lock(page);
340#endif
341 return flags;
342}
343
344static inline void compound_unlock_irqrestore(struct page *page,
345 unsigned long flags)
346{
347#ifdef CONFIG_TRANSPARENT_HUGEPAGE
348 compound_unlock(page);
349 local_irq_restore(flags);
350#endif
351}
352
353static inline struct page *compound_head(struct page *page)
354{
355 if (unlikely(PageTail(page)))
356 return page->first_page;
357 return page;
358}
359
360
361
362
363
364
365static inline void reset_page_mapcount(struct page *page)
366{
367 atomic_set(&(page)->_mapcount, -1);
368}
369
370static inline int page_mapcount(struct page *page)
371{
372 return atomic_read(&(page)->_mapcount) + 1;
373}
374
375static inline int page_count(struct page *page)
376{
377 return atomic_read(&compound_head(page)->_count);
378}
379
380static inline void get_huge_page_tail(struct page *page)
381{
382
383
384
385
386 VM_BUG_ON(page_mapcount(page) < 0);
387 VM_BUG_ON(atomic_read(&page->_count) != 0);
388 atomic_inc(&page->_mapcount);
389}
390
391extern bool __get_page_tail(struct page *page);
392
393static inline void get_page(struct page *page)
394{
395 if (unlikely(PageTail(page)))
396 if (likely(__get_page_tail(page)))
397 return;
398
399
400
401
402 VM_BUG_ON(atomic_read(&page->_count) <= 0);
403 atomic_inc(&page->_count);
404}
405
406static inline struct page *virt_to_head_page(const void *x)
407{
408 struct page *page = virt_to_page(x);
409 return compound_head(page);
410}
411
412
413
414
415
416static inline void init_page_count(struct page *page)
417{
418 atomic_set(&page->_count, 1);
419}
420
421
422
423
424
425
426
427
428
429
430#define PAGE_BUDDY_MAPCOUNT_VALUE (-128)
431
432static inline int PageBuddy(struct page *page)
433{
434 return atomic_read(&page->_mapcount) == PAGE_BUDDY_MAPCOUNT_VALUE;
435}
436
437static inline void __SetPageBuddy(struct page *page)
438{
439 VM_BUG_ON(atomic_read(&page->_mapcount) != -1);
440 atomic_set(&page->_mapcount, PAGE_BUDDY_MAPCOUNT_VALUE);
441}
442
443static inline void __ClearPageBuddy(struct page *page)
444{
445 VM_BUG_ON(!PageBuddy(page));
446 atomic_set(&page->_mapcount, -1);
447}
448
449void put_page(struct page *page);
450void put_pages_list(struct list_head *pages);
451
452void split_page(struct page *page, unsigned int order);
453int split_free_page(struct page *page);
454
455
456
457
458
459
460typedef void compound_page_dtor(struct page *);
461
462static inline void set_compound_page_dtor(struct page *page,
463 compound_page_dtor *dtor)
464{
465 page[1].lru.next = (void *)dtor;
466}
467
468static inline compound_page_dtor *get_compound_page_dtor(struct page *page)
469{
470 return (compound_page_dtor *)page[1].lru.next;
471}
472
473static inline int compound_order(struct page *page)
474{
475 if (!PageHead(page))
476 return 0;
477 return (unsigned long)page[1].lru.prev;
478}
479
480static inline int compound_trans_order(struct page *page)
481{
482 int order;
483 unsigned long flags;
484
485 if (!PageHead(page))
486 return 0;
487
488 flags = compound_lock_irqsave(page);
489 order = compound_order(page);
490 compound_unlock_irqrestore(page, flags);
491 return order;
492}
493
494static inline void set_compound_order(struct page *page, unsigned long order)
495{
496 page[1].lru.prev = (void *)order;
497}
498
499#ifdef CONFIG_MMU
500
501
502
503
504
505
506static inline pte_t maybe_mkwrite(pte_t pte, struct vm_area_struct *vma)
507{
508 if (likely(vma->vm_flags & VM_WRITE))
509 pte = pte_mkwrite(pte);
510 return pte;
511}
512#endif
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594#if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP)
595#define SECTIONS_WIDTH SECTIONS_SHIFT
596#else
597#define SECTIONS_WIDTH 0
598#endif
599
600#define ZONES_WIDTH ZONES_SHIFT
601
602#if SECTIONS_WIDTH+ZONES_WIDTH+NODES_SHIFT <= BITS_PER_LONG - NR_PAGEFLAGS
603#define NODES_WIDTH NODES_SHIFT
604#else
605#ifdef CONFIG_SPARSEMEM_VMEMMAP
606#error "Vmemmap: No space for nodes field in page flags"
607#endif
608#define NODES_WIDTH 0
609#endif
610
611
612#define SECTIONS_PGOFF ((sizeof(unsigned long)*8) - SECTIONS_WIDTH)
613#define NODES_PGOFF (SECTIONS_PGOFF - NODES_WIDTH)
614#define ZONES_PGOFF (NODES_PGOFF - ZONES_WIDTH)
615
616
617
618
619
620#if !(NODES_WIDTH > 0 || NODES_SHIFT == 0)
621#define NODE_NOT_IN_PAGE_FLAGS
622#endif
623
624
625
626
627
628
629#define SECTIONS_PGSHIFT (SECTIONS_PGOFF * (SECTIONS_WIDTH != 0))
630#define NODES_PGSHIFT (NODES_PGOFF * (NODES_WIDTH != 0))
631#define ZONES_PGSHIFT (ZONES_PGOFF * (ZONES_WIDTH != 0))
632
633
634#ifdef NODE_NOT_IN_PAGE_FLAGS
635#define ZONEID_SHIFT (SECTIONS_SHIFT + ZONES_SHIFT)
636#define ZONEID_PGOFF ((SECTIONS_PGOFF < ZONES_PGOFF)? \
637 SECTIONS_PGOFF : ZONES_PGOFF)
638#else
639#define ZONEID_SHIFT (NODES_SHIFT + ZONES_SHIFT)
640#define ZONEID_PGOFF ((NODES_PGOFF < ZONES_PGOFF)? \
641 NODES_PGOFF : ZONES_PGOFF)
642#endif
643
644#define ZONEID_PGSHIFT (ZONEID_PGOFF * (ZONEID_SHIFT != 0))
645
646#if SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH > BITS_PER_LONG - NR_PAGEFLAGS
647#error SECTIONS_WIDTH+NODES_WIDTH+ZONES_WIDTH > BITS_PER_LONG - NR_PAGEFLAGS
648#endif
649
650#define ZONES_MASK ((1UL << ZONES_WIDTH) - 1)
651#define NODES_MASK ((1UL << NODES_WIDTH) - 1)
652#define SECTIONS_MASK ((1UL << SECTIONS_WIDTH) - 1)
653#define ZONEID_MASK ((1UL << ZONEID_SHIFT) - 1)
654
655static inline enum zone_type page_zonenum(const struct page *page)
656{
657 return (page->flags >> ZONES_PGSHIFT) & ZONES_MASK;
658}
659
660
661
662
663
664
665
666
667
668static inline int page_zone_id(struct page *page)
669{
670 return (page->flags >> ZONEID_PGSHIFT) & ZONEID_MASK;
671}
672
673static inline int zone_to_nid(struct zone *zone)
674{
675#ifdef CONFIG_NUMA
676 return zone->node;
677#else
678 return 0;
679#endif
680}
681
682#ifdef NODE_NOT_IN_PAGE_FLAGS
683extern int page_to_nid(const struct page *page);
684#else
685static inline int page_to_nid(const struct page *page)
686{
687 return (page->flags >> NODES_PGSHIFT) & NODES_MASK;
688}
689#endif
690
691static inline struct zone *page_zone(const struct page *page)
692{
693 return &NODE_DATA(page_to_nid(page))->node_zones[page_zonenum(page)];
694}
695
696#if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP)
697static inline void set_page_section(struct page *page, unsigned long section)
698{
699 page->flags &= ~(SECTIONS_MASK << SECTIONS_PGSHIFT);
700 page->flags |= (section & SECTIONS_MASK) << SECTIONS_PGSHIFT;
701}
702
703static inline unsigned long page_to_section(const struct page *page)
704{
705 return (page->flags >> SECTIONS_PGSHIFT) & SECTIONS_MASK;
706}
707#endif
708
709static inline void set_page_zone(struct page *page, enum zone_type zone)
710{
711 page->flags &= ~(ZONES_MASK << ZONES_PGSHIFT);
712 page->flags |= (zone & ZONES_MASK) << ZONES_PGSHIFT;
713}
714
715static inline void set_page_node(struct page *page, unsigned long node)
716{
717 page->flags &= ~(NODES_MASK << NODES_PGSHIFT);
718 page->flags |= (node & NODES_MASK) << NODES_PGSHIFT;
719}
720
721static inline void set_page_links(struct page *page, enum zone_type zone,
722 unsigned long node, unsigned long pfn)
723{
724 set_page_zone(page, zone);
725 set_page_node(page, node);
726#if defined(CONFIG_SPARSEMEM) && !defined(CONFIG_SPARSEMEM_VMEMMAP)
727 set_page_section(page, pfn_to_section_nr(pfn));
728#endif
729}
730
731
732
733
734#include <linux/vmstat.h>
735
736static __always_inline void *lowmem_page_address(const struct page *page)
737{
738 return __va(PFN_PHYS(page_to_pfn(page)));
739}
740
741#if defined(CONFIG_HIGHMEM) && !defined(WANT_PAGE_VIRTUAL)
742#define HASHED_PAGE_VIRTUAL
743#endif
744
745#if defined(WANT_PAGE_VIRTUAL)
746#define page_address(page) ((page)->virtual)
747#define set_page_address(page, address) \
748 do { \
749 (page)->virtual = (address); \
750 } while(0)
751#define page_address_init() do { } while(0)
752#endif
753
754#if defined(HASHED_PAGE_VIRTUAL)
755void *page_address(const struct page *page);
756void set_page_address(struct page *page, void *virtual);
757void page_address_init(void);
758#endif
759
760#if !defined(HASHED_PAGE_VIRTUAL) && !defined(WANT_PAGE_VIRTUAL)
761#define page_address(page) lowmem_page_address(page)
762#define set_page_address(page, address) do { } while(0)
763#define page_address_init() do { } while(0)
764#endif
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782#define PAGE_MAPPING_ANON 1
783#define PAGE_MAPPING_KSM 2
784#define PAGE_MAPPING_FLAGS (PAGE_MAPPING_ANON | PAGE_MAPPING_KSM)
785
786extern struct address_space swapper_space;
787static inline struct address_space *page_mapping(struct page *page)
788{
789 struct address_space *mapping = page->mapping;
790
791 VM_BUG_ON(PageSlab(page));
792 if (unlikely(PageSwapCache(page)))
793 mapping = &swapper_space;
794 else if ((unsigned long)mapping & PAGE_MAPPING_ANON)
795 mapping = NULL;
796 return mapping;
797}
798
799
800static inline void *page_rmapping(struct page *page)
801{
802 return (void *)((unsigned long)page->mapping & ~PAGE_MAPPING_FLAGS);
803}
804
805static inline int PageAnon(struct page *page)
806{
807 return ((unsigned long)page->mapping & PAGE_MAPPING_ANON) != 0;
808}
809
810
811
812
813
814static inline pgoff_t page_index(struct page *page)
815{
816 if (unlikely(PageSwapCache(page)))
817 return page_private(page);
818 return page->index;
819}
820
821
822
823
824static inline int page_mapped(struct page *page)
825{
826 return atomic_read(&(page)->_mapcount) >= 0;
827}
828
829
830
831
832
833
834
835#define VM_FAULT_MINOR 0
836
837#define VM_FAULT_OOM 0x0001
838#define VM_FAULT_SIGBUS 0x0002
839#define VM_FAULT_MAJOR 0x0004
840#define VM_FAULT_WRITE 0x0008
841#define VM_FAULT_HWPOISON 0x0010
842#define VM_FAULT_HWPOISON_LARGE 0x0020
843
844#define VM_FAULT_NOPAGE 0x0100
845#define VM_FAULT_LOCKED 0x0200
846#define VM_FAULT_RETRY 0x0400
847
848#define VM_FAULT_HWPOISON_LARGE_MASK 0xf000
849
850#define VM_FAULT_ERROR (VM_FAULT_OOM | VM_FAULT_SIGBUS | VM_FAULT_HWPOISON | \
851 VM_FAULT_HWPOISON_LARGE)
852
853
854#define VM_FAULT_SET_HINDEX(x) ((x) << 12)
855#define VM_FAULT_GET_HINDEX(x) (((x) >> 12) & 0xf)
856
857
858
859
860extern void pagefault_out_of_memory(void);
861
862#define offset_in_page(p) ((unsigned long)(p) & ~PAGE_MASK)
863
864
865
866
867
868#define SHOW_MEM_FILTER_NODES (0x0001u)
869
870extern void show_free_areas(unsigned int flags);
871extern bool skip_free_areas_node(unsigned int flags, int nid);
872
873int shmem_lock(struct file *file, int lock, struct user_struct *user);
874struct file *shmem_file_setup(const char *name, loff_t size, unsigned long flags);
875int shmem_zero_setup(struct vm_area_struct *);
876
877extern int can_do_mlock(void);
878extern int user_shm_lock(size_t, struct user_struct *);
879extern void user_shm_unlock(size_t, struct user_struct *);
880
881
882
883
884struct zap_details {
885 struct vm_area_struct *nonlinear_vma;
886 struct address_space *check_mapping;
887 pgoff_t first_index;
888 pgoff_t last_index;
889};
890
891struct page *vm_normal_page(struct vm_area_struct *vma, unsigned long addr,
892 pte_t pte);
893
894int zap_vma_ptes(struct vm_area_struct *vma, unsigned long address,
895 unsigned long size);
896unsigned long zap_page_range(struct vm_area_struct *vma, unsigned long address,
897 unsigned long size, struct zap_details *);
898unsigned long unmap_vmas(struct mmu_gather *tlb,
899 struct vm_area_struct *start_vma, unsigned long start_addr,
900 unsigned long end_addr, unsigned long *nr_accounted,
901 struct zap_details *);
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919struct mm_walk {
920 int (*pgd_entry)(pgd_t *, unsigned long, unsigned long, struct mm_walk *);
921 int (*pud_entry)(pud_t *, unsigned long, unsigned long, struct mm_walk *);
922 int (*pmd_entry)(pmd_t *, unsigned long, unsigned long, struct mm_walk *);
923 int (*pte_entry)(pte_t *, unsigned long, unsigned long, struct mm_walk *);
924 int (*pte_hole)(unsigned long, unsigned long, struct mm_walk *);
925 int (*hugetlb_entry)(pte_t *, unsigned long,
926 unsigned long, unsigned long, struct mm_walk *);
927 struct mm_struct *mm;
928 void *private;
929};
930
931int walk_page_range(unsigned long addr, unsigned long end,
932 struct mm_walk *walk);
933void free_pgd_range(struct mmu_gather *tlb, unsigned long addr,
934 unsigned long end, unsigned long floor, unsigned long ceiling);
935int copy_page_range(struct mm_struct *dst, struct mm_struct *src,
936 struct vm_area_struct *vma);
937void unmap_mapping_range(struct address_space *mapping,
938 loff_t const holebegin, loff_t const holelen, int even_cows);
939int follow_pfn(struct vm_area_struct *vma, unsigned long address,
940 unsigned long *pfn);
941int follow_phys(struct vm_area_struct *vma, unsigned long address,
942 unsigned int flags, unsigned long *prot, resource_size_t *phys);
943int generic_access_phys(struct vm_area_struct *vma, unsigned long addr,
944 void *buf, int len, int write);
945
946static inline void unmap_shared_mapping_range(struct address_space *mapping,
947 loff_t const holebegin, loff_t const holelen)
948{
949 unmap_mapping_range(mapping, holebegin, holelen, 0);
950}
951
952extern void truncate_pagecache(struct inode *inode, loff_t old, loff_t new);
953extern void truncate_setsize(struct inode *inode, loff_t newsize);
954extern int vmtruncate(struct inode *inode, loff_t offset);
955extern int vmtruncate_range(struct inode *inode, loff_t offset, loff_t end);
956
957int truncate_inode_page(struct address_space *mapping, struct page *page);
958int generic_error_remove_page(struct address_space *mapping, struct page *page);
959
960int invalidate_inode_page(struct page *page);
961
962#ifdef CONFIG_MMU
963extern int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
964 unsigned long address, unsigned int flags);
965extern int fixup_user_fault(struct task_struct *tsk, struct mm_struct *mm,
966 unsigned long address, unsigned int fault_flags);
967#else
968static inline int handle_mm_fault(struct mm_struct *mm,
969 struct vm_area_struct *vma, unsigned long address,
970 unsigned int flags)
971{
972
973 BUG();
974 return VM_FAULT_SIGBUS;
975}
976static inline int fixup_user_fault(struct task_struct *tsk,
977 struct mm_struct *mm, unsigned long address,
978 unsigned int fault_flags)
979{
980
981 BUG();
982 return -EFAULT;
983}
984#endif
985
986extern int make_pages_present(unsigned long addr, unsigned long end);
987extern int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write);
988extern int access_remote_vm(struct mm_struct *mm, unsigned long addr,
989 void *buf, int len, int write);
990
991int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
992 unsigned long start, int len, unsigned int foll_flags,
993 struct page **pages, struct vm_area_struct **vmas,
994 int *nonblocking);
995int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
996 unsigned long start, int nr_pages, int write, int force,
997 struct page **pages, struct vm_area_struct **vmas);
998int get_user_pages_fast(unsigned long start, int nr_pages, int write,
999 struct page **pages);
1000struct page *get_dump_page(unsigned long addr);
1001
1002extern int try_to_release_page(struct page * page, gfp_t gfp_mask);
1003extern void do_invalidatepage(struct page *page, unsigned long offset);
1004
1005int __set_page_dirty_nobuffers(struct page *page);
1006int __set_page_dirty_no_writeback(struct page *page);
1007int redirty_page_for_writepage(struct writeback_control *wbc,
1008 struct page *page);
1009void account_page_dirtied(struct page *page, struct address_space *mapping);
1010void account_page_writeback(struct page *page);
1011int set_page_dirty(struct page *page);
1012int set_page_dirty_lock(struct page *page);
1013int clear_page_dirty_for_io(struct page *page);
1014
1015
1016static inline int vma_growsdown(struct vm_area_struct *vma, unsigned long addr)
1017{
1018 return vma && (vma->vm_end == addr) && (vma->vm_flags & VM_GROWSDOWN);
1019}
1020
1021static inline int stack_guard_page_start(struct vm_area_struct *vma,
1022 unsigned long addr)
1023{
1024 return (vma->vm_flags & VM_GROWSDOWN) &&
1025 (vma->vm_start == addr) &&
1026 !vma_growsdown(vma->vm_prev, addr);
1027}
1028
1029
1030static inline int vma_growsup(struct vm_area_struct *vma, unsigned long addr)
1031{
1032 return vma && (vma->vm_start == addr) && (vma->vm_flags & VM_GROWSUP);
1033}
1034
1035static inline int stack_guard_page_end(struct vm_area_struct *vma,
1036 unsigned long addr)
1037{
1038 return (vma->vm_flags & VM_GROWSUP) &&
1039 (vma->vm_end == addr) &&
1040 !vma_growsup(vma->vm_next, addr);
1041}
1042
1043extern unsigned long move_page_tables(struct vm_area_struct *vma,
1044 unsigned long old_addr, struct vm_area_struct *new_vma,
1045 unsigned long new_addr, unsigned long len);
1046extern unsigned long do_mremap(unsigned long addr,
1047 unsigned long old_len, unsigned long new_len,
1048 unsigned long flags, unsigned long new_addr);
1049extern int mprotect_fixup(struct vm_area_struct *vma,
1050 struct vm_area_struct **pprev, unsigned long start,
1051 unsigned long end, unsigned long newflags);
1052
1053
1054
1055
1056int __get_user_pages_fast(unsigned long start, int nr_pages, int write,
1057 struct page **pages);
1058
1059
1060
1061static inline void set_mm_counter(struct mm_struct *mm, int member, long value)
1062{
1063 atomic_long_set(&mm->rss_stat.count[member], value);
1064}
1065
1066#if defined(SPLIT_RSS_COUNTING)
1067unsigned long get_mm_counter(struct mm_struct *mm, int member);
1068#else
1069static inline unsigned long get_mm_counter(struct mm_struct *mm, int member)
1070{
1071 return atomic_long_read(&mm->rss_stat.count[member]);
1072}
1073#endif
1074
1075static inline void add_mm_counter(struct mm_struct *mm, int member, long value)
1076{
1077 atomic_long_add(value, &mm->rss_stat.count[member]);
1078}
1079
1080static inline void inc_mm_counter(struct mm_struct *mm, int member)
1081{
1082 atomic_long_inc(&mm->rss_stat.count[member]);
1083}
1084
1085static inline void dec_mm_counter(struct mm_struct *mm, int member)
1086{
1087 atomic_long_dec(&mm->rss_stat.count[member]);
1088}
1089
1090static inline unsigned long get_mm_rss(struct mm_struct *mm)
1091{
1092 return get_mm_counter(mm, MM_FILEPAGES) +
1093 get_mm_counter(mm, MM_ANONPAGES);
1094}
1095
1096static inline unsigned long get_mm_hiwater_rss(struct mm_struct *mm)
1097{
1098 return max(mm->hiwater_rss, get_mm_rss(mm));
1099}
1100
1101static inline unsigned long get_mm_hiwater_vm(struct mm_struct *mm)
1102{
1103 return max(mm->hiwater_vm, mm->total_vm);
1104}
1105
1106static inline void update_hiwater_rss(struct mm_struct *mm)
1107{
1108 unsigned long _rss = get_mm_rss(mm);
1109
1110 if ((mm)->hiwater_rss < _rss)
1111 (mm)->hiwater_rss = _rss;
1112}
1113
1114static inline void update_hiwater_vm(struct mm_struct *mm)
1115{
1116 if (mm->hiwater_vm < mm->total_vm)
1117 mm->hiwater_vm = mm->total_vm;
1118}
1119
1120static inline void setmax_mm_hiwater_rss(unsigned long *maxrss,
1121 struct mm_struct *mm)
1122{
1123 unsigned long hiwater_rss = get_mm_hiwater_rss(mm);
1124
1125 if (*maxrss < hiwater_rss)
1126 *maxrss = hiwater_rss;
1127}
1128
1129#if defined(SPLIT_RSS_COUNTING)
1130void sync_mm_rss(struct task_struct *task, struct mm_struct *mm);
1131#else
1132static inline void sync_mm_rss(struct task_struct *task, struct mm_struct *mm)
1133{
1134}
1135#endif
1136
1137int vma_wants_writenotify(struct vm_area_struct *vma);
1138
1139extern pte_t *__get_locked_pte(struct mm_struct *mm, unsigned long addr,
1140 spinlock_t **ptl);
1141static inline pte_t *get_locked_pte(struct mm_struct *mm, unsigned long addr,
1142 spinlock_t **ptl)
1143{
1144 pte_t *ptep;
1145 __cond_lock(*ptl, ptep = __get_locked_pte(mm, addr, ptl));
1146 return ptep;
1147}
1148
1149#ifdef __PAGETABLE_PUD_FOLDED
1150static inline int __pud_alloc(struct mm_struct *mm, pgd_t *pgd,
1151 unsigned long address)
1152{
1153 return 0;
1154}
1155#else
1156int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address);
1157#endif
1158
1159#ifdef __PAGETABLE_PMD_FOLDED
1160static inline int __pmd_alloc(struct mm_struct *mm, pud_t *pud,
1161 unsigned long address)
1162{
1163 return 0;
1164}
1165#else
1166int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address);
1167#endif
1168
1169int __pte_alloc(struct mm_struct *mm, struct vm_area_struct *vma,
1170 pmd_t *pmd, unsigned long address);
1171int __pte_alloc_kernel(pmd_t *pmd, unsigned long address);
1172
1173
1174
1175
1176
1177#if defined(CONFIG_MMU) && !defined(__ARCH_HAS_4LEVEL_HACK)
1178static inline pud_t *pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
1179{
1180 return (unlikely(pgd_none(*pgd)) && __pud_alloc(mm, pgd, address))?
1181 NULL: pud_offset(pgd, address);
1182}
1183
1184static inline pmd_t *pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address)
1185{
1186 return (unlikely(pud_none(*pud)) && __pmd_alloc(mm, pud, address))?
1187 NULL: pmd_offset(pud, address);
1188}
1189#endif
1190
1191#if USE_SPLIT_PTLOCKS
1192
1193
1194
1195
1196
1197
1198#define __pte_lockptr(page) &((page)->ptl)
1199#define pte_lock_init(_page) do { \
1200 spin_lock_init(__pte_lockptr(_page)); \
1201} while (0)
1202#define pte_lock_deinit(page) ((page)->mapping = NULL)
1203#define pte_lockptr(mm, pmd) ({(void)(mm); __pte_lockptr(pmd_page(*(pmd)));})
1204#else
1205
1206
1207
1208#define pte_lock_init(page) do {} while (0)
1209#define pte_lock_deinit(page) do {} while (0)
1210#define pte_lockptr(mm, pmd) ({(void)(pmd); &(mm)->page_table_lock;})
1211#endif
1212
1213static inline void pgtable_page_ctor(struct page *page)
1214{
1215 pte_lock_init(page);
1216 inc_zone_page_state(page, NR_PAGETABLE);
1217}
1218
1219static inline void pgtable_page_dtor(struct page *page)
1220{
1221 pte_lock_deinit(page);
1222 dec_zone_page_state(page, NR_PAGETABLE);
1223}
1224
1225#define pte_offset_map_lock(mm, pmd, address, ptlp) \
1226({ \
1227 spinlock_t *__ptl = pte_lockptr(mm, pmd); \
1228 pte_t *__pte = pte_offset_map(pmd, address); \
1229 *(ptlp) = __ptl; \
1230 spin_lock(__ptl); \
1231 __pte; \
1232})
1233
1234#define pte_unmap_unlock(pte, ptl) do { \
1235 spin_unlock(ptl); \
1236 pte_unmap(pte); \
1237} while (0)
1238
1239#define pte_alloc_map(mm, vma, pmd, address) \
1240 ((unlikely(pmd_none(*(pmd))) && __pte_alloc(mm, vma, \
1241 pmd, address))? \
1242 NULL: pte_offset_map(pmd, address))
1243
1244#define pte_alloc_map_lock(mm, pmd, address, ptlp) \
1245 ((unlikely(pmd_none(*(pmd))) && __pte_alloc(mm, NULL, \
1246 pmd, address))? \
1247 NULL: pte_offset_map_lock(mm, pmd, address, ptlp))
1248
1249#define pte_alloc_kernel(pmd, address) \
1250 ((unlikely(pmd_none(*(pmd))) && __pte_alloc_kernel(pmd, address))? \
1251 NULL: pte_offset_kernel(pmd, address))
1252
1253extern void free_area_init(unsigned long * zones_size);
1254extern void free_area_init_node(int nid, unsigned long * zones_size,
1255 unsigned long zone_start_pfn, unsigned long *zholes_size);
1256#ifdef CONFIG_HAVE_MEMBLOCK_NODE_MAP
1257
1258
1259
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270
1271
1272
1273
1274
1275
1276
1277
1278
1279
1280
1281
1282
1283extern void free_area_init_nodes(unsigned long *max_zone_pfn);
1284unsigned long node_map_pfn_alignment(void);
1285unsigned long __absent_pages_in_range(int nid, unsigned long start_pfn,
1286 unsigned long end_pfn);
1287extern unsigned long absent_pages_in_range(unsigned long start_pfn,
1288 unsigned long end_pfn);
1289extern void get_pfn_range_for_nid(unsigned int nid,
1290 unsigned long *start_pfn, unsigned long *end_pfn);
1291extern unsigned long find_min_pfn_with_active_regions(void);
1292extern void free_bootmem_with_active_regions(int nid,
1293 unsigned long max_low_pfn);
1294int add_from_early_node_map(struct range *range, int az,
1295 int nr_range, int nid);
1296extern void sparse_memory_present_with_active_regions(int nid);
1297
1298#endif
1299
1300#if !defined(CONFIG_HAVE_MEMBLOCK_NODE_MAP) && \
1301 !defined(CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID)
1302static inline int __early_pfn_to_nid(unsigned long pfn)
1303{
1304 return 0;
1305}
1306#else
1307
1308extern int __meminit early_pfn_to_nid(unsigned long pfn);
1309#ifdef CONFIG_HAVE_ARCH_EARLY_PFN_TO_NID
1310
1311extern int __meminit __early_pfn_to_nid(unsigned long pfn);
1312#endif
1313#endif
1314
1315extern void set_dma_reserve(unsigned long new_dma_reserve);
1316extern void memmap_init_zone(unsigned long, int, unsigned long,
1317 unsigned long, enum memmap_context);
1318extern void setup_per_zone_wmarks(void);
1319extern int __meminit init_per_zone_wmark_min(void);
1320extern void mem_init(void);
1321extern void __init mmap_init(void);
1322extern void show_mem(unsigned int flags);
1323extern void si_meminfo(struct sysinfo * val);
1324extern void si_meminfo_node(struct sysinfo *val, int nid);
1325extern int after_bootmem;
1326
1327extern __printf(3, 4)
1328void warn_alloc_failed(gfp_t gfp_mask, int order, const char *fmt, ...);
1329
1330extern void setup_per_cpu_pageset(void);
1331
1332extern void zone_pcp_update(struct zone *zone);
1333
1334
1335extern atomic_long_t mmap_pages_allocated;
1336extern int nommu_shrink_inode_mappings(struct inode *, size_t, size_t);
1337
1338
1339void vma_prio_tree_add(struct vm_area_struct *, struct vm_area_struct *old);
1340void vma_prio_tree_insert(struct vm_area_struct *, struct prio_tree_root *);
1341void vma_prio_tree_remove(struct vm_area_struct *, struct prio_tree_root *);
1342struct vm_area_struct *vma_prio_tree_next(struct vm_area_struct *vma,
1343 struct prio_tree_iter *iter);
1344
1345#define vma_prio_tree_foreach(vma, iter, root, begin, end) \
1346 for (prio_tree_iter_init(iter, root, begin, end), vma = NULL; \
1347 (vma = vma_prio_tree_next(vma, iter)); )
1348
1349static inline void vma_nonlinear_insert(struct vm_area_struct *vma,
1350 struct list_head *list)
1351{
1352 vma->shared.vm_set.parent = NULL;
1353 list_add_tail(&vma->shared.vm_set.list, list);
1354}
1355
1356
1357extern int __vm_enough_memory(struct mm_struct *mm, long pages, int cap_sys_admin);
1358extern int vma_adjust(struct vm_area_struct *vma, unsigned long start,
1359 unsigned long end, pgoff_t pgoff, struct vm_area_struct *insert);
1360extern struct vm_area_struct *vma_merge(struct mm_struct *,
1361 struct vm_area_struct *prev, unsigned long addr, unsigned long end,
1362 unsigned long vm_flags, struct anon_vma *, struct file *, pgoff_t,
1363 struct mempolicy *);
1364extern struct anon_vma *find_mergeable_anon_vma(struct vm_area_struct *);
1365extern int split_vma(struct mm_struct *,
1366 struct vm_area_struct *, unsigned long addr, int new_below);
1367extern int insert_vm_struct(struct mm_struct *, struct vm_area_struct *);
1368extern void __vma_link_rb(struct mm_struct *, struct vm_area_struct *,
1369 struct rb_node **, struct rb_node *);
1370extern void unlink_file_vma(struct vm_area_struct *);
1371extern struct vm_area_struct *copy_vma(struct vm_area_struct **,
1372 unsigned long addr, unsigned long len, pgoff_t pgoff);
1373extern void exit_mmap(struct mm_struct *);
1374
1375extern int mm_take_all_locks(struct mm_struct *mm);
1376extern void mm_drop_all_locks(struct mm_struct *mm);
1377
1378
1379extern void added_exe_file_vma(struct mm_struct *mm);
1380extern void removed_exe_file_vma(struct mm_struct *mm);
1381extern void set_mm_exe_file(struct mm_struct *mm, struct file *new_exe_file);
1382extern struct file *get_mm_exe_file(struct mm_struct *mm);
1383
1384extern int may_expand_vm(struct mm_struct *mm, unsigned long npages);
1385extern int install_special_mapping(struct mm_struct *mm,
1386 unsigned long addr, unsigned long len,
1387 unsigned long flags, struct page **pages);
1388
1389extern unsigned long get_unmapped_area(struct file *, unsigned long, unsigned long, unsigned long, unsigned long);
1390
1391extern unsigned long do_mmap_pgoff(struct file *file, unsigned long addr,
1392 unsigned long len, unsigned long prot,
1393 unsigned long flag, unsigned long pgoff);
1394extern unsigned long mmap_region(struct file *file, unsigned long addr,
1395 unsigned long len, unsigned long flags,
1396 vm_flags_t vm_flags, unsigned long pgoff);
1397
1398static inline unsigned long do_mmap(struct file *file, unsigned long addr,
1399 unsigned long len, unsigned long prot,
1400 unsigned long flag, unsigned long offset)
1401{
1402 unsigned long ret = -EINVAL;
1403 if ((offset + PAGE_ALIGN(len)) < offset)
1404 goto out;
1405 if (!(offset & ~PAGE_MASK))
1406 ret = do_mmap_pgoff(file, addr, len, prot, flag, offset >> PAGE_SHIFT);
1407out:
1408 return ret;
1409}
1410
1411extern int do_munmap(struct mm_struct *, unsigned long, size_t);
1412
1413extern unsigned long do_brk(unsigned long, unsigned long);
1414
1415
1416extern void truncate_inode_pages(struct address_space *, loff_t);
1417extern void truncate_inode_pages_range(struct address_space *,
1418 loff_t lstart, loff_t lend);
1419
1420
1421extern int filemap_fault(struct vm_area_struct *, struct vm_fault *);
1422
1423
1424int write_one_page(struct page *page, int wait);
1425void task_dirty_inc(struct task_struct *tsk);
1426
1427
1428#define VM_MAX_READAHEAD 128
1429#define VM_MIN_READAHEAD 16
1430
1431int force_page_cache_readahead(struct address_space *mapping, struct file *filp,
1432 pgoff_t offset, unsigned long nr_to_read);
1433
1434void page_cache_sync_readahead(struct address_space *mapping,
1435 struct file_ra_state *ra,
1436 struct file *filp,
1437 pgoff_t offset,
1438 unsigned long size);
1439
1440void page_cache_async_readahead(struct address_space *mapping,
1441 struct file_ra_state *ra,
1442 struct file *filp,
1443 struct page *pg,
1444 pgoff_t offset,
1445 unsigned long size);
1446
1447unsigned long max_sane_readahead(unsigned long nr);
1448unsigned long ra_submit(struct file_ra_state *ra,
1449 struct address_space *mapping,
1450 struct file *filp);
1451
1452
1453extern int expand_stack(struct vm_area_struct *vma, unsigned long address);
1454
1455
1456extern int expand_downwards(struct vm_area_struct *vma,
1457 unsigned long address);
1458#if VM_GROWSUP
1459extern int expand_upwards(struct vm_area_struct *vma, unsigned long address);
1460#else
1461 #define expand_upwards(vma, address) do { } while (0)
1462#endif
1463
1464
1465extern struct vm_area_struct * find_vma(struct mm_struct * mm, unsigned long addr);
1466extern struct vm_area_struct * find_vma_prev(struct mm_struct * mm, unsigned long addr,
1467 struct vm_area_struct **pprev);
1468
1469
1470
1471static inline struct vm_area_struct * find_vma_intersection(struct mm_struct * mm, unsigned long start_addr, unsigned long end_addr)
1472{
1473 struct vm_area_struct * vma = find_vma(mm,start_addr);
1474
1475 if (vma && end_addr <= vma->vm_start)
1476 vma = NULL;
1477 return vma;
1478}
1479
1480static inline unsigned long vma_pages(struct vm_area_struct *vma)
1481{
1482 return (vma->vm_end - vma->vm_start) >> PAGE_SHIFT;
1483}
1484
1485
1486static inline struct vm_area_struct *find_exact_vma(struct mm_struct *mm,
1487 unsigned long vm_start, unsigned long vm_end)
1488{
1489 struct vm_area_struct *vma = find_vma(mm, vm_start);
1490
1491 if (vma && (vma->vm_start != vm_start || vma->vm_end != vm_end))
1492 vma = NULL;
1493
1494 return vma;
1495}
1496
1497#ifdef CONFIG_MMU
1498pgprot_t vm_get_page_prot(unsigned long vm_flags);
1499#else
1500static inline pgprot_t vm_get_page_prot(unsigned long vm_flags)
1501{
1502 return __pgprot(0);
1503}
1504#endif
1505
1506struct vm_area_struct *find_extend_vma(struct mm_struct *, unsigned long addr);
1507int remap_pfn_range(struct vm_area_struct *, unsigned long addr,
1508 unsigned long pfn, unsigned long size, pgprot_t);
1509int vm_insert_page(struct vm_area_struct *, unsigned long addr, struct page *);
1510int vm_insert_pfn(struct vm_area_struct *vma, unsigned long addr,
1511 unsigned long pfn);
1512int vm_insert_mixed(struct vm_area_struct *vma, unsigned long addr,
1513 unsigned long pfn);
1514
1515struct page *follow_page(struct vm_area_struct *, unsigned long address,
1516 unsigned int foll_flags);
1517#define FOLL_WRITE 0x01
1518#define FOLL_TOUCH 0x02
1519#define FOLL_GET 0x04
1520#define FOLL_DUMP 0x08
1521#define FOLL_FORCE 0x10
1522#define FOLL_NOWAIT 0x20
1523
1524#define FOLL_MLOCK 0x40
1525#define FOLL_SPLIT 0x80
1526#define FOLL_HWPOISON 0x100
1527
1528typedef int (*pte_fn_t)(pte_t *pte, pgtable_t token, unsigned long addr,
1529 void *data);
1530extern int apply_to_page_range(struct mm_struct *mm, unsigned long address,
1531 unsigned long size, pte_fn_t fn, void *data);
1532
1533#ifdef CONFIG_PROC_FS
1534void vm_stat_account(struct mm_struct *, unsigned long, struct file *, long);
1535#else
1536static inline void vm_stat_account(struct mm_struct *mm,
1537 unsigned long flags, struct file *file, long pages)
1538{
1539}
1540#endif
1541
1542#ifdef CONFIG_DEBUG_PAGEALLOC
1543extern void kernel_map_pages(struct page *page, int numpages, int enable);
1544#ifdef CONFIG_HIBERNATION
1545extern bool kernel_page_present(struct page *page);
1546#endif
1547#else
1548static inline void
1549kernel_map_pages(struct page *page, int numpages, int enable) {}
1550#ifdef CONFIG_HIBERNATION
1551static inline bool kernel_page_present(struct page *page) { return true; }
1552#endif
1553#endif
1554
1555extern struct vm_area_struct *get_gate_vma(struct mm_struct *mm);
1556#ifdef __HAVE_ARCH_GATE_AREA
1557int in_gate_area_no_mm(unsigned long addr);
1558int in_gate_area(struct mm_struct *mm, unsigned long addr);
1559#else
1560int in_gate_area_no_mm(unsigned long addr);
1561#define in_gate_area(mm, addr) ({(void)mm; in_gate_area_no_mm(addr);})
1562#endif
1563
1564int drop_caches_sysctl_handler(struct ctl_table *, int,
1565 void __user *, size_t *, loff_t *);
1566unsigned long shrink_slab(struct shrink_control *shrink,
1567 unsigned long nr_pages_scanned,
1568 unsigned long lru_pages);
1569
1570#ifndef CONFIG_MMU
1571#define randomize_va_space 0
1572#else
1573extern int randomize_va_space;
1574#endif
1575
1576const char * arch_vma_name(struct vm_area_struct *vma);
1577void print_vma_addr(char *prefix, unsigned long rip);
1578
1579void sparse_mem_maps_populate_node(struct page **map_map,
1580 unsigned long pnum_begin,
1581 unsigned long pnum_end,
1582 unsigned long map_count,
1583 int nodeid);
1584
1585struct page *sparse_mem_map_populate(unsigned long pnum, int nid);
1586pgd_t *vmemmap_pgd_populate(unsigned long addr, int node);
1587pud_t *vmemmap_pud_populate(pgd_t *pgd, unsigned long addr, int node);
1588pmd_t *vmemmap_pmd_populate(pud_t *pud, unsigned long addr, int node);
1589pte_t *vmemmap_pte_populate(pmd_t *pmd, unsigned long addr, int node);
1590void *vmemmap_alloc_block(unsigned long size, int node);
1591void *vmemmap_alloc_block_buf(unsigned long size, int node);
1592void vmemmap_verify(pte_t *, int, unsigned long, unsigned long);
1593int vmemmap_populate_basepages(struct page *start_page,
1594 unsigned long pages, int node);
1595int vmemmap_populate(struct page *start_page, unsigned long pages, int node);
1596void vmemmap_populate_print_last(void);
1597
1598
1599enum mf_flags {
1600 MF_COUNT_INCREASED = 1 << 0,
1601};
1602extern void memory_failure(unsigned long pfn, int trapno);
1603extern int __memory_failure(unsigned long pfn, int trapno, int flags);
1604extern void memory_failure_queue(unsigned long pfn, int trapno, int flags);
1605extern int unpoison_memory(unsigned long pfn);
1606extern int sysctl_memory_failure_early_kill;
1607extern int sysctl_memory_failure_recovery;
1608extern void shake_page(struct page *p, int access);
1609extern atomic_long_t mce_bad_pages;
1610extern int soft_offline_page(struct page *page, int flags);
1611
1612extern void dump_page(struct page *page);
1613
1614#if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_HUGETLBFS)
1615extern void clear_huge_page(struct page *page,
1616 unsigned long addr,
1617 unsigned int pages_per_huge_page);
1618extern void copy_user_huge_page(struct page *dst, struct page *src,
1619 unsigned long addr, struct vm_area_struct *vma,
1620 unsigned int pages_per_huge_page);
1621#endif
1622
1623#ifdef CONFIG_DEBUG_PAGEALLOC
1624extern unsigned int _debug_guardpage_minorder;
1625
1626static inline unsigned int debug_guardpage_minorder(void)
1627{
1628 return _debug_guardpage_minorder;
1629}
1630
1631static inline bool page_is_guard(struct page *page)
1632{
1633 return test_bit(PAGE_DEBUG_FLAG_GUARD, &page->debug_flags);
1634}
1635#else
1636static inline unsigned int debug_guardpage_minorder(void) { return 0; }
1637static inline bool page_is_guard(struct page *page) { return false; }
1638#endif
1639
1640#endif
1641#endif
1642