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