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