1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41#include <linux/kernel_stat.h>
42#include <linux/mm.h>
43#include <linux/hugetlb.h>
44#include <linux/mman.h>
45#include <linux/swap.h>
46#include <linux/highmem.h>
47#include <linux/pagemap.h>
48#include <linux/ksm.h>
49#include <linux/rmap.h>
50#include <linux/module.h>
51#include <linux/delayacct.h>
52#include <linux/init.h>
53#include <linux/writeback.h>
54#include <linux/memcontrol.h>
55#include <linux/mmu_notifier.h>
56#include <linux/kallsyms.h>
57#include <linux/swapops.h>
58#include <linux/elf.h>
59#include <linux/gfp.h>
60
61#include <asm/io.h>
62#include <asm/pgalloc.h>
63#include <asm/uaccess.h>
64#include <asm/tlb.h>
65#include <asm/tlbflush.h>
66#include <asm/pgtable.h>
67
68#include "internal.h"
69
70#ifndef CONFIG_NEED_MULTIPLE_NODES
71
72unsigned long max_mapnr;
73struct page *mem_map;
74
75EXPORT_SYMBOL(max_mapnr);
76EXPORT_SYMBOL(mem_map);
77#endif
78
79unsigned long num_physpages;
80
81
82
83
84
85
86
87void * high_memory;
88
89EXPORT_SYMBOL(num_physpages);
90EXPORT_SYMBOL(high_memory);
91
92
93
94
95
96
97
98int randomize_va_space __read_mostly =
99#ifdef CONFIG_COMPAT_BRK
100 1;
101#else
102 2;
103#endif
104
105static int __init disable_randmaps(char *s)
106{
107 randomize_va_space = 0;
108 return 1;
109}
110__setup("norandmaps", disable_randmaps);
111
112unsigned long zero_pfn __read_mostly;
113unsigned long highest_memmap_pfn __read_mostly;
114
115
116
117
118static int __init init_zero_pfn(void)
119{
120 zero_pfn = page_to_pfn(ZERO_PAGE(0));
121 return 0;
122}
123core_initcall(init_zero_pfn);
124
125
126#if defined(SPLIT_RSS_COUNTING)
127
128static void __sync_task_rss_stat(struct task_struct *task, struct mm_struct *mm)
129{
130 int i;
131
132 for (i = 0; i < NR_MM_COUNTERS; i++) {
133 if (task->rss_stat.count[i]) {
134 add_mm_counter(mm, i, task->rss_stat.count[i]);
135 task->rss_stat.count[i] = 0;
136 }
137 }
138 task->rss_stat.events = 0;
139}
140
141static void add_mm_counter_fast(struct mm_struct *mm, int member, int val)
142{
143 struct task_struct *task = current;
144
145 if (likely(task->mm == mm))
146 task->rss_stat.count[member] += val;
147 else
148 add_mm_counter(mm, member, val);
149}
150#define inc_mm_counter_fast(mm, member) add_mm_counter_fast(mm, member, 1)
151#define dec_mm_counter_fast(mm, member) add_mm_counter_fast(mm, member, -1)
152
153
154#define TASK_RSS_EVENTS_THRESH (64)
155static void check_sync_rss_stat(struct task_struct *task)
156{
157 if (unlikely(task != current))
158 return;
159 if (unlikely(task->rss_stat.events++ > TASK_RSS_EVENTS_THRESH))
160 __sync_task_rss_stat(task, task->mm);
161}
162
163unsigned long get_mm_counter(struct mm_struct *mm, int member)
164{
165 long val = 0;
166
167
168
169
170
171 val = atomic_long_read(&mm->rss_stat.count[member]);
172
173
174
175
176 if (val < 0)
177 return 0;
178 return (unsigned long)val;
179}
180
181void sync_mm_rss(struct task_struct *task, struct mm_struct *mm)
182{
183 __sync_task_rss_stat(task, mm);
184}
185#else
186
187#define inc_mm_counter_fast(mm, member) inc_mm_counter(mm, member)
188#define dec_mm_counter_fast(mm, member) dec_mm_counter(mm, member)
189
190static void check_sync_rss_stat(struct task_struct *task)
191{
192}
193
194#endif
195
196
197
198
199
200
201
202void pgd_clear_bad(pgd_t *pgd)
203{
204 pgd_ERROR(*pgd);
205 pgd_clear(pgd);
206}
207
208void pud_clear_bad(pud_t *pud)
209{
210 pud_ERROR(*pud);
211 pud_clear(pud);
212}
213
214void pmd_clear_bad(pmd_t *pmd)
215{
216 pmd_ERROR(*pmd);
217 pmd_clear(pmd);
218}
219
220
221
222
223
224static void free_pte_range(struct mmu_gather *tlb, pmd_t *pmd,
225 unsigned long addr)
226{
227 pgtable_t token = pmd_pgtable(*pmd);
228 pmd_clear(pmd);
229 pte_free_tlb(tlb, token, addr);
230 tlb->mm->nr_ptes--;
231}
232
233static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud,
234 unsigned long addr, unsigned long end,
235 unsigned long floor, unsigned long ceiling)
236{
237 pmd_t *pmd;
238 unsigned long next;
239 unsigned long start;
240
241 start = addr;
242 pmd = pmd_offset(pud, addr);
243 do {
244 next = pmd_addr_end(addr, end);
245 if (pmd_none_or_clear_bad(pmd))
246 continue;
247 free_pte_range(tlb, pmd, addr);
248 } while (pmd++, addr = next, addr != end);
249
250 start &= PUD_MASK;
251 if (start < floor)
252 return;
253 if (ceiling) {
254 ceiling &= PUD_MASK;
255 if (!ceiling)
256 return;
257 }
258 if (end - 1 > ceiling - 1)
259 return;
260
261 pmd = pmd_offset(pud, start);
262 pud_clear(pud);
263 pmd_free_tlb(tlb, pmd, start);
264}
265
266static inline void free_pud_range(struct mmu_gather *tlb, pgd_t *pgd,
267 unsigned long addr, unsigned long end,
268 unsigned long floor, unsigned long ceiling)
269{
270 pud_t *pud;
271 unsigned long next;
272 unsigned long start;
273
274 start = addr;
275 pud = pud_offset(pgd, addr);
276 do {
277 next = pud_addr_end(addr, end);
278 if (pud_none_or_clear_bad(pud))
279 continue;
280 free_pmd_range(tlb, pud, addr, next, floor, ceiling);
281 } while (pud++, addr = next, addr != end);
282
283 start &= PGDIR_MASK;
284 if (start < floor)
285 return;
286 if (ceiling) {
287 ceiling &= PGDIR_MASK;
288 if (!ceiling)
289 return;
290 }
291 if (end - 1 > ceiling - 1)
292 return;
293
294 pud = pud_offset(pgd, start);
295 pgd_clear(pgd);
296 pud_free_tlb(tlb, pud, start);
297}
298
299
300
301
302
303
304void free_pgd_range(struct mmu_gather *tlb,
305 unsigned long addr, unsigned long end,
306 unsigned long floor, unsigned long ceiling)
307{
308 pgd_t *pgd;
309 unsigned long next;
310 unsigned long start;
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 addr &= PMD_MASK;
339 if (addr < floor) {
340 addr += PMD_SIZE;
341 if (!addr)
342 return;
343 }
344 if (ceiling) {
345 ceiling &= PMD_MASK;
346 if (!ceiling)
347 return;
348 }
349 if (end - 1 > ceiling - 1)
350 end -= PMD_SIZE;
351 if (addr > end - 1)
352 return;
353
354 start = addr;
355 pgd = pgd_offset(tlb->mm, addr);
356 do {
357 next = pgd_addr_end(addr, end);
358 if (pgd_none_or_clear_bad(pgd))
359 continue;
360 free_pud_range(tlb, pgd, addr, next, floor, ceiling);
361 } while (pgd++, addr = next, addr != end);
362}
363
364void free_pgtables(struct mmu_gather *tlb, struct vm_area_struct *vma,
365 unsigned long floor, unsigned long ceiling)
366{
367 while (vma) {
368 struct vm_area_struct *next = vma->vm_next;
369 unsigned long addr = vma->vm_start;
370
371
372
373
374
375 unlink_anon_vmas(vma);
376 unlink_file_vma(vma);
377
378 if (is_vm_hugetlb_page(vma)) {
379 hugetlb_free_pgd_range(tlb, addr, vma->vm_end,
380 floor, next? next->vm_start: ceiling);
381 } else {
382
383
384
385 while (next && next->vm_start <= vma->vm_end + PMD_SIZE
386 && !is_vm_hugetlb_page(next)) {
387 vma = next;
388 next = vma->vm_next;
389 unlink_anon_vmas(vma);
390 unlink_file_vma(vma);
391 }
392 free_pgd_range(tlb, addr, vma->vm_end,
393 floor, next? next->vm_start: ceiling);
394 }
395 vma = next;
396 }
397}
398
399int __pte_alloc(struct mm_struct *mm, pmd_t *pmd, unsigned long address)
400{
401 pgtable_t new = pte_alloc_one(mm, address);
402 if (!new)
403 return -ENOMEM;
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418 smp_wmb();
419
420 spin_lock(&mm->page_table_lock);
421 if (!pmd_present(*pmd)) {
422 mm->nr_ptes++;
423 pmd_populate(mm, pmd, new);
424 new = NULL;
425 }
426 spin_unlock(&mm->page_table_lock);
427 if (new)
428 pte_free(mm, new);
429 return 0;
430}
431
432int __pte_alloc_kernel(pmd_t *pmd, unsigned long address)
433{
434 pte_t *new = pte_alloc_one_kernel(&init_mm, address);
435 if (!new)
436 return -ENOMEM;
437
438 smp_wmb();
439
440 spin_lock(&init_mm.page_table_lock);
441 if (!pmd_present(*pmd)) {
442 pmd_populate_kernel(&init_mm, pmd, new);
443 new = NULL;
444 }
445 spin_unlock(&init_mm.page_table_lock);
446 if (new)
447 pte_free_kernel(&init_mm, new);
448 return 0;
449}
450
451static inline void init_rss_vec(int *rss)
452{
453 memset(rss, 0, sizeof(int) * NR_MM_COUNTERS);
454}
455
456static inline void add_mm_rss_vec(struct mm_struct *mm, int *rss)
457{
458 int i;
459
460 if (current->mm == mm)
461 sync_mm_rss(current, mm);
462 for (i = 0; i < NR_MM_COUNTERS; i++)
463 if (rss[i])
464 add_mm_counter(mm, i, rss[i]);
465}
466
467
468
469
470
471
472
473
474static void print_bad_pte(struct vm_area_struct *vma, unsigned long addr,
475 pte_t pte, struct page *page)
476{
477 pgd_t *pgd = pgd_offset(vma->vm_mm, addr);
478 pud_t *pud = pud_offset(pgd, addr);
479 pmd_t *pmd = pmd_offset(pud, addr);
480 struct address_space *mapping;
481 pgoff_t index;
482 static unsigned long resume;
483 static unsigned long nr_shown;
484 static unsigned long nr_unshown;
485
486
487
488
489
490 if (nr_shown == 60) {
491 if (time_before(jiffies, resume)) {
492 nr_unshown++;
493 return;
494 }
495 if (nr_unshown) {
496 printk(KERN_ALERT
497 "BUG: Bad page map: %lu messages suppressed\n",
498 nr_unshown);
499 nr_unshown = 0;
500 }
501 nr_shown = 0;
502 }
503 if (nr_shown++ == 0)
504 resume = jiffies + 60 * HZ;
505
506 mapping = vma->vm_file ? vma->vm_file->f_mapping : NULL;
507 index = linear_page_index(vma, addr);
508
509 printk(KERN_ALERT
510 "BUG: Bad page map in process %s pte:%08llx pmd:%08llx\n",
511 current->comm,
512 (long long)pte_val(pte), (long long)pmd_val(*pmd));
513 if (page)
514 dump_page(page);
515 printk(KERN_ALERT
516 "addr:%p vm_flags:%08lx anon_vma:%p mapping:%p index:%lx\n",
517 (void *)addr, vma->vm_flags, vma->anon_vma, mapping, index);
518
519
520
521 if (vma->vm_ops)
522 print_symbol(KERN_ALERT "vma->vm_ops->fault: %s\n",
523 (unsigned long)vma->vm_ops->fault);
524 if (vma->vm_file && vma->vm_file->f_op)
525 print_symbol(KERN_ALERT "vma->vm_file->f_op->mmap: %s\n",
526 (unsigned long)vma->vm_file->f_op->mmap);
527 dump_stack();
528 add_taint(TAINT_BAD_PAGE);
529}
530
531static inline int is_cow_mapping(unsigned int flags)
532{
533 return (flags & (VM_SHARED | VM_MAYWRITE)) == VM_MAYWRITE;
534}
535
536#ifndef is_zero_pfn
537static inline int is_zero_pfn(unsigned long pfn)
538{
539 return pfn == zero_pfn;
540}
541#endif
542
543#ifndef my_zero_pfn
544static inline unsigned long my_zero_pfn(unsigned long addr)
545{
546 return zero_pfn;
547}
548#endif
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592#ifdef __HAVE_ARCH_PTE_SPECIAL
593# define HAVE_PTE_SPECIAL 1
594#else
595# define HAVE_PTE_SPECIAL 0
596#endif
597struct page *vm_normal_page(struct vm_area_struct *vma, unsigned long addr,
598 pte_t pte)
599{
600 unsigned long pfn = pte_pfn(pte);
601
602 if (HAVE_PTE_SPECIAL) {
603 if (likely(!pte_special(pte)))
604 goto check_pfn;
605 if (vma->vm_flags & (VM_PFNMAP | VM_MIXEDMAP))
606 return NULL;
607 if (!is_zero_pfn(pfn))
608 print_bad_pte(vma, addr, pte, NULL);
609 return NULL;
610 }
611
612
613
614 if (unlikely(vma->vm_flags & (VM_PFNMAP|VM_MIXEDMAP))) {
615 if (vma->vm_flags & VM_MIXEDMAP) {
616 if (!pfn_valid(pfn))
617 return NULL;
618 goto out;
619 } else {
620 unsigned long off;
621 off = (addr - vma->vm_start) >> PAGE_SHIFT;
622 if (pfn == vma->vm_pgoff + off)
623 return NULL;
624 if (!is_cow_mapping(vma->vm_flags))
625 return NULL;
626 }
627 }
628
629 if (is_zero_pfn(pfn))
630 return NULL;
631check_pfn:
632 if (unlikely(pfn > highest_memmap_pfn)) {
633 print_bad_pte(vma, addr, pte, NULL);
634 return NULL;
635 }
636
637
638
639
640
641out:
642 return pfn_to_page(pfn);
643}
644
645
646
647
648
649
650
651static inline unsigned long
652copy_one_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
653 pte_t *dst_pte, pte_t *src_pte, struct vm_area_struct *vma,
654 unsigned long addr, int *rss)
655{
656 unsigned long vm_flags = vma->vm_flags;
657 pte_t pte = *src_pte;
658 struct page *page;
659
660
661 if (unlikely(!pte_present(pte))) {
662 if (!pte_file(pte)) {
663 swp_entry_t entry = pte_to_swp_entry(pte);
664
665 if (swap_duplicate(entry) < 0)
666 return entry.val;
667
668
669 if (unlikely(list_empty(&dst_mm->mmlist))) {
670 spin_lock(&mmlist_lock);
671 if (list_empty(&dst_mm->mmlist))
672 list_add(&dst_mm->mmlist,
673 &src_mm->mmlist);
674 spin_unlock(&mmlist_lock);
675 }
676 if (likely(!non_swap_entry(entry)))
677 rss[MM_SWAPENTS]++;
678 else if (is_write_migration_entry(entry) &&
679 is_cow_mapping(vm_flags)) {
680
681
682
683
684 make_migration_entry_read(&entry);
685 pte = swp_entry_to_pte(entry);
686 set_pte_at(src_mm, addr, src_pte, pte);
687 }
688 }
689 goto out_set_pte;
690 }
691
692
693
694
695
696 if (is_cow_mapping(vm_flags)) {
697 ptep_set_wrprotect(src_mm, addr, src_pte);
698 pte = pte_wrprotect(pte);
699 }
700
701
702
703
704
705 if (vm_flags & VM_SHARED)
706 pte = pte_mkclean(pte);
707 pte = pte_mkold(pte);
708
709 page = vm_normal_page(vma, addr, pte);
710 if (page) {
711 get_page(page);
712 page_dup_rmap(page);
713 if (PageAnon(page))
714 rss[MM_ANONPAGES]++;
715 else
716 rss[MM_FILEPAGES]++;
717 }
718
719out_set_pte:
720 set_pte_at(dst_mm, addr, dst_pte, pte);
721 return 0;
722}
723
724static int copy_pte_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
725 pmd_t *dst_pmd, pmd_t *src_pmd, struct vm_area_struct *vma,
726 unsigned long addr, unsigned long end)
727{
728 pte_t *orig_src_pte, *orig_dst_pte;
729 pte_t *src_pte, *dst_pte;
730 spinlock_t *src_ptl, *dst_ptl;
731 int progress = 0;
732 int rss[NR_MM_COUNTERS];
733 swp_entry_t entry = (swp_entry_t){0};
734
735again:
736 init_rss_vec(rss);
737
738 dst_pte = pte_alloc_map_lock(dst_mm, dst_pmd, addr, &dst_ptl);
739 if (!dst_pte)
740 return -ENOMEM;
741 src_pte = pte_offset_map_nested(src_pmd, addr);
742 src_ptl = pte_lockptr(src_mm, src_pmd);
743 spin_lock_nested(src_ptl, SINGLE_DEPTH_NESTING);
744 orig_src_pte = src_pte;
745 orig_dst_pte = dst_pte;
746 arch_enter_lazy_mmu_mode();
747
748 do {
749
750
751
752
753 if (progress >= 32) {
754 progress = 0;
755 if (need_resched() ||
756 spin_needbreak(src_ptl) || spin_needbreak(dst_ptl))
757 break;
758 }
759 if (pte_none(*src_pte)) {
760 progress++;
761 continue;
762 }
763 entry.val = copy_one_pte(dst_mm, src_mm, dst_pte, src_pte,
764 vma, addr, rss);
765 if (entry.val)
766 break;
767 progress += 8;
768 } while (dst_pte++, src_pte++, addr += PAGE_SIZE, addr != end);
769
770 arch_leave_lazy_mmu_mode();
771 spin_unlock(src_ptl);
772 pte_unmap_nested(orig_src_pte);
773 add_mm_rss_vec(dst_mm, rss);
774 pte_unmap_unlock(orig_dst_pte, dst_ptl);
775 cond_resched();
776
777 if (entry.val) {
778 if (add_swap_count_continuation(entry, GFP_KERNEL) < 0)
779 return -ENOMEM;
780 progress = 0;
781 }
782 if (addr != end)
783 goto again;
784 return 0;
785}
786
787static inline int copy_pmd_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
788 pud_t *dst_pud, pud_t *src_pud, struct vm_area_struct *vma,
789 unsigned long addr, unsigned long end)
790{
791 pmd_t *src_pmd, *dst_pmd;
792 unsigned long next;
793
794 dst_pmd = pmd_alloc(dst_mm, dst_pud, addr);
795 if (!dst_pmd)
796 return -ENOMEM;
797 src_pmd = pmd_offset(src_pud, addr);
798 do {
799 next = pmd_addr_end(addr, end);
800 if (pmd_none_or_clear_bad(src_pmd))
801 continue;
802 if (copy_pte_range(dst_mm, src_mm, dst_pmd, src_pmd,
803 vma, addr, next))
804 return -ENOMEM;
805 } while (dst_pmd++, src_pmd++, addr = next, addr != end);
806 return 0;
807}
808
809static inline int copy_pud_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
810 pgd_t *dst_pgd, pgd_t *src_pgd, struct vm_area_struct *vma,
811 unsigned long addr, unsigned long end)
812{
813 pud_t *src_pud, *dst_pud;
814 unsigned long next;
815
816 dst_pud = pud_alloc(dst_mm, dst_pgd, addr);
817 if (!dst_pud)
818 return -ENOMEM;
819 src_pud = pud_offset(src_pgd, addr);
820 do {
821 next = pud_addr_end(addr, end);
822 if (pud_none_or_clear_bad(src_pud))
823 continue;
824 if (copy_pmd_range(dst_mm, src_mm, dst_pud, src_pud,
825 vma, addr, next))
826 return -ENOMEM;
827 } while (dst_pud++, src_pud++, addr = next, addr != end);
828 return 0;
829}
830
831int copy_page_range(struct mm_struct *dst_mm, struct mm_struct *src_mm,
832 struct vm_area_struct *vma)
833{
834 pgd_t *src_pgd, *dst_pgd;
835 unsigned long next;
836 unsigned long addr = vma->vm_start;
837 unsigned long end = vma->vm_end;
838 int ret;
839
840
841
842
843
844
845
846 if (!(vma->vm_flags & (VM_HUGETLB|VM_NONLINEAR|VM_PFNMAP|VM_INSERTPAGE))) {
847 if (!vma->anon_vma)
848 return 0;
849 }
850
851 if (is_vm_hugetlb_page(vma))
852 return copy_hugetlb_page_range(dst_mm, src_mm, vma);
853
854 if (unlikely(is_pfn_mapping(vma))) {
855
856
857
858
859 ret = track_pfn_vma_copy(vma);
860 if (ret)
861 return ret;
862 }
863
864
865
866
867
868
869
870 if (is_cow_mapping(vma->vm_flags))
871 mmu_notifier_invalidate_range_start(src_mm, addr, end);
872
873 ret = 0;
874 dst_pgd = pgd_offset(dst_mm, addr);
875 src_pgd = pgd_offset(src_mm, addr);
876 do {
877 next = pgd_addr_end(addr, end);
878 if (pgd_none_or_clear_bad(src_pgd))
879 continue;
880 if (unlikely(copy_pud_range(dst_mm, src_mm, dst_pgd, src_pgd,
881 vma, addr, next))) {
882 ret = -ENOMEM;
883 break;
884 }
885 } while (dst_pgd++, src_pgd++, addr = next, addr != end);
886
887 if (is_cow_mapping(vma->vm_flags))
888 mmu_notifier_invalidate_range_end(src_mm,
889 vma->vm_start, end);
890 return ret;
891}
892
893static unsigned long zap_pte_range(struct mmu_gather *tlb,
894 struct vm_area_struct *vma, pmd_t *pmd,
895 unsigned long addr, unsigned long end,
896 long *zap_work, struct zap_details *details)
897{
898 struct mm_struct *mm = tlb->mm;
899 pte_t *pte;
900 spinlock_t *ptl;
901 int rss[NR_MM_COUNTERS];
902
903 init_rss_vec(rss);
904
905 pte = pte_offset_map_lock(mm, pmd, addr, &ptl);
906 arch_enter_lazy_mmu_mode();
907 do {
908 pte_t ptent = *pte;
909 if (pte_none(ptent)) {
910 (*zap_work)--;
911 continue;
912 }
913
914 (*zap_work) -= PAGE_SIZE;
915
916 if (pte_present(ptent)) {
917 struct page *page;
918
919 page = vm_normal_page(vma, addr, ptent);
920 if (unlikely(details) && page) {
921
922
923
924
925
926 if (details->check_mapping &&
927 details->check_mapping != page->mapping)
928 continue;
929
930
931
932
933 if (details->nonlinear_vma &&
934 (page->index < details->first_index ||
935 page->index > details->last_index))
936 continue;
937 }
938 ptent = ptep_get_and_clear_full(mm, addr, pte,
939 tlb->fullmm);
940 tlb_remove_tlb_entry(tlb, pte, addr);
941 if (unlikely(!page))
942 continue;
943 if (unlikely(details) && details->nonlinear_vma
944 && linear_page_index(details->nonlinear_vma,
945 addr) != page->index)
946 set_pte_at(mm, addr, pte,
947 pgoff_to_pte(page->index));
948 if (PageAnon(page))
949 rss[MM_ANONPAGES]--;
950 else {
951 if (pte_dirty(ptent))
952 set_page_dirty(page);
953 if (pte_young(ptent) &&
954 likely(!VM_SequentialReadHint(vma)))
955 mark_page_accessed(page);
956 rss[MM_FILEPAGES]--;
957 }
958 page_remove_rmap(page);
959 if (unlikely(page_mapcount(page) < 0))
960 print_bad_pte(vma, addr, ptent, page);
961 tlb_remove_page(tlb, page);
962 continue;
963 }
964
965
966
967
968 if (unlikely(details))
969 continue;
970 if (pte_file(ptent)) {
971 if (unlikely(!(vma->vm_flags & VM_NONLINEAR)))
972 print_bad_pte(vma, addr, ptent, NULL);
973 } else {
974 swp_entry_t entry = pte_to_swp_entry(ptent);
975
976 if (!non_swap_entry(entry))
977 rss[MM_SWAPENTS]--;
978 if (unlikely(!free_swap_and_cache(entry)))
979 print_bad_pte(vma, addr, ptent, NULL);
980 }
981 pte_clear_not_present_full(mm, addr, pte, tlb->fullmm);
982 } while (pte++, addr += PAGE_SIZE, (addr != end && *zap_work > 0));
983
984 add_mm_rss_vec(mm, rss);
985 arch_leave_lazy_mmu_mode();
986 pte_unmap_unlock(pte - 1, ptl);
987
988 return addr;
989}
990
991static inline unsigned long zap_pmd_range(struct mmu_gather *tlb,
992 struct vm_area_struct *vma, pud_t *pud,
993 unsigned long addr, unsigned long end,
994 long *zap_work, struct zap_details *details)
995{
996 pmd_t *pmd;
997 unsigned long next;
998
999 pmd = pmd_offset(pud, addr);
1000 do {
1001 next = pmd_addr_end(addr, end);
1002 if (pmd_none_or_clear_bad(pmd)) {
1003 (*zap_work)--;
1004 continue;
1005 }
1006 next = zap_pte_range(tlb, vma, pmd, addr, next,
1007 zap_work, details);
1008 } while (pmd++, addr = next, (addr != end && *zap_work > 0));
1009
1010 return addr;
1011}
1012
1013static inline unsigned long zap_pud_range(struct mmu_gather *tlb,
1014 struct vm_area_struct *vma, pgd_t *pgd,
1015 unsigned long addr, unsigned long end,
1016 long *zap_work, struct zap_details *details)
1017{
1018 pud_t *pud;
1019 unsigned long next;
1020
1021 pud = pud_offset(pgd, addr);
1022 do {
1023 next = pud_addr_end(addr, end);
1024 if (pud_none_or_clear_bad(pud)) {
1025 (*zap_work)--;
1026 continue;
1027 }
1028 next = zap_pmd_range(tlb, vma, pud, addr, next,
1029 zap_work, details);
1030 } while (pud++, addr = next, (addr != end && *zap_work > 0));
1031
1032 return addr;
1033}
1034
1035static unsigned long unmap_page_range(struct mmu_gather *tlb,
1036 struct vm_area_struct *vma,
1037 unsigned long addr, unsigned long end,
1038 long *zap_work, struct zap_details *details)
1039{
1040 pgd_t *pgd;
1041 unsigned long next;
1042
1043 if (details && !details->check_mapping && !details->nonlinear_vma)
1044 details = NULL;
1045
1046 BUG_ON(addr >= end);
1047 mem_cgroup_uncharge_start();
1048 tlb_start_vma(tlb, vma);
1049 pgd = pgd_offset(vma->vm_mm, addr);
1050 do {
1051 next = pgd_addr_end(addr, end);
1052 if (pgd_none_or_clear_bad(pgd)) {
1053 (*zap_work)--;
1054 continue;
1055 }
1056 next = zap_pud_range(tlb, vma, pgd, addr, next,
1057 zap_work, details);
1058 } while (pgd++, addr = next, (addr != end && *zap_work > 0));
1059 tlb_end_vma(tlb, vma);
1060 mem_cgroup_uncharge_end();
1061
1062 return addr;
1063}
1064
1065#ifdef CONFIG_PREEMPT
1066# define ZAP_BLOCK_SIZE (8 * PAGE_SIZE)
1067#else
1068
1069# define ZAP_BLOCK_SIZE (1024 * PAGE_SIZE)
1070#endif
1071
1072
1073
1074
1075
1076
1077
1078
1079
1080
1081
1082
1083
1084
1085
1086
1087
1088
1089
1090
1091
1092
1093
1094
1095
1096
1097
1098unsigned long unmap_vmas(struct mmu_gather **tlbp,
1099 struct vm_area_struct *vma, unsigned long start_addr,
1100 unsigned long end_addr, unsigned long *nr_accounted,
1101 struct zap_details *details)
1102{
1103 long zap_work = ZAP_BLOCK_SIZE;
1104 unsigned long tlb_start = 0;
1105 int tlb_start_valid = 0;
1106 unsigned long start = start_addr;
1107 spinlock_t *i_mmap_lock = details? details->i_mmap_lock: NULL;
1108 int fullmm = (*tlbp)->fullmm;
1109 struct mm_struct *mm = vma->vm_mm;
1110
1111 mmu_notifier_invalidate_range_start(mm, start_addr, end_addr);
1112 for ( ; vma && vma->vm_start < end_addr; vma = vma->vm_next) {
1113 unsigned long end;
1114
1115 start = max(vma->vm_start, start_addr);
1116 if (start >= vma->vm_end)
1117 continue;
1118 end = min(vma->vm_end, end_addr);
1119 if (end <= vma->vm_start)
1120 continue;
1121
1122 if (vma->vm_flags & VM_ACCOUNT)
1123 *nr_accounted += (end - start) >> PAGE_SHIFT;
1124
1125 if (unlikely(is_pfn_mapping(vma)))
1126 untrack_pfn_vma(vma, 0, 0);
1127
1128 while (start != end) {
1129 if (!tlb_start_valid) {
1130 tlb_start = start;
1131 tlb_start_valid = 1;
1132 }
1133
1134 if (unlikely(is_vm_hugetlb_page(vma))) {
1135
1136
1137
1138
1139
1140
1141
1142
1143
1144
1145
1146 if (vma->vm_file) {
1147 unmap_hugepage_range(vma, start, end, NULL);
1148 zap_work -= (end - start) /
1149 pages_per_huge_page(hstate_vma(vma));
1150 }
1151
1152 start = end;
1153 } else
1154 start = unmap_page_range(*tlbp, vma,
1155 start, end, &zap_work, details);
1156
1157 if (zap_work > 0) {
1158 BUG_ON(start != end);
1159 break;
1160 }
1161
1162 tlb_finish_mmu(*tlbp, tlb_start, start);
1163
1164 if (need_resched() ||
1165 (i_mmap_lock && spin_needbreak(i_mmap_lock))) {
1166 if (i_mmap_lock) {
1167 *tlbp = NULL;
1168 goto out;
1169 }
1170 cond_resched();
1171 }
1172
1173 *tlbp = tlb_gather_mmu(vma->vm_mm, fullmm);
1174 tlb_start_valid = 0;
1175 zap_work = ZAP_BLOCK_SIZE;
1176 }
1177 }
1178out:
1179 mmu_notifier_invalidate_range_end(mm, start_addr, end_addr);
1180 return start;
1181}
1182
1183
1184
1185
1186
1187
1188
1189
1190unsigned long zap_page_range(struct vm_area_struct *vma, unsigned long address,
1191 unsigned long size, struct zap_details *details)
1192{
1193 struct mm_struct *mm = vma->vm_mm;
1194 struct mmu_gather *tlb;
1195 unsigned long end = address + size;
1196 unsigned long nr_accounted = 0;
1197
1198 lru_add_drain();
1199 tlb = tlb_gather_mmu(mm, 0);
1200 update_hiwater_rss(mm);
1201 end = unmap_vmas(&tlb, vma, address, end, &nr_accounted, details);
1202 if (tlb)
1203 tlb_finish_mmu(tlb, address, end);
1204 return end;
1205}
1206
1207
1208
1209
1210
1211
1212
1213
1214
1215
1216
1217
1218
1219int zap_vma_ptes(struct vm_area_struct *vma, unsigned long address,
1220 unsigned long size)
1221{
1222 if (address < vma->vm_start || address + size > vma->vm_end ||
1223 !(vma->vm_flags & VM_PFNMAP))
1224 return -1;
1225 zap_page_range(vma, address, size, NULL);
1226 return 0;
1227}
1228EXPORT_SYMBOL_GPL(zap_vma_ptes);
1229
1230
1231
1232
1233
1234
1235
1236
1237
1238
1239
1240
1241
1242struct page *follow_page(struct vm_area_struct *vma, unsigned long address,
1243 unsigned int flags)
1244{
1245 pgd_t *pgd;
1246 pud_t *pud;
1247 pmd_t *pmd;
1248 pte_t *ptep, pte;
1249 spinlock_t *ptl;
1250 struct page *page;
1251 struct mm_struct *mm = vma->vm_mm;
1252
1253 page = follow_huge_addr(mm, address, flags & FOLL_WRITE);
1254 if (!IS_ERR(page)) {
1255 BUG_ON(flags & FOLL_GET);
1256 goto out;
1257 }
1258
1259 page = NULL;
1260 pgd = pgd_offset(mm, address);
1261 if (pgd_none(*pgd) || unlikely(pgd_bad(*pgd)))
1262 goto no_page_table;
1263
1264 pud = pud_offset(pgd, address);
1265 if (pud_none(*pud))
1266 goto no_page_table;
1267 if (pud_huge(*pud)) {
1268 BUG_ON(flags & FOLL_GET);
1269 page = follow_huge_pud(mm, address, pud, flags & FOLL_WRITE);
1270 goto out;
1271 }
1272 if (unlikely(pud_bad(*pud)))
1273 goto no_page_table;
1274
1275 pmd = pmd_offset(pud, address);
1276 if (pmd_none(*pmd))
1277 goto no_page_table;
1278 if (pmd_huge(*pmd)) {
1279 BUG_ON(flags & FOLL_GET);
1280 page = follow_huge_pmd(mm, address, pmd, flags & FOLL_WRITE);
1281 goto out;
1282 }
1283 if (unlikely(pmd_bad(*pmd)))
1284 goto no_page_table;
1285
1286 ptep = pte_offset_map_lock(mm, pmd, address, &ptl);
1287
1288 pte = *ptep;
1289 if (!pte_present(pte))
1290 goto no_page;
1291 if ((flags & FOLL_WRITE) && !pte_write(pte))
1292 goto unlock;
1293
1294 page = vm_normal_page(vma, address, pte);
1295 if (unlikely(!page)) {
1296 if ((flags & FOLL_DUMP) ||
1297 !is_zero_pfn(pte_pfn(pte)))
1298 goto bad_page;
1299 page = pte_page(pte);
1300 }
1301
1302 if (flags & FOLL_GET)
1303 get_page(page);
1304 if (flags & FOLL_TOUCH) {
1305 if ((flags & FOLL_WRITE) &&
1306 !pte_dirty(pte) && !PageDirty(page))
1307 set_page_dirty(page);
1308
1309
1310
1311
1312
1313 mark_page_accessed(page);
1314 }
1315unlock:
1316 pte_unmap_unlock(ptep, ptl);
1317out:
1318 return page;
1319
1320bad_page:
1321 pte_unmap_unlock(ptep, ptl);
1322 return ERR_PTR(-EFAULT);
1323
1324no_page:
1325 pte_unmap_unlock(ptep, ptl);
1326 if (!pte_none(pte))
1327 return page;
1328
1329no_page_table:
1330
1331
1332
1333
1334
1335
1336
1337
1338 if ((flags & FOLL_DUMP) &&
1339 (!vma->vm_ops || !vma->vm_ops->fault))
1340 return ERR_PTR(-EFAULT);
1341 return page;
1342}
1343
1344int __get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
1345 unsigned long start, int nr_pages, unsigned int gup_flags,
1346 struct page **pages, struct vm_area_struct **vmas)
1347{
1348 int i;
1349 unsigned long vm_flags;
1350
1351 if (nr_pages <= 0)
1352 return 0;
1353
1354 VM_BUG_ON(!!pages != !!(gup_flags & FOLL_GET));
1355
1356
1357
1358
1359
1360 vm_flags = (gup_flags & FOLL_WRITE) ?
1361 (VM_WRITE | VM_MAYWRITE) : (VM_READ | VM_MAYREAD);
1362 vm_flags &= (gup_flags & FOLL_FORCE) ?
1363 (VM_MAYREAD | VM_MAYWRITE) : (VM_READ | VM_WRITE);
1364 i = 0;
1365
1366 do {
1367 struct vm_area_struct *vma;
1368
1369 vma = find_extend_vma(mm, start);
1370 if (!vma && in_gate_area(tsk, start)) {
1371 unsigned long pg = start & PAGE_MASK;
1372 struct vm_area_struct *gate_vma = get_gate_vma(tsk);
1373 pgd_t *pgd;
1374 pud_t *pud;
1375 pmd_t *pmd;
1376 pte_t *pte;
1377
1378
1379 if (gup_flags & FOLL_WRITE)
1380 return i ? : -EFAULT;
1381 if (pg > TASK_SIZE)
1382 pgd = pgd_offset_k(pg);
1383 else
1384 pgd = pgd_offset_gate(mm, pg);
1385 BUG_ON(pgd_none(*pgd));
1386 pud = pud_offset(pgd, pg);
1387 BUG_ON(pud_none(*pud));
1388 pmd = pmd_offset(pud, pg);
1389 if (pmd_none(*pmd))
1390 return i ? : -EFAULT;
1391 pte = pte_offset_map(pmd, pg);
1392 if (pte_none(*pte)) {
1393 pte_unmap(pte);
1394 return i ? : -EFAULT;
1395 }
1396 if (pages) {
1397 struct page *page;
1398
1399 page = vm_normal_page(gate_vma, start, *pte);
1400 if (!page) {
1401 if (!(gup_flags & FOLL_DUMP) &&
1402 is_zero_pfn(pte_pfn(*pte)))
1403 page = pte_page(*pte);
1404 else {
1405 pte_unmap(pte);
1406 return i ? : -EFAULT;
1407 }
1408 }
1409 pages[i] = page;
1410 get_page(page);
1411 }
1412 pte_unmap(pte);
1413 if (vmas)
1414 vmas[i] = gate_vma;
1415 i++;
1416 start += PAGE_SIZE;
1417 nr_pages--;
1418 continue;
1419 }
1420
1421 if (!vma ||
1422 (vma->vm_flags & (VM_IO | VM_PFNMAP)) ||
1423 !(vm_flags & vma->vm_flags))
1424 return i ? : -EFAULT;
1425
1426 if (is_vm_hugetlb_page(vma)) {
1427 i = follow_hugetlb_page(mm, vma, pages, vmas,
1428 &start, &nr_pages, i, gup_flags);
1429 continue;
1430 }
1431
1432 do {
1433 struct page *page;
1434 unsigned int foll_flags = gup_flags;
1435
1436
1437
1438
1439
1440 if (unlikely(fatal_signal_pending(current)))
1441 return i ? i : -ERESTARTSYS;
1442
1443 cond_resched();
1444 while (!(page = follow_page(vma, start, foll_flags))) {
1445 int ret;
1446
1447 ret = handle_mm_fault(mm, vma, start,
1448 (foll_flags & FOLL_WRITE) ?
1449 FAULT_FLAG_WRITE : 0);
1450
1451 if (ret & VM_FAULT_ERROR) {
1452 if (ret & VM_FAULT_OOM)
1453 return i ? i : -ENOMEM;
1454 if (ret &
1455 (VM_FAULT_HWPOISON|VM_FAULT_SIGBUS))
1456 return i ? i : -EFAULT;
1457 BUG();
1458 }
1459 if (ret & VM_FAULT_MAJOR)
1460 tsk->maj_flt++;
1461 else
1462 tsk->min_flt++;
1463
1464
1465
1466
1467
1468
1469
1470
1471
1472
1473
1474
1475
1476 if ((ret & VM_FAULT_WRITE) &&
1477 !(vma->vm_flags & VM_WRITE))
1478 foll_flags &= ~FOLL_WRITE;
1479
1480 cond_resched();
1481 }
1482 if (IS_ERR(page))
1483 return i ? i : PTR_ERR(page);
1484 if (pages) {
1485 pages[i] = page;
1486
1487 flush_anon_page(vma, page, start);
1488 flush_dcache_page(page);
1489 }
1490 if (vmas)
1491 vmas[i] = vma;
1492 i++;
1493 start += PAGE_SIZE;
1494 nr_pages--;
1495 } while (nr_pages && start < vma->vm_end);
1496 } while (nr_pages);
1497 return i;
1498}
1499
1500
1501
1502
1503
1504
1505
1506
1507
1508
1509
1510
1511
1512
1513
1514
1515
1516
1517
1518
1519
1520
1521
1522
1523
1524
1525
1526
1527
1528
1529
1530
1531
1532
1533
1534
1535
1536
1537
1538
1539
1540
1541
1542
1543
1544
1545
1546
1547
1548
1549
1550int get_user_pages(struct task_struct *tsk, struct mm_struct *mm,
1551 unsigned long start, int nr_pages, int write, int force,
1552 struct page **pages, struct vm_area_struct **vmas)
1553{
1554 int flags = FOLL_TOUCH;
1555
1556 if (pages)
1557 flags |= FOLL_GET;
1558 if (write)
1559 flags |= FOLL_WRITE;
1560 if (force)
1561 flags |= FOLL_FORCE;
1562
1563 return __get_user_pages(tsk, mm, start, nr_pages, flags, pages, vmas);
1564}
1565EXPORT_SYMBOL(get_user_pages);
1566
1567
1568
1569
1570
1571
1572
1573
1574
1575
1576
1577
1578
1579
1580
1581#ifdef CONFIG_ELF_CORE
1582struct page *get_dump_page(unsigned long addr)
1583{
1584 struct vm_area_struct *vma;
1585 struct page *page;
1586
1587 if (__get_user_pages(current, current->mm, addr, 1,
1588 FOLL_FORCE | FOLL_DUMP | FOLL_GET, &page, &vma) < 1)
1589 return NULL;
1590 flush_cache_page(vma, addr, page_to_pfn(page));
1591 return page;
1592}
1593#endif
1594
1595pte_t *get_locked_pte(struct mm_struct *mm, unsigned long addr,
1596 spinlock_t **ptl)
1597{
1598 pgd_t * pgd = pgd_offset(mm, addr);
1599 pud_t * pud = pud_alloc(mm, pgd, addr);
1600 if (pud) {
1601 pmd_t * pmd = pmd_alloc(mm, pud, addr);
1602 if (pmd)
1603 return pte_alloc_map_lock(mm, pmd, addr, ptl);
1604 }
1605 return NULL;
1606}
1607
1608
1609
1610
1611
1612
1613
1614
1615static int insert_page(struct vm_area_struct *vma, unsigned long addr,
1616 struct page *page, pgprot_t prot)
1617{
1618 struct mm_struct *mm = vma->vm_mm;
1619 int retval;
1620 pte_t *pte;
1621 spinlock_t *ptl;
1622
1623 retval = -EINVAL;
1624 if (PageAnon(page))
1625 goto out;
1626 retval = -ENOMEM;
1627 flush_dcache_page(page);
1628 pte = get_locked_pte(mm, addr, &ptl);
1629 if (!pte)
1630 goto out;
1631 retval = -EBUSY;
1632 if (!pte_none(*pte))
1633 goto out_unlock;
1634
1635
1636 get_page(page);
1637 inc_mm_counter_fast(mm, MM_FILEPAGES);
1638 page_add_file_rmap(page);
1639 set_pte_at(mm, addr, pte, mk_pte(page, prot));
1640
1641 retval = 0;
1642 pte_unmap_unlock(pte, ptl);
1643 return retval;
1644out_unlock:
1645 pte_unmap_unlock(pte, ptl);
1646out:
1647 return retval;
1648}
1649
1650
1651
1652
1653
1654
1655
1656
1657
1658
1659
1660
1661
1662
1663
1664
1665
1666
1667
1668
1669
1670
1671
1672int vm_insert_page(struct vm_area_struct *vma, unsigned long addr,
1673 struct page *page)
1674{
1675 if (addr < vma->vm_start || addr >= vma->vm_end)
1676 return -EFAULT;
1677 if (!page_count(page))
1678 return -EINVAL;
1679 vma->vm_flags |= VM_INSERTPAGE;
1680 return insert_page(vma, addr, page, vma->vm_page_prot);
1681}
1682EXPORT_SYMBOL(vm_insert_page);
1683
1684static int insert_pfn(struct vm_area_struct *vma, unsigned long addr,
1685 unsigned long pfn, pgprot_t prot)
1686{
1687 struct mm_struct *mm = vma->vm_mm;
1688 int retval;
1689 pte_t *pte, entry;
1690 spinlock_t *ptl;
1691
1692 retval = -ENOMEM;
1693 pte = get_locked_pte(mm, addr, &ptl);
1694 if (!pte)
1695 goto out;
1696 retval = -EBUSY;
1697 if (!pte_none(*pte))
1698 goto out_unlock;
1699
1700
1701 entry = pte_mkspecial(pfn_pte(pfn, prot));
1702 set_pte_at(mm, addr, pte, entry);
1703 update_mmu_cache(vma, addr, pte);
1704
1705 retval = 0;
1706out_unlock:
1707 pte_unmap_unlock(pte, ptl);
1708out:
1709 return retval;
1710}
1711
1712
1713
1714
1715
1716
1717
1718
1719
1720
1721
1722
1723
1724
1725
1726
1727
1728
1729int vm_insert_pfn(struct vm_area_struct *vma, unsigned long addr,
1730 unsigned long pfn)
1731{
1732 int ret;
1733 pgprot_t pgprot = vma->vm_page_prot;
1734
1735
1736
1737
1738
1739
1740 BUG_ON(!(vma->vm_flags & (VM_PFNMAP|VM_MIXEDMAP)));
1741 BUG_ON((vma->vm_flags & (VM_PFNMAP|VM_MIXEDMAP)) ==
1742 (VM_PFNMAP|VM_MIXEDMAP));
1743 BUG_ON((vma->vm_flags & VM_PFNMAP) && is_cow_mapping(vma->vm_flags));
1744 BUG_ON((vma->vm_flags & VM_MIXEDMAP) && pfn_valid(pfn));
1745
1746 if (addr < vma->vm_start || addr >= vma->vm_end)
1747 return -EFAULT;
1748 if (track_pfn_vma_new(vma, &pgprot, pfn, PAGE_SIZE))
1749 return -EINVAL;
1750
1751 ret = insert_pfn(vma, addr, pfn, pgprot);
1752
1753 if (ret)
1754 untrack_pfn_vma(vma, pfn, PAGE_SIZE);
1755
1756 return ret;
1757}
1758EXPORT_SYMBOL(vm_insert_pfn);
1759
1760int vm_insert_mixed(struct vm_area_struct *vma, unsigned long addr,
1761 unsigned long pfn)
1762{
1763 BUG_ON(!(vma->vm_flags & VM_MIXEDMAP));
1764
1765 if (addr < vma->vm_start || addr >= vma->vm_end)
1766 return -EFAULT;
1767
1768
1769
1770
1771
1772
1773
1774
1775 if (!HAVE_PTE_SPECIAL && pfn_valid(pfn)) {
1776 struct page *page;
1777
1778 page = pfn_to_page(pfn);
1779 return insert_page(vma, addr, page, vma->vm_page_prot);
1780 }
1781 return insert_pfn(vma, addr, pfn, vma->vm_page_prot);
1782}
1783EXPORT_SYMBOL(vm_insert_mixed);
1784
1785
1786
1787
1788
1789
1790static int remap_pte_range(struct mm_struct *mm, pmd_t *pmd,
1791 unsigned long addr, unsigned long end,
1792 unsigned long pfn, pgprot_t prot)
1793{
1794 pte_t *pte;
1795 spinlock_t *ptl;
1796
1797 pte = pte_alloc_map_lock(mm, pmd, addr, &ptl);
1798 if (!pte)
1799 return -ENOMEM;
1800 arch_enter_lazy_mmu_mode();
1801 do {
1802 BUG_ON(!pte_none(*pte));
1803 set_pte_at(mm, addr, pte, pte_mkspecial(pfn_pte(pfn, prot)));
1804 pfn++;
1805 } while (pte++, addr += PAGE_SIZE, addr != end);
1806 arch_leave_lazy_mmu_mode();
1807 pte_unmap_unlock(pte - 1, ptl);
1808 return 0;
1809}
1810
1811static inline int remap_pmd_range(struct mm_struct *mm, pud_t *pud,
1812 unsigned long addr, unsigned long end,
1813 unsigned long pfn, pgprot_t prot)
1814{
1815 pmd_t *pmd;
1816 unsigned long next;
1817
1818 pfn -= addr >> PAGE_SHIFT;
1819 pmd = pmd_alloc(mm, pud, addr);
1820 if (!pmd)
1821 return -ENOMEM;
1822 do {
1823 next = pmd_addr_end(addr, end);
1824 if (remap_pte_range(mm, pmd, addr, next,
1825 pfn + (addr >> PAGE_SHIFT), prot))
1826 return -ENOMEM;
1827 } while (pmd++, addr = next, addr != end);
1828 return 0;
1829}
1830
1831static inline int remap_pud_range(struct mm_struct *mm, pgd_t *pgd,
1832 unsigned long addr, unsigned long end,
1833 unsigned long pfn, pgprot_t prot)
1834{
1835 pud_t *pud;
1836 unsigned long next;
1837
1838 pfn -= addr >> PAGE_SHIFT;
1839 pud = pud_alloc(mm, pgd, addr);
1840 if (!pud)
1841 return -ENOMEM;
1842 do {
1843 next = pud_addr_end(addr, end);
1844 if (remap_pmd_range(mm, pud, addr, next,
1845 pfn + (addr >> PAGE_SHIFT), prot))
1846 return -ENOMEM;
1847 } while (pud++, addr = next, addr != end);
1848 return 0;
1849}
1850
1851
1852
1853
1854
1855
1856
1857
1858
1859
1860
1861int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,
1862 unsigned long pfn, unsigned long size, pgprot_t prot)
1863{
1864 pgd_t *pgd;
1865 unsigned long next;
1866 unsigned long end = addr + PAGE_ALIGN(size);
1867 struct mm_struct *mm = vma->vm_mm;
1868 int err;
1869
1870
1871
1872
1873
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888 if (addr == vma->vm_start && end == vma->vm_end) {
1889 vma->vm_pgoff = pfn;
1890 vma->vm_flags |= VM_PFN_AT_MMAP;
1891 } else if (is_cow_mapping(vma->vm_flags))
1892 return -EINVAL;
1893
1894 vma->vm_flags |= VM_IO | VM_RESERVED | VM_PFNMAP;
1895
1896 err = track_pfn_vma_new(vma, &prot, pfn, PAGE_ALIGN(size));
1897 if (err) {
1898
1899
1900
1901
1902 vma->vm_flags &= ~(VM_IO | VM_RESERVED | VM_PFNMAP);
1903 vma->vm_flags &= ~VM_PFN_AT_MMAP;
1904 return -EINVAL;
1905 }
1906
1907 BUG_ON(addr >= end);
1908 pfn -= addr >> PAGE_SHIFT;
1909 pgd = pgd_offset(mm, addr);
1910 flush_cache_range(vma, addr, end);
1911 do {
1912 next = pgd_addr_end(addr, end);
1913 err = remap_pud_range(mm, pgd, addr, next,
1914 pfn + (addr >> PAGE_SHIFT), prot);
1915 if (err)
1916 break;
1917 } while (pgd++, addr = next, addr != end);
1918
1919 if (err)
1920 untrack_pfn_vma(vma, pfn, PAGE_ALIGN(size));
1921
1922 return err;
1923}
1924EXPORT_SYMBOL(remap_pfn_range);
1925
1926static int apply_to_pte_range(struct mm_struct *mm, pmd_t *pmd,
1927 unsigned long addr, unsigned long end,
1928 pte_fn_t fn, void *data)
1929{
1930 pte_t *pte;
1931 int err;
1932 pgtable_t token;
1933 spinlock_t *uninitialized_var(ptl);
1934
1935 pte = (mm == &init_mm) ?
1936 pte_alloc_kernel(pmd, addr) :
1937 pte_alloc_map_lock(mm, pmd, addr, &ptl);
1938 if (!pte)
1939 return -ENOMEM;
1940
1941 BUG_ON(pmd_huge(*pmd));
1942
1943 arch_enter_lazy_mmu_mode();
1944
1945 token = pmd_pgtable(*pmd);
1946
1947 do {
1948 err = fn(pte++, token, addr, data);
1949 if (err)
1950 break;
1951 } while (addr += PAGE_SIZE, addr != end);
1952
1953 arch_leave_lazy_mmu_mode();
1954
1955 if (mm != &init_mm)
1956 pte_unmap_unlock(pte-1, ptl);
1957 return err;
1958}
1959
1960static int apply_to_pmd_range(struct mm_struct *mm, pud_t *pud,
1961 unsigned long addr, unsigned long end,
1962 pte_fn_t fn, void *data)
1963{
1964 pmd_t *pmd;
1965 unsigned long next;
1966 int err;
1967
1968 BUG_ON(pud_huge(*pud));
1969
1970 pmd = pmd_alloc(mm, pud, addr);
1971 if (!pmd)
1972 return -ENOMEM;
1973 do {
1974 next = pmd_addr_end(addr, end);
1975 err = apply_to_pte_range(mm, pmd, addr, next, fn, data);
1976 if (err)
1977 break;
1978 } while (pmd++, addr = next, addr != end);
1979 return err;
1980}
1981
1982static int apply_to_pud_range(struct mm_struct *mm, pgd_t *pgd,
1983 unsigned long addr, unsigned long end,
1984 pte_fn_t fn, void *data)
1985{
1986 pud_t *pud;
1987 unsigned long next;
1988 int err;
1989
1990 pud = pud_alloc(mm, pgd, addr);
1991 if (!pud)
1992 return -ENOMEM;
1993 do {
1994 next = pud_addr_end(addr, end);
1995 err = apply_to_pmd_range(mm, pud, addr, next, fn, data);
1996 if (err)
1997 break;
1998 } while (pud++, addr = next, addr != end);
1999 return err;
2000}
2001
2002
2003
2004
2005
2006int apply_to_page_range(struct mm_struct *mm, unsigned long addr,
2007 unsigned long size, pte_fn_t fn, void *data)
2008{
2009 pgd_t *pgd;
2010 unsigned long next;
2011 unsigned long start = addr, end = addr + size;
2012 int err;
2013
2014 BUG_ON(addr >= end);
2015 mmu_notifier_invalidate_range_start(mm, start, end);
2016 pgd = pgd_offset(mm, addr);
2017 do {
2018 next = pgd_addr_end(addr, end);
2019 err = apply_to_pud_range(mm, pgd, addr, next, fn, data);
2020 if (err)
2021 break;
2022 } while (pgd++, addr = next, addr != end);
2023 mmu_notifier_invalidate_range_end(mm, start, end);
2024 return err;
2025}
2026EXPORT_SYMBOL_GPL(apply_to_page_range);
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037static inline int pte_unmap_same(struct mm_struct *mm, pmd_t *pmd,
2038 pte_t *page_table, pte_t orig_pte)
2039{
2040 int same = 1;
2041#if defined(CONFIG_SMP) || defined(CONFIG_PREEMPT)
2042 if (sizeof(pte_t) > sizeof(unsigned long)) {
2043 spinlock_t *ptl = pte_lockptr(mm, pmd);
2044 spin_lock(ptl);
2045 same = pte_same(*page_table, orig_pte);
2046 spin_unlock(ptl);
2047 }
2048#endif
2049 pte_unmap(page_table);
2050 return same;
2051}
2052
2053
2054
2055
2056
2057
2058
2059static inline pte_t maybe_mkwrite(pte_t pte, struct vm_area_struct *vma)
2060{
2061 if (likely(vma->vm_flags & VM_WRITE))
2062 pte = pte_mkwrite(pte);
2063 return pte;
2064}
2065
2066static inline void cow_user_page(struct page *dst, struct page *src, unsigned long va, struct vm_area_struct *vma)
2067{
2068
2069
2070
2071
2072
2073
2074 if (unlikely(!src)) {
2075 void *kaddr = kmap_atomic(dst, KM_USER0);
2076 void __user *uaddr = (void __user *)(va & PAGE_MASK);
2077
2078
2079
2080
2081
2082
2083
2084 if (__copy_from_user_inatomic(kaddr, uaddr, PAGE_SIZE))
2085 memset(kaddr, 0, PAGE_SIZE);
2086 kunmap_atomic(kaddr, KM_USER0);
2087 flush_dcache_page(dst);
2088 } else
2089 copy_user_highpage(dst, src, va, vma);
2090}
2091
2092
2093
2094
2095
2096
2097
2098
2099
2100
2101
2102
2103
2104
2105
2106
2107
2108
2109
2110static int do_wp_page(struct mm_struct *mm, struct vm_area_struct *vma,
2111 unsigned long address, pte_t *page_table, pmd_t *pmd,
2112 spinlock_t *ptl, pte_t orig_pte)
2113{
2114 struct page *old_page, *new_page;
2115 pte_t entry;
2116 int reuse = 0, ret = 0;
2117 int page_mkwrite = 0;
2118 struct page *dirty_page = NULL;
2119
2120 old_page = vm_normal_page(vma, address, orig_pte);
2121 if (!old_page) {
2122
2123
2124
2125
2126
2127
2128
2129 if ((vma->vm_flags & (VM_WRITE|VM_SHARED)) ==
2130 (VM_WRITE|VM_SHARED))
2131 goto reuse;
2132 goto gotten;
2133 }
2134
2135
2136
2137
2138
2139 if (PageAnon(old_page) && !PageKsm(old_page)) {
2140 if (!trylock_page(old_page)) {
2141 page_cache_get(old_page);
2142 pte_unmap_unlock(page_table, ptl);
2143 lock_page(old_page);
2144 page_table = pte_offset_map_lock(mm, pmd, address,
2145 &ptl);
2146 if (!pte_same(*page_table, orig_pte)) {
2147 unlock_page(old_page);
2148 page_cache_release(old_page);
2149 goto unlock;
2150 }
2151 page_cache_release(old_page);
2152 }
2153 reuse = reuse_swap_page(old_page);
2154 if (reuse)
2155
2156
2157
2158
2159
2160 page_move_anon_rmap(old_page, vma, address);
2161 unlock_page(old_page);
2162 } else if (unlikely((vma->vm_flags & (VM_WRITE|VM_SHARED)) ==
2163 (VM_WRITE|VM_SHARED))) {
2164
2165
2166
2167
2168
2169 if (vma->vm_ops && vma->vm_ops->page_mkwrite) {
2170 struct vm_fault vmf;
2171 int tmp;
2172
2173 vmf.virtual_address = (void __user *)(address &
2174 PAGE_MASK);
2175 vmf.pgoff = old_page->index;
2176 vmf.flags = FAULT_FLAG_WRITE|FAULT_FLAG_MKWRITE;
2177 vmf.page = old_page;
2178
2179
2180
2181
2182
2183
2184
2185
2186
2187 page_cache_get(old_page);
2188 pte_unmap_unlock(page_table, ptl);
2189
2190 tmp = vma->vm_ops->page_mkwrite(vma, &vmf);
2191 if (unlikely(tmp &
2192 (VM_FAULT_ERROR | VM_FAULT_NOPAGE))) {
2193 ret = tmp;
2194 goto unwritable_page;
2195 }
2196 if (unlikely(!(tmp & VM_FAULT_LOCKED))) {
2197 lock_page(old_page);
2198 if (!old_page->mapping) {
2199 ret = 0;
2200 unlock_page(old_page);
2201 goto unwritable_page;
2202 }
2203 } else
2204 VM_BUG_ON(!PageLocked(old_page));
2205
2206
2207
2208
2209
2210
2211
2212 page_table = pte_offset_map_lock(mm, pmd, address,
2213 &ptl);
2214 if (!pte_same(*page_table, orig_pte)) {
2215 unlock_page(old_page);
2216 page_cache_release(old_page);
2217 goto unlock;
2218 }
2219
2220 page_mkwrite = 1;
2221 }
2222 dirty_page = old_page;
2223 get_page(dirty_page);
2224 reuse = 1;
2225 }
2226
2227 if (reuse) {
2228reuse:
2229 flush_cache_page(vma, address, pte_pfn(orig_pte));
2230 entry = pte_mkyoung(orig_pte);
2231 entry = maybe_mkwrite(pte_mkdirty(entry), vma);
2232 if (ptep_set_access_flags(vma, address, page_table, entry,1))
2233 update_mmu_cache(vma, address, page_table);
2234 ret |= VM_FAULT_WRITE;
2235 goto unlock;
2236 }
2237
2238
2239
2240
2241 page_cache_get(old_page);
2242gotten:
2243 pte_unmap_unlock(page_table, ptl);
2244
2245 if (unlikely(anon_vma_prepare(vma)))
2246 goto oom;
2247
2248 if (is_zero_pfn(pte_pfn(orig_pte))) {
2249 new_page = alloc_zeroed_user_highpage_movable(vma, address);
2250 if (!new_page)
2251 goto oom;
2252 } else {
2253 new_page = alloc_page_vma(GFP_HIGHUSER_MOVABLE, vma, address);
2254 if (!new_page)
2255 goto oom;
2256 cow_user_page(new_page, old_page, address, vma);
2257 }
2258 __SetPageUptodate(new_page);
2259
2260
2261
2262
2263
2264 if ((vma->vm_flags & VM_LOCKED) && old_page) {
2265 lock_page(old_page);
2266 clear_page_mlock(old_page);
2267 unlock_page(old_page);
2268 }
2269
2270 if (mem_cgroup_newpage_charge(new_page, mm, GFP_KERNEL))
2271 goto oom_free_new;
2272
2273
2274
2275
2276 page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
2277 if (likely(pte_same(*page_table, orig_pte))) {
2278 if (old_page) {
2279 if (!PageAnon(old_page)) {
2280 dec_mm_counter_fast(mm, MM_FILEPAGES);
2281 inc_mm_counter_fast(mm, MM_ANONPAGES);
2282 }
2283 } else
2284 inc_mm_counter_fast(mm, MM_ANONPAGES);
2285 flush_cache_page(vma, address, pte_pfn(orig_pte));
2286 entry = mk_pte(new_page, vma->vm_page_prot);
2287 entry = maybe_mkwrite(pte_mkdirty(entry), vma);
2288
2289
2290
2291
2292
2293
2294 ptep_clear_flush(vma, address, page_table);
2295 page_add_new_anon_rmap(new_page, vma, address);
2296
2297
2298
2299
2300
2301 set_pte_at_notify(mm, address, page_table, entry);
2302 update_mmu_cache(vma, address, page_table);
2303 if (old_page) {
2304
2305
2306
2307
2308
2309
2310
2311
2312
2313
2314
2315
2316
2317
2318
2319
2320
2321
2322
2323
2324
2325
2326 page_remove_rmap(old_page);
2327 }
2328
2329
2330 new_page = old_page;
2331 ret |= VM_FAULT_WRITE;
2332 } else
2333 mem_cgroup_uncharge_page(new_page);
2334
2335 if (new_page)
2336 page_cache_release(new_page);
2337 if (old_page)
2338 page_cache_release(old_page);
2339unlock:
2340 pte_unmap_unlock(page_table, ptl);
2341 if (dirty_page) {
2342
2343
2344
2345
2346
2347
2348
2349
2350 if (!page_mkwrite) {
2351 wait_on_page_locked(dirty_page);
2352 set_page_dirty_balance(dirty_page, page_mkwrite);
2353 }
2354 put_page(dirty_page);
2355 if (page_mkwrite) {
2356 struct address_space *mapping = dirty_page->mapping;
2357
2358 set_page_dirty(dirty_page);
2359 unlock_page(dirty_page);
2360 page_cache_release(dirty_page);
2361 if (mapping) {
2362
2363
2364
2365
2366 balance_dirty_pages_ratelimited(mapping);
2367 }
2368 }
2369
2370
2371 if (vma->vm_file)
2372 file_update_time(vma->vm_file);
2373 }
2374 return ret;
2375oom_free_new:
2376 page_cache_release(new_page);
2377oom:
2378 if (old_page) {
2379 if (page_mkwrite) {
2380 unlock_page(old_page);
2381 page_cache_release(old_page);
2382 }
2383 page_cache_release(old_page);
2384 }
2385 return VM_FAULT_OOM;
2386
2387unwritable_page:
2388 page_cache_release(old_page);
2389 return ret;
2390}
2391
2392
2393
2394
2395
2396
2397
2398
2399
2400
2401
2402
2403
2404
2405
2406
2407
2408
2409
2410
2411
2412
2413
2414
2415
2416
2417
2418
2419
2420
2421
2422
2423
2424#define is_restart_addr(truncate_count) (!((truncate_count) & ~PAGE_MASK))
2425
2426static void reset_vma_truncate_counts(struct address_space *mapping)
2427{
2428 struct vm_area_struct *vma;
2429 struct prio_tree_iter iter;
2430
2431 vma_prio_tree_foreach(vma, &iter, &mapping->i_mmap, 0, ULONG_MAX)
2432 vma->vm_truncate_count = 0;
2433 list_for_each_entry(vma, &mapping->i_mmap_nonlinear, shared.vm_set.list)
2434 vma->vm_truncate_count = 0;
2435}
2436
2437static int unmap_mapping_range_vma(struct vm_area_struct *vma,
2438 unsigned long start_addr, unsigned long end_addr,
2439 struct zap_details *details)
2440{
2441 unsigned long restart_addr;
2442 int need_break;
2443
2444
2445
2446
2447
2448
2449
2450
2451again:
2452 restart_addr = vma->vm_truncate_count;
2453 if (is_restart_addr(restart_addr) && start_addr < restart_addr) {
2454 start_addr = restart_addr;
2455 if (start_addr >= end_addr) {
2456
2457 vma->vm_truncate_count = details->truncate_count;
2458 return 0;
2459 }
2460 }
2461
2462 restart_addr = zap_page_range(vma, start_addr,
2463 end_addr - start_addr, details);
2464 need_break = need_resched() || spin_needbreak(details->i_mmap_lock);
2465
2466 if (restart_addr >= end_addr) {
2467
2468 vma->vm_truncate_count = details->truncate_count;
2469 if (!need_break)
2470 return 0;
2471 } else {
2472
2473 vma->vm_truncate_count = restart_addr;
2474 if (!need_break)
2475 goto again;
2476 }
2477
2478 spin_unlock(details->i_mmap_lock);
2479 cond_resched();
2480 spin_lock(details->i_mmap_lock);
2481 return -EINTR;
2482}
2483
2484static inline void unmap_mapping_range_tree(struct prio_tree_root *root,
2485 struct zap_details *details)
2486{
2487 struct vm_area_struct *vma;
2488 struct prio_tree_iter iter;
2489 pgoff_t vba, vea, zba, zea;
2490
2491restart:
2492 vma_prio_tree_foreach(vma, &iter, root,
2493 details->first_index, details->last_index) {
2494
2495 if (vma->vm_truncate_count == details->truncate_count)
2496 continue;
2497
2498 vba = vma->vm_pgoff;
2499 vea = vba + ((vma->vm_end - vma->vm_start) >> PAGE_SHIFT) - 1;
2500
2501 zba = details->first_index;
2502 if (zba < vba)
2503 zba = vba;
2504 zea = details->last_index;
2505 if (zea > vea)
2506 zea = vea;
2507
2508 if (unmap_mapping_range_vma(vma,
2509 ((zba - vba) << PAGE_SHIFT) + vma->vm_start,
2510 ((zea - vba + 1) << PAGE_SHIFT) + vma->vm_start,
2511 details) < 0)
2512 goto restart;
2513 }
2514}
2515
2516static inline void unmap_mapping_range_list(struct list_head *head,
2517 struct zap_details *details)
2518{
2519 struct vm_area_struct *vma;
2520
2521
2522
2523
2524
2525
2526
2527restart:
2528 list_for_each_entry(vma, head, shared.vm_set.list) {
2529
2530 if (vma->vm_truncate_count == details->truncate_count)
2531 continue;
2532 details->nonlinear_vma = vma;
2533 if (unmap_mapping_range_vma(vma, vma->vm_start,
2534 vma->vm_end, details) < 0)
2535 goto restart;
2536 }
2537}
2538
2539
2540
2541
2542
2543
2544
2545
2546
2547
2548
2549
2550
2551
2552
2553void unmap_mapping_range(struct address_space *mapping,
2554 loff_t const holebegin, loff_t const holelen, int even_cows)
2555{
2556 struct zap_details details;
2557 pgoff_t hba = holebegin >> PAGE_SHIFT;
2558 pgoff_t hlen = (holelen + PAGE_SIZE - 1) >> PAGE_SHIFT;
2559
2560
2561 if (sizeof(holelen) > sizeof(hlen)) {
2562 long long holeend =
2563 (holebegin + holelen + PAGE_SIZE - 1) >> PAGE_SHIFT;
2564 if (holeend & ~(long long)ULONG_MAX)
2565 hlen = ULONG_MAX - hba + 1;
2566 }
2567
2568 details.check_mapping = even_cows? NULL: mapping;
2569 details.nonlinear_vma = NULL;
2570 details.first_index = hba;
2571 details.last_index = hba + hlen - 1;
2572 if (details.last_index < details.first_index)
2573 details.last_index = ULONG_MAX;
2574 details.i_mmap_lock = &mapping->i_mmap_lock;
2575
2576 spin_lock(&mapping->i_mmap_lock);
2577
2578
2579 mapping->truncate_count++;
2580 if (unlikely(is_restart_addr(mapping->truncate_count))) {
2581 if (mapping->truncate_count == 0)
2582 reset_vma_truncate_counts(mapping);
2583 mapping->truncate_count++;
2584 }
2585 details.truncate_count = mapping->truncate_count;
2586
2587 if (unlikely(!prio_tree_empty(&mapping->i_mmap)))
2588 unmap_mapping_range_tree(&mapping->i_mmap, &details);
2589 if (unlikely(!list_empty(&mapping->i_mmap_nonlinear)))
2590 unmap_mapping_range_list(&mapping->i_mmap_nonlinear, &details);
2591 spin_unlock(&mapping->i_mmap_lock);
2592}
2593EXPORT_SYMBOL(unmap_mapping_range);
2594
2595int vmtruncate_range(struct inode *inode, loff_t offset, loff_t end)
2596{
2597 struct address_space *mapping = inode->i_mapping;
2598
2599
2600
2601
2602
2603
2604 if (!inode->i_op->truncate_range)
2605 return -ENOSYS;
2606
2607 mutex_lock(&inode->i_mutex);
2608 down_write(&inode->i_alloc_sem);
2609 unmap_mapping_range(mapping, offset, (end - offset), 1);
2610 truncate_inode_pages_range(mapping, offset, end);
2611 unmap_mapping_range(mapping, offset, (end - offset), 1);
2612 inode->i_op->truncate_range(inode, offset, end);
2613 up_write(&inode->i_alloc_sem);
2614 mutex_unlock(&inode->i_mutex);
2615
2616 return 0;
2617}
2618
2619
2620
2621
2622
2623
2624static int do_swap_page(struct mm_struct *mm, struct vm_area_struct *vma,
2625 unsigned long address, pte_t *page_table, pmd_t *pmd,
2626 unsigned int flags, pte_t orig_pte)
2627{
2628 spinlock_t *ptl;
2629 struct page *page;
2630 swp_entry_t entry;
2631 pte_t pte;
2632 struct mem_cgroup *ptr = NULL;
2633 int ret = 0;
2634
2635 if (!pte_unmap_same(mm, pmd, page_table, orig_pte))
2636 goto out;
2637
2638 entry = pte_to_swp_entry(orig_pte);
2639 if (unlikely(non_swap_entry(entry))) {
2640 if (is_migration_entry(entry)) {
2641 migration_entry_wait(mm, pmd, address);
2642 } else if (is_hwpoison_entry(entry)) {
2643 ret = VM_FAULT_HWPOISON;
2644 } else {
2645 print_bad_pte(vma, address, orig_pte, NULL);
2646 ret = VM_FAULT_SIGBUS;
2647 }
2648 goto out;
2649 }
2650 delayacct_set_flag(DELAYACCT_PF_SWAPIN);
2651 page = lookup_swap_cache(entry);
2652 if (!page) {
2653 grab_swap_token(mm);
2654 page = swapin_readahead(entry,
2655 GFP_HIGHUSER_MOVABLE, vma, address);
2656 if (!page) {
2657
2658
2659
2660
2661 page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
2662 if (likely(pte_same(*page_table, orig_pte)))
2663 ret = VM_FAULT_OOM;
2664 delayacct_clear_flag(DELAYACCT_PF_SWAPIN);
2665 goto unlock;
2666 }
2667
2668
2669 ret = VM_FAULT_MAJOR;
2670 count_vm_event(PGMAJFAULT);
2671 } else if (PageHWPoison(page)) {
2672
2673
2674
2675
2676 ret = VM_FAULT_HWPOISON;
2677 delayacct_clear_flag(DELAYACCT_PF_SWAPIN);
2678 goto out_release;
2679 }
2680
2681 lock_page(page);
2682 delayacct_clear_flag(DELAYACCT_PF_SWAPIN);
2683
2684 page = ksm_might_need_to_copy(page, vma, address);
2685 if (!page) {
2686 ret = VM_FAULT_OOM;
2687 goto out;
2688 }
2689
2690 if (mem_cgroup_try_charge_swapin(mm, page, GFP_KERNEL, &ptr)) {
2691 ret = VM_FAULT_OOM;
2692 goto out_page;
2693 }
2694
2695
2696
2697
2698 page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
2699 if (unlikely(!pte_same(*page_table, orig_pte)))
2700 goto out_nomap;
2701
2702 if (unlikely(!PageUptodate(page))) {
2703 ret = VM_FAULT_SIGBUS;
2704 goto out_nomap;
2705 }
2706
2707
2708
2709
2710
2711
2712
2713
2714
2715
2716
2717
2718
2719
2720
2721 inc_mm_counter_fast(mm, MM_ANONPAGES);
2722 dec_mm_counter_fast(mm, MM_SWAPENTS);
2723 pte = mk_pte(page, vma->vm_page_prot);
2724 if ((flags & FAULT_FLAG_WRITE) && reuse_swap_page(page)) {
2725 pte = maybe_mkwrite(pte_mkdirty(pte), vma);
2726 flags &= ~FAULT_FLAG_WRITE;
2727 }
2728 flush_icache_page(vma, page);
2729 set_pte_at(mm, address, page_table, pte);
2730 page_add_anon_rmap(page, vma, address);
2731
2732 mem_cgroup_commit_charge_swapin(page, ptr);
2733
2734 swap_free(entry);
2735 if (vm_swap_full() || (vma->vm_flags & VM_LOCKED) || PageMlocked(page))
2736 try_to_free_swap(page);
2737 unlock_page(page);
2738
2739 if (flags & FAULT_FLAG_WRITE) {
2740 ret |= do_wp_page(mm, vma, address, page_table, pmd, ptl, pte);
2741 if (ret & VM_FAULT_ERROR)
2742 ret &= VM_FAULT_ERROR;
2743 goto out;
2744 }
2745
2746
2747 update_mmu_cache(vma, address, page_table);
2748unlock:
2749 pte_unmap_unlock(page_table, ptl);
2750out:
2751 return ret;
2752out_nomap:
2753 mem_cgroup_cancel_charge_swapin(ptr);
2754 pte_unmap_unlock(page_table, ptl);
2755out_page:
2756 unlock_page(page);
2757out_release:
2758 page_cache_release(page);
2759 return ret;
2760}
2761
2762
2763
2764
2765
2766
2767static int do_anonymous_page(struct mm_struct *mm, struct vm_area_struct *vma,
2768 unsigned long address, pte_t *page_table, pmd_t *pmd,
2769 unsigned int flags)
2770{
2771 struct page *page;
2772 spinlock_t *ptl;
2773 pte_t entry;
2774
2775 if (!(flags & FAULT_FLAG_WRITE)) {
2776 entry = pte_mkspecial(pfn_pte(my_zero_pfn(address),
2777 vma->vm_page_prot));
2778 ptl = pte_lockptr(mm, pmd);
2779 spin_lock(ptl);
2780 if (!pte_none(*page_table))
2781 goto unlock;
2782 goto setpte;
2783 }
2784
2785
2786 pte_unmap(page_table);
2787
2788 if (unlikely(anon_vma_prepare(vma)))
2789 goto oom;
2790 page = alloc_zeroed_user_highpage_movable(vma, address);
2791 if (!page)
2792 goto oom;
2793 __SetPageUptodate(page);
2794
2795 if (mem_cgroup_newpage_charge(page, mm, GFP_KERNEL))
2796 goto oom_free_page;
2797
2798 entry = mk_pte(page, vma->vm_page_prot);
2799 if (vma->vm_flags & VM_WRITE)
2800 entry = pte_mkwrite(pte_mkdirty(entry));
2801
2802 page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
2803 if (!pte_none(*page_table))
2804 goto release;
2805
2806 inc_mm_counter_fast(mm, MM_ANONPAGES);
2807 page_add_new_anon_rmap(page, vma, address);
2808setpte:
2809 set_pte_at(mm, address, page_table, entry);
2810
2811
2812 update_mmu_cache(vma, address, page_table);
2813unlock:
2814 pte_unmap_unlock(page_table, ptl);
2815 return 0;
2816release:
2817 mem_cgroup_uncharge_page(page);
2818 page_cache_release(page);
2819 goto unlock;
2820oom_free_page:
2821 page_cache_release(page);
2822oom:
2823 return VM_FAULT_OOM;
2824}
2825
2826
2827
2828
2829
2830
2831
2832
2833
2834
2835
2836
2837
2838
2839static int __do_fault(struct mm_struct *mm, struct vm_area_struct *vma,
2840 unsigned long address, pmd_t *pmd,
2841 pgoff_t pgoff, unsigned int flags, pte_t orig_pte)
2842{
2843 pte_t *page_table;
2844 spinlock_t *ptl;
2845 struct page *page;
2846 pte_t entry;
2847 int anon = 0;
2848 int charged = 0;
2849 struct page *dirty_page = NULL;
2850 struct vm_fault vmf;
2851 int ret;
2852 int page_mkwrite = 0;
2853
2854 vmf.virtual_address = (void __user *)(address & PAGE_MASK);
2855 vmf.pgoff = pgoff;
2856 vmf.flags = flags;
2857 vmf.page = NULL;
2858
2859 ret = vma->vm_ops->fault(vma, &vmf);
2860 if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE)))
2861 return ret;
2862
2863 if (unlikely(PageHWPoison(vmf.page))) {
2864 if (ret & VM_FAULT_LOCKED)
2865 unlock_page(vmf.page);
2866 return VM_FAULT_HWPOISON;
2867 }
2868
2869
2870
2871
2872
2873 if (unlikely(!(ret & VM_FAULT_LOCKED)))
2874 lock_page(vmf.page);
2875 else
2876 VM_BUG_ON(!PageLocked(vmf.page));
2877
2878
2879
2880
2881 page = vmf.page;
2882 if (flags & FAULT_FLAG_WRITE) {
2883 if (!(vma->vm_flags & VM_SHARED)) {
2884 anon = 1;
2885 if (unlikely(anon_vma_prepare(vma))) {
2886 ret = VM_FAULT_OOM;
2887 goto out;
2888 }
2889 page = alloc_page_vma(GFP_HIGHUSER_MOVABLE,
2890 vma, address);
2891 if (!page) {
2892 ret = VM_FAULT_OOM;
2893 goto out;
2894 }
2895 if (mem_cgroup_newpage_charge(page, mm, GFP_KERNEL)) {
2896 ret = VM_FAULT_OOM;
2897 page_cache_release(page);
2898 goto out;
2899 }
2900 charged = 1;
2901
2902
2903
2904
2905 if (vma->vm_flags & VM_LOCKED)
2906 clear_page_mlock(vmf.page);
2907 copy_user_highpage(page, vmf.page, address, vma);
2908 __SetPageUptodate(page);
2909 } else {
2910
2911
2912
2913
2914
2915 if (vma->vm_ops->page_mkwrite) {
2916 int tmp;
2917
2918 unlock_page(page);
2919 vmf.flags = FAULT_FLAG_WRITE|FAULT_FLAG_MKWRITE;
2920 tmp = vma->vm_ops->page_mkwrite(vma, &vmf);
2921 if (unlikely(tmp &
2922 (VM_FAULT_ERROR | VM_FAULT_NOPAGE))) {
2923 ret = tmp;
2924 goto unwritable_page;
2925 }
2926 if (unlikely(!(tmp & VM_FAULT_LOCKED))) {
2927 lock_page(page);
2928 if (!page->mapping) {
2929 ret = 0;
2930 unlock_page(page);
2931 goto unwritable_page;
2932 }
2933 } else
2934 VM_BUG_ON(!PageLocked(page));
2935 page_mkwrite = 1;
2936 }
2937 }
2938
2939 }
2940
2941 page_table = pte_offset_map_lock(mm, pmd, address, &ptl);
2942
2943
2944
2945
2946
2947
2948
2949
2950
2951
2952
2953
2954 if (likely(pte_same(*page_table, orig_pte))) {
2955 flush_icache_page(vma, page);
2956 entry = mk_pte(page, vma->vm_page_prot);
2957 if (flags & FAULT_FLAG_WRITE)
2958 entry = maybe_mkwrite(pte_mkdirty(entry), vma);
2959 if (anon) {
2960 inc_mm_counter_fast(mm, MM_ANONPAGES);
2961 page_add_new_anon_rmap(page, vma, address);
2962 } else {
2963 inc_mm_counter_fast(mm, MM_FILEPAGES);
2964 page_add_file_rmap(page);
2965 if (flags & FAULT_FLAG_WRITE) {
2966 dirty_page = page;
2967 get_page(dirty_page);
2968 }
2969 }
2970 set_pte_at(mm, address, page_table, entry);
2971
2972
2973 update_mmu_cache(vma, address, page_table);
2974 } else {
2975 if (charged)
2976 mem_cgroup_uncharge_page(page);
2977 if (anon)
2978 page_cache_release(page);
2979 else
2980 anon = 1;
2981 }
2982
2983 pte_unmap_unlock(page_table, ptl);
2984
2985out:
2986 if (dirty_page) {
2987 struct address_space *mapping = page->mapping;
2988
2989 if (set_page_dirty(dirty_page))
2990 page_mkwrite = 1;
2991 unlock_page(dirty_page);
2992 put_page(dirty_page);
2993 if (page_mkwrite && mapping) {
2994
2995
2996
2997
2998 balance_dirty_pages_ratelimited(mapping);
2999 }
3000
3001
3002 if (vma->vm_file)
3003 file_update_time(vma->vm_file);
3004 } else {
3005 unlock_page(vmf.page);
3006 if (anon)
3007 page_cache_release(vmf.page);
3008 }
3009
3010 return ret;
3011
3012unwritable_page:
3013 page_cache_release(page);
3014 return ret;
3015}
3016
3017static int do_linear_fault(struct mm_struct *mm, struct vm_area_struct *vma,
3018 unsigned long address, pte_t *page_table, pmd_t *pmd,
3019 unsigned int flags, pte_t orig_pte)
3020{
3021 pgoff_t pgoff = (((address & PAGE_MASK)
3022 - vma->vm_start) >> PAGE_SHIFT) + vma->vm_pgoff;
3023
3024 pte_unmap(page_table);
3025 return __do_fault(mm, vma, address, pmd, pgoff, flags, orig_pte);
3026}
3027
3028
3029
3030
3031
3032
3033
3034
3035
3036
3037static int do_nonlinear_fault(struct mm_struct *mm, struct vm_area_struct *vma,
3038 unsigned long address, pte_t *page_table, pmd_t *pmd,
3039 unsigned int flags, pte_t orig_pte)
3040{
3041 pgoff_t pgoff;
3042
3043 flags |= FAULT_FLAG_NONLINEAR;
3044
3045 if (!pte_unmap_same(mm, pmd, page_table, orig_pte))
3046 return 0;
3047
3048 if (unlikely(!(vma->vm_flags & VM_NONLINEAR))) {
3049
3050
3051
3052 print_bad_pte(vma, address, orig_pte, NULL);
3053 return VM_FAULT_SIGBUS;
3054 }
3055
3056 pgoff = pte_to_pgoff(orig_pte);
3057 return __do_fault(mm, vma, address, pmd, pgoff, flags, orig_pte);
3058}
3059
3060
3061
3062
3063
3064
3065
3066
3067
3068
3069
3070
3071
3072
3073static inline int handle_pte_fault(struct mm_struct *mm,
3074 struct vm_area_struct *vma, unsigned long address,
3075 pte_t *pte, pmd_t *pmd, unsigned int flags)
3076{
3077 pte_t entry;
3078 spinlock_t *ptl;
3079
3080 entry = *pte;
3081 if (!pte_present(entry)) {
3082 if (pte_none(entry)) {
3083 if (vma->vm_ops) {
3084 if (likely(vma->vm_ops->fault))
3085 return do_linear_fault(mm, vma, address,
3086 pte, pmd, flags, entry);
3087 }
3088 return do_anonymous_page(mm, vma, address,
3089 pte, pmd, flags);
3090 }
3091 if (pte_file(entry))
3092 return do_nonlinear_fault(mm, vma, address,
3093 pte, pmd, flags, entry);
3094 return do_swap_page(mm, vma, address,
3095 pte, pmd, flags, entry);
3096 }
3097
3098 ptl = pte_lockptr(mm, pmd);
3099 spin_lock(ptl);
3100 if (unlikely(!pte_same(*pte, entry)))
3101 goto unlock;
3102 if (flags & FAULT_FLAG_WRITE) {
3103 if (!pte_write(entry))
3104 return do_wp_page(mm, vma, address,
3105 pte, pmd, ptl, entry);
3106 entry = pte_mkdirty(entry);
3107 }
3108 entry = pte_mkyoung(entry);
3109 if (ptep_set_access_flags(vma, address, pte, entry, flags & FAULT_FLAG_WRITE)) {
3110 update_mmu_cache(vma, address, pte);
3111 } else {
3112
3113
3114
3115
3116
3117
3118 if (flags & FAULT_FLAG_WRITE)
3119 flush_tlb_page(vma, address);
3120 }
3121unlock:
3122 pte_unmap_unlock(pte, ptl);
3123 return 0;
3124}
3125
3126
3127
3128
3129int handle_mm_fault(struct mm_struct *mm, struct vm_area_struct *vma,
3130 unsigned long address, unsigned int flags)
3131{
3132 pgd_t *pgd;
3133 pud_t *pud;
3134 pmd_t *pmd;
3135 pte_t *pte;
3136
3137 __set_current_state(TASK_RUNNING);
3138
3139 count_vm_event(PGFAULT);
3140
3141
3142 check_sync_rss_stat(current);
3143
3144 if (unlikely(is_vm_hugetlb_page(vma)))
3145 return hugetlb_fault(mm, vma, address, flags);
3146
3147 pgd = pgd_offset(mm, address);
3148 pud = pud_alloc(mm, pgd, address);
3149 if (!pud)
3150 return VM_FAULT_OOM;
3151 pmd = pmd_alloc(mm, pud, address);
3152 if (!pmd)
3153 return VM_FAULT_OOM;
3154 pte = pte_alloc_map(mm, pmd, address);
3155 if (!pte)
3156 return VM_FAULT_OOM;
3157
3158 return handle_pte_fault(mm, vma, address, pte, pmd, flags);
3159}
3160
3161#ifndef __PAGETABLE_PUD_FOLDED
3162
3163
3164
3165
3166int __pud_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
3167{
3168 pud_t *new = pud_alloc_one(mm, address);
3169 if (!new)
3170 return -ENOMEM;
3171
3172 smp_wmb();
3173
3174 spin_lock(&mm->page_table_lock);
3175 if (pgd_present(*pgd))
3176 pud_free(mm, new);
3177 else
3178 pgd_populate(mm, pgd, new);
3179 spin_unlock(&mm->page_table_lock);
3180 return 0;
3181}
3182#endif
3183
3184#ifndef __PAGETABLE_PMD_FOLDED
3185
3186
3187
3188
3189int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address)
3190{
3191 pmd_t *new = pmd_alloc_one(mm, address);
3192 if (!new)
3193 return -ENOMEM;
3194
3195 smp_wmb();
3196
3197 spin_lock(&mm->page_table_lock);
3198#ifndef __ARCH_HAS_4LEVEL_HACK
3199 if (pud_present(*pud))
3200 pmd_free(mm, new);
3201 else
3202 pud_populate(mm, pud, new);
3203#else
3204 if (pgd_present(*pud))
3205 pmd_free(mm, new);
3206 else
3207 pgd_populate(mm, pud, new);
3208#endif
3209 spin_unlock(&mm->page_table_lock);
3210 return 0;
3211}
3212#endif
3213
3214int make_pages_present(unsigned long addr, unsigned long end)
3215{
3216 int ret, len, write;
3217 struct vm_area_struct * vma;
3218
3219 vma = find_vma(current->mm, addr);
3220 if (!vma)
3221 return -ENOMEM;
3222 write = (vma->vm_flags & VM_WRITE) != 0;
3223 BUG_ON(addr >= end);
3224 BUG_ON(end > vma->vm_end);
3225 len = DIV_ROUND_UP(end, PAGE_SIZE) - addr/PAGE_SIZE;
3226 ret = get_user_pages(current, current->mm, addr,
3227 len, write, 0, NULL, NULL);
3228 if (ret < 0)
3229 return ret;
3230 return ret == len ? 0 : -EFAULT;
3231}
3232
3233#if !defined(__HAVE_ARCH_GATE_AREA)
3234
3235#if defined(AT_SYSINFO_EHDR)
3236static struct vm_area_struct gate_vma;
3237
3238static int __init gate_vma_init(void)
3239{
3240 gate_vma.vm_mm = NULL;
3241 gate_vma.vm_start = FIXADDR_USER_START;
3242 gate_vma.vm_end = FIXADDR_USER_END;
3243 gate_vma.vm_flags = VM_READ | VM_MAYREAD | VM_EXEC | VM_MAYEXEC;
3244 gate_vma.vm_page_prot = __P101;
3245
3246
3247
3248
3249
3250
3251 gate_vma.vm_flags |= VM_ALWAYSDUMP;
3252 return 0;
3253}
3254__initcall(gate_vma_init);
3255#endif
3256
3257struct vm_area_struct *get_gate_vma(struct task_struct *tsk)
3258{
3259#ifdef AT_SYSINFO_EHDR
3260 return &gate_vma;
3261#else
3262 return NULL;
3263#endif
3264}
3265
3266int in_gate_area_no_task(unsigned long addr)
3267{
3268#ifdef AT_SYSINFO_EHDR
3269 if ((addr >= FIXADDR_USER_START) && (addr < FIXADDR_USER_END))
3270 return 1;
3271#endif
3272 return 0;
3273}
3274
3275#endif
3276
3277static int follow_pte(struct mm_struct *mm, unsigned long address,
3278 pte_t **ptepp, spinlock_t **ptlp)
3279{
3280 pgd_t *pgd;
3281 pud_t *pud;
3282 pmd_t *pmd;
3283 pte_t *ptep;
3284
3285 pgd = pgd_offset(mm, address);
3286 if (pgd_none(*pgd) || unlikely(pgd_bad(*pgd)))
3287 goto out;
3288
3289 pud = pud_offset(pgd, address);
3290 if (pud_none(*pud) || unlikely(pud_bad(*pud)))
3291 goto out;
3292
3293 pmd = pmd_offset(pud, address);
3294 if (pmd_none(*pmd) || unlikely(pmd_bad(*pmd)))
3295 goto out;
3296
3297
3298 if (pmd_huge(*pmd))
3299 goto out;
3300
3301 ptep = pte_offset_map_lock(mm, pmd, address, ptlp);
3302 if (!ptep)
3303 goto out;
3304 if (!pte_present(*ptep))
3305 goto unlock;
3306 *ptepp = ptep;
3307 return 0;
3308unlock:
3309 pte_unmap_unlock(ptep, *ptlp);
3310out:
3311 return -EINVAL;
3312}
3313
3314
3315
3316
3317
3318
3319
3320
3321
3322
3323
3324int follow_pfn(struct vm_area_struct *vma, unsigned long address,
3325 unsigned long *pfn)
3326{
3327 int ret = -EINVAL;
3328 spinlock_t *ptl;
3329 pte_t *ptep;
3330
3331 if (!(vma->vm_flags & (VM_IO | VM_PFNMAP)))
3332 return ret;
3333
3334 ret = follow_pte(vma->vm_mm, address, &ptep, &ptl);
3335 if (ret)
3336 return ret;
3337 *pfn = pte_pfn(*ptep);
3338 pte_unmap_unlock(ptep, ptl);
3339 return 0;
3340}
3341EXPORT_SYMBOL(follow_pfn);
3342
3343#ifdef CONFIG_HAVE_IOREMAP_PROT
3344int follow_phys(struct vm_area_struct *vma,
3345 unsigned long address, unsigned int flags,
3346 unsigned long *prot, resource_size_t *phys)
3347{
3348 int ret = -EINVAL;
3349 pte_t *ptep, pte;
3350 spinlock_t *ptl;
3351
3352 if (!(vma->vm_flags & (VM_IO | VM_PFNMAP)))
3353 goto out;
3354
3355 if (follow_pte(vma->vm_mm, address, &ptep, &ptl))
3356 goto out;
3357 pte = *ptep;
3358
3359 if ((flags & FOLL_WRITE) && !pte_write(pte))
3360 goto unlock;
3361
3362 *prot = pgprot_val(pte_pgprot(pte));
3363 *phys = (resource_size_t)pte_pfn(pte) << PAGE_SHIFT;
3364
3365 ret = 0;
3366unlock:
3367 pte_unmap_unlock(ptep, ptl);
3368out:
3369 return ret;
3370}
3371
3372int generic_access_phys(struct vm_area_struct *vma, unsigned long addr,
3373 void *buf, int len, int write)
3374{
3375 resource_size_t phys_addr;
3376 unsigned long prot = 0;
3377 void __iomem *maddr;
3378 int offset = addr & (PAGE_SIZE-1);
3379
3380 if (follow_phys(vma, addr, write, &prot, &phys_addr))
3381 return -EINVAL;
3382
3383 maddr = ioremap_prot(phys_addr, PAGE_SIZE, prot);
3384 if (write)
3385 memcpy_toio(maddr + offset, buf, len);
3386 else
3387 memcpy_fromio(buf, maddr + offset, len);
3388 iounmap(maddr);
3389
3390 return len;
3391}
3392#endif
3393
3394
3395
3396
3397
3398
3399int access_process_vm(struct task_struct *tsk, unsigned long addr, void *buf, int len, int write)
3400{
3401 struct mm_struct *mm;
3402 struct vm_area_struct *vma;
3403 void *old_buf = buf;
3404
3405 mm = get_task_mm(tsk);
3406 if (!mm)
3407 return 0;
3408
3409 down_read(&mm->mmap_sem);
3410
3411 while (len) {
3412 int bytes, ret, offset;
3413 void *maddr;
3414 struct page *page = NULL;
3415
3416 ret = get_user_pages(tsk, mm, addr, 1,
3417 write, 1, &page, &vma);
3418 if (ret <= 0) {
3419
3420
3421
3422
3423#ifdef CONFIG_HAVE_IOREMAP_PROT
3424 vma = find_vma(mm, addr);
3425 if (!vma)
3426 break;
3427 if (vma->vm_ops && vma->vm_ops->access)
3428 ret = vma->vm_ops->access(vma, addr, buf,
3429 len, write);
3430 if (ret <= 0)
3431#endif
3432 break;
3433 bytes = ret;
3434 } else {
3435 bytes = len;
3436 offset = addr & (PAGE_SIZE-1);
3437 if (bytes > PAGE_SIZE-offset)
3438 bytes = PAGE_SIZE-offset;
3439
3440 maddr = kmap(page);
3441 if (write) {
3442 copy_to_user_page(vma, page, addr,
3443 maddr + offset, buf, bytes);
3444 set_page_dirty_lock(page);
3445 } else {
3446 copy_from_user_page(vma, page, addr,
3447 buf, maddr + offset, bytes);
3448 }
3449 kunmap(page);
3450 page_cache_release(page);
3451 }
3452 len -= bytes;
3453 buf += bytes;
3454 addr += bytes;
3455 }
3456 up_read(&mm->mmap_sem);
3457 mmput(mm);
3458
3459 return buf - old_buf;
3460}
3461
3462
3463
3464
3465void print_vma_addr(char *prefix, unsigned long ip)
3466{
3467 struct mm_struct *mm = current->mm;
3468 struct vm_area_struct *vma;
3469
3470
3471
3472
3473
3474 if (preempt_count())
3475 return;
3476
3477 down_read(&mm->mmap_sem);
3478 vma = find_vma(mm, ip);
3479 if (vma && vma->vm_file) {
3480 struct file *f = vma->vm_file;
3481 char *buf = (char *)__get_free_page(GFP_KERNEL);
3482 if (buf) {
3483 char *p, *s;
3484
3485 p = d_path(&f->f_path, buf, PAGE_SIZE);
3486 if (IS_ERR(p))
3487 p = "?";
3488 s = strrchr(p, '/');
3489 if (s)
3490 p = s+1;
3491 printk("%s%s[%lx+%lx]", prefix, p,
3492 vma->vm_start,
3493 vma->vm_end - vma->vm_start);
3494 free_page((unsigned long)buf);
3495 }
3496 }
3497 up_read(¤t->mm->mmap_sem);
3498}
3499
3500#ifdef CONFIG_PROVE_LOCKING
3501void might_fault(void)
3502{
3503
3504
3505
3506
3507
3508
3509 if (segment_eq(get_fs(), KERNEL_DS))
3510 return;
3511
3512 might_sleep();
3513
3514
3515
3516
3517
3518 if (!in_atomic() && current->mm)
3519 might_lock_read(¤t->mm->mmap_sem);
3520}
3521EXPORT_SYMBOL(might_fault);
3522#endif
3523