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