1
2#include <linux/kernel.h>
3#include <linux/errno.h>
4#include <linux/err.h>
5#include <linux/spinlock.h>
6
7#include <linux/mm.h>
8#include <linux/memremap.h>
9#include <linux/pagemap.h>
10#include <linux/rmap.h>
11#include <linux/swap.h>
12#include <linux/swapops.h>
13
14#include <linux/sched/signal.h>
15#include <linux/rwsem.h>
16#include <linux/hugetlb.h>
17#include <linux/migrate.h>
18#include <linux/mm_inline.h>
19#include <linux/sched/mm.h>
20
21#include <asm/mmu_context.h>
22#include <asm/tlbflush.h>
23
24#include "internal.h"
25
26struct follow_page_context {
27 struct dev_pagemap *pgmap;
28 unsigned int page_mask;
29};
30
31static void hpage_pincount_add(struct page *page, int refs)
32{
33 VM_BUG_ON_PAGE(!hpage_pincount_available(page), page);
34 VM_BUG_ON_PAGE(page != compound_head(page), page);
35
36 atomic_add(refs, compound_pincount_ptr(page));
37}
38
39static void hpage_pincount_sub(struct page *page, int refs)
40{
41 VM_BUG_ON_PAGE(!hpage_pincount_available(page), page);
42 VM_BUG_ON_PAGE(page != compound_head(page), page);
43
44 atomic_sub(refs, compound_pincount_ptr(page));
45}
46
47
48
49
50
51static inline struct page *try_get_compound_head(struct page *page, int refs)
52{
53 struct page *head = compound_head(page);
54
55 if (WARN_ON_ONCE(page_ref_count(head) < 0))
56 return NULL;
57 if (unlikely(!page_cache_add_speculative(head, refs)))
58 return NULL;
59 return head;
60}
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81static __maybe_unused struct page *try_grab_compound_head(struct page *page,
82 int refs,
83 unsigned int flags)
84{
85 if (flags & FOLL_GET)
86 return try_get_compound_head(page, refs);
87 else if (flags & FOLL_PIN) {
88 int orig_refs = refs;
89
90
91
92
93
94 if (unlikely(flags & FOLL_LONGTERM) &&
95 is_migrate_cma_page(page))
96 return NULL;
97
98
99
100
101
102
103
104
105
106 if (!hpage_pincount_available(page))
107 refs *= GUP_PIN_COUNTING_BIAS;
108
109 page = try_get_compound_head(page, refs);
110 if (!page)
111 return NULL;
112
113 if (hpage_pincount_available(page))
114 hpage_pincount_add(page, refs);
115
116 mod_node_page_state(page_pgdat(page), NR_FOLL_PIN_ACQUIRED,
117 orig_refs);
118
119 return page;
120 }
121
122 WARN_ON_ONCE(1);
123 return NULL;
124}
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147bool __must_check try_grab_page(struct page *page, unsigned int flags)
148{
149 WARN_ON_ONCE((flags & (FOLL_GET | FOLL_PIN)) == (FOLL_GET | FOLL_PIN));
150
151 if (flags & FOLL_GET)
152 return try_get_page(page);
153 else if (flags & FOLL_PIN) {
154 int refs = 1;
155
156 page = compound_head(page);
157
158 if (WARN_ON_ONCE(page_ref_count(page) <= 0))
159 return false;
160
161 if (hpage_pincount_available(page))
162 hpage_pincount_add(page, 1);
163 else
164 refs = GUP_PIN_COUNTING_BIAS;
165
166
167
168
169
170
171
172 page_ref_add(page, refs);
173
174 mod_node_page_state(page_pgdat(page), NR_FOLL_PIN_ACQUIRED, 1);
175 }
176
177 return true;
178}
179
180#ifdef CONFIG_DEV_PAGEMAP_OPS
181static bool __unpin_devmap_managed_user_page(struct page *page)
182{
183 int count, refs = 1;
184
185 if (!page_is_devmap_managed(page))
186 return false;
187
188 if (hpage_pincount_available(page))
189 hpage_pincount_sub(page, 1);
190 else
191 refs = GUP_PIN_COUNTING_BIAS;
192
193 count = page_ref_sub_return(page, refs);
194
195 mod_node_page_state(page_pgdat(page), NR_FOLL_PIN_RELEASED, 1);
196
197
198
199
200
201 if (count == 1)
202 free_devmap_managed_page(page);
203 else if (!count)
204 __put_page(page);
205
206 return true;
207}
208#else
209static bool __unpin_devmap_managed_user_page(struct page *page)
210{
211 return false;
212}
213#endif
214
215
216
217
218
219
220
221
222
223
224void unpin_user_page(struct page *page)
225{
226 int refs = 1;
227
228 page = compound_head(page);
229
230
231
232
233
234
235
236 if (__unpin_devmap_managed_user_page(page))
237 return;
238
239 if (hpage_pincount_available(page))
240 hpage_pincount_sub(page, 1);
241 else
242 refs = GUP_PIN_COUNTING_BIAS;
243
244 if (page_ref_sub_and_test(page, refs))
245 __put_page(page);
246
247 mod_node_page_state(page_pgdat(page), NR_FOLL_PIN_RELEASED, 1);
248}
249EXPORT_SYMBOL(unpin_user_page);
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273void unpin_user_pages_dirty_lock(struct page **pages, unsigned long npages,
274 bool make_dirty)
275{
276 unsigned long index;
277
278
279
280
281
282
283
284 if (!make_dirty) {
285 unpin_user_pages(pages, npages);
286 return;
287 }
288
289 for (index = 0; index < npages; index++) {
290 struct page *page = compound_head(pages[index]);
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311 if (!PageDirty(page))
312 set_page_dirty_lock(page);
313 unpin_user_page(page);
314 }
315}
316EXPORT_SYMBOL(unpin_user_pages_dirty_lock);
317
318
319
320
321
322
323
324
325
326
327void unpin_user_pages(struct page **pages, unsigned long npages)
328{
329 unsigned long index;
330
331
332
333
334
335
336 for (index = 0; index < npages; index++)
337 unpin_user_page(pages[index]);
338}
339EXPORT_SYMBOL(unpin_user_pages);
340
341#ifdef CONFIG_MMU
342static struct page *no_page_table(struct vm_area_struct *vma,
343 unsigned int flags)
344{
345
346
347
348
349
350
351
352
353 if ((flags & FOLL_DUMP) &&
354 (vma_is_anonymous(vma) || !vma->vm_ops->fault))
355 return ERR_PTR(-EFAULT);
356 return NULL;
357}
358
359static int follow_pfn_pte(struct vm_area_struct *vma, unsigned long address,
360 pte_t *pte, unsigned int flags)
361{
362
363 if (flags & FOLL_GET)
364 return -EFAULT;
365
366 if (flags & FOLL_TOUCH) {
367 pte_t entry = *pte;
368
369 if (flags & FOLL_WRITE)
370 entry = pte_mkdirty(entry);
371 entry = pte_mkyoung(entry);
372
373 if (!pte_same(*pte, entry)) {
374 set_pte_at(vma->vm_mm, address, pte, entry);
375 update_mmu_cache(vma, address, pte);
376 }
377 }
378
379
380 return -EEXIST;
381}
382
383
384
385
386
387static inline bool can_follow_write_pte(pte_t pte, unsigned int flags)
388{
389 return pte_write(pte) ||
390 ((flags & FOLL_FORCE) && (flags & FOLL_COW) && pte_dirty(pte));
391}
392
393static struct page *follow_page_pte(struct vm_area_struct *vma,
394 unsigned long address, pmd_t *pmd, unsigned int flags,
395 struct dev_pagemap **pgmap)
396{
397 struct mm_struct *mm = vma->vm_mm;
398 struct page *page;
399 spinlock_t *ptl;
400 pte_t *ptep, pte;
401 int ret;
402
403
404 if (WARN_ON_ONCE((flags & (FOLL_PIN | FOLL_GET)) ==
405 (FOLL_PIN | FOLL_GET)))
406 return ERR_PTR(-EINVAL);
407retry:
408 if (unlikely(pmd_bad(*pmd)))
409 return no_page_table(vma, flags);
410
411 ptep = pte_offset_map_lock(mm, pmd, address, &ptl);
412 pte = *ptep;
413 if (!pte_present(pte)) {
414 swp_entry_t entry;
415
416
417
418
419
420 if (likely(!(flags & FOLL_MIGRATION)))
421 goto no_page;
422 if (pte_none(pte))
423 goto no_page;
424 entry = pte_to_swp_entry(pte);
425 if (!is_migration_entry(entry))
426 goto no_page;
427 pte_unmap_unlock(ptep, ptl);
428 migration_entry_wait(mm, pmd, address);
429 goto retry;
430 }
431 if ((flags & FOLL_NUMA) && pte_protnone(pte))
432 goto no_page;
433 if ((flags & FOLL_WRITE) && !can_follow_write_pte(pte, flags)) {
434 pte_unmap_unlock(ptep, ptl);
435 return NULL;
436 }
437
438 page = vm_normal_page(vma, address, pte);
439 if (!page && pte_devmap(pte) && (flags & (FOLL_GET | FOLL_PIN))) {
440
441
442
443
444
445 *pgmap = get_dev_pagemap(pte_pfn(pte), *pgmap);
446 if (*pgmap)
447 page = pte_page(pte);
448 else
449 goto no_page;
450 } else if (unlikely(!page)) {
451 if (flags & FOLL_DUMP) {
452
453 page = ERR_PTR(-EFAULT);
454 goto out;
455 }
456
457 if (is_zero_pfn(pte_pfn(pte))) {
458 page = pte_page(pte);
459 } else {
460 ret = follow_pfn_pte(vma, address, ptep, flags);
461 page = ERR_PTR(ret);
462 goto out;
463 }
464 }
465
466 if (flags & FOLL_SPLIT && PageTransCompound(page)) {
467 get_page(page);
468 pte_unmap_unlock(ptep, ptl);
469 lock_page(page);
470 ret = split_huge_page(page);
471 unlock_page(page);
472 put_page(page);
473 if (ret)
474 return ERR_PTR(ret);
475 goto retry;
476 }
477
478
479 if (unlikely(!try_grab_page(page, flags))) {
480 page = ERR_PTR(-ENOMEM);
481 goto out;
482 }
483
484
485
486
487
488 if (flags & FOLL_PIN) {
489 ret = arch_make_page_accessible(page);
490 if (ret) {
491 unpin_user_page(page);
492 page = ERR_PTR(ret);
493 goto out;
494 }
495 }
496 if (flags & FOLL_TOUCH) {
497 if ((flags & FOLL_WRITE) &&
498 !pte_dirty(pte) && !PageDirty(page))
499 set_page_dirty(page);
500
501
502
503
504
505 mark_page_accessed(page);
506 }
507 if ((flags & FOLL_MLOCK) && (vma->vm_flags & VM_LOCKED)) {
508
509 if (PageTransCompound(page))
510 goto out;
511
512
513
514
515
516
517
518
519
520
521 if (page->mapping && trylock_page(page)) {
522 lru_add_drain();
523
524
525
526
527
528
529 mlock_vma_page(page);
530 unlock_page(page);
531 }
532 }
533out:
534 pte_unmap_unlock(ptep, ptl);
535 return page;
536no_page:
537 pte_unmap_unlock(ptep, ptl);
538 if (!pte_none(pte))
539 return NULL;
540 return no_page_table(vma, flags);
541}
542
543static struct page *follow_pmd_mask(struct vm_area_struct *vma,
544 unsigned long address, pud_t *pudp,
545 unsigned int flags,
546 struct follow_page_context *ctx)
547{
548 pmd_t *pmd, pmdval;
549 spinlock_t *ptl;
550 struct page *page;
551 struct mm_struct *mm = vma->vm_mm;
552
553 pmd = pmd_offset(pudp, address);
554
555
556
557
558 pmdval = READ_ONCE(*pmd);
559 if (pmd_none(pmdval))
560 return no_page_table(vma, flags);
561 if (pmd_huge(pmdval) && is_vm_hugetlb_page(vma)) {
562 page = follow_huge_pmd(mm, address, pmd, flags);
563 if (page)
564 return page;
565 return no_page_table(vma, flags);
566 }
567 if (is_hugepd(__hugepd(pmd_val(pmdval)))) {
568 page = follow_huge_pd(vma, address,
569 __hugepd(pmd_val(pmdval)), flags,
570 PMD_SHIFT);
571 if (page)
572 return page;
573 return no_page_table(vma, flags);
574 }
575retry:
576 if (!pmd_present(pmdval)) {
577 if (likely(!(flags & FOLL_MIGRATION)))
578 return no_page_table(vma, flags);
579 VM_BUG_ON(thp_migration_supported() &&
580 !is_pmd_migration_entry(pmdval));
581 if (is_pmd_migration_entry(pmdval))
582 pmd_migration_entry_wait(mm, pmd);
583 pmdval = READ_ONCE(*pmd);
584
585
586
587
588 if (pmd_none(pmdval))
589 return no_page_table(vma, flags);
590 goto retry;
591 }
592 if (pmd_devmap(pmdval)) {
593 ptl = pmd_lock(mm, pmd);
594 page = follow_devmap_pmd(vma, address, pmd, flags, &ctx->pgmap);
595 spin_unlock(ptl);
596 if (page)
597 return page;
598 }
599 if (likely(!pmd_trans_huge(pmdval)))
600 return follow_page_pte(vma, address, pmd, flags, &ctx->pgmap);
601
602 if ((flags & FOLL_NUMA) && pmd_protnone(pmdval))
603 return no_page_table(vma, flags);
604
605retry_locked:
606 ptl = pmd_lock(mm, pmd);
607 if (unlikely(pmd_none(*pmd))) {
608 spin_unlock(ptl);
609 return no_page_table(vma, flags);
610 }
611 if (unlikely(!pmd_present(*pmd))) {
612 spin_unlock(ptl);
613 if (likely(!(flags & FOLL_MIGRATION)))
614 return no_page_table(vma, flags);
615 pmd_migration_entry_wait(mm, pmd);
616 goto retry_locked;
617 }
618 if (unlikely(!pmd_trans_huge(*pmd))) {
619 spin_unlock(ptl);
620 return follow_page_pte(vma, address, pmd, flags, &ctx->pgmap);
621 }
622 if (flags & (FOLL_SPLIT | FOLL_SPLIT_PMD)) {
623 int ret;
624 page = pmd_page(*pmd);
625 if (is_huge_zero_page(page)) {
626 spin_unlock(ptl);
627 ret = 0;
628 split_huge_pmd(vma, pmd, address);
629 if (pmd_trans_unstable(pmd))
630 ret = -EBUSY;
631 } else if (flags & FOLL_SPLIT) {
632 if (unlikely(!try_get_page(page))) {
633 spin_unlock(ptl);
634 return ERR_PTR(-ENOMEM);
635 }
636 spin_unlock(ptl);
637 lock_page(page);
638 ret = split_huge_page(page);
639 unlock_page(page);
640 put_page(page);
641 if (pmd_none(*pmd))
642 return no_page_table(vma, flags);
643 } else {
644 spin_unlock(ptl);
645 split_huge_pmd(vma, pmd, address);
646 ret = pte_alloc(mm, pmd) ? -ENOMEM : 0;
647 }
648
649 return ret ? ERR_PTR(ret) :
650 follow_page_pte(vma, address, pmd, flags, &ctx->pgmap);
651 }
652 page = follow_trans_huge_pmd(vma, address, pmd, flags);
653 spin_unlock(ptl);
654 ctx->page_mask = HPAGE_PMD_NR - 1;
655 return page;
656}
657
658static struct page *follow_pud_mask(struct vm_area_struct *vma,
659 unsigned long address, p4d_t *p4dp,
660 unsigned int flags,
661 struct follow_page_context *ctx)
662{
663 pud_t *pud;
664 spinlock_t *ptl;
665 struct page *page;
666 struct mm_struct *mm = vma->vm_mm;
667
668 pud = pud_offset(p4dp, address);
669 if (pud_none(*pud))
670 return no_page_table(vma, flags);
671 if (pud_huge(*pud) && is_vm_hugetlb_page(vma)) {
672 page = follow_huge_pud(mm, address, pud, flags);
673 if (page)
674 return page;
675 return no_page_table(vma, flags);
676 }
677 if (is_hugepd(__hugepd(pud_val(*pud)))) {
678 page = follow_huge_pd(vma, address,
679 __hugepd(pud_val(*pud)), flags,
680 PUD_SHIFT);
681 if (page)
682 return page;
683 return no_page_table(vma, flags);
684 }
685 if (pud_devmap(*pud)) {
686 ptl = pud_lock(mm, pud);
687 page = follow_devmap_pud(vma, address, pud, flags, &ctx->pgmap);
688 spin_unlock(ptl);
689 if (page)
690 return page;
691 }
692 if (unlikely(pud_bad(*pud)))
693 return no_page_table(vma, flags);
694
695 return follow_pmd_mask(vma, address, pud, flags, ctx);
696}
697
698static struct page *follow_p4d_mask(struct vm_area_struct *vma,
699 unsigned long address, pgd_t *pgdp,
700 unsigned int flags,
701 struct follow_page_context *ctx)
702{
703 p4d_t *p4d;
704 struct page *page;
705
706 p4d = p4d_offset(pgdp, address);
707 if (p4d_none(*p4d))
708 return no_page_table(vma, flags);
709 BUILD_BUG_ON(p4d_huge(*p4d));
710 if (unlikely(p4d_bad(*p4d)))
711 return no_page_table(vma, flags);
712
713 if (is_hugepd(__hugepd(p4d_val(*p4d)))) {
714 page = follow_huge_pd(vma, address,
715 __hugepd(p4d_val(*p4d)), flags,
716 P4D_SHIFT);
717 if (page)
718 return page;
719 return no_page_table(vma, flags);
720 }
721 return follow_pud_mask(vma, address, p4d, flags, ctx);
722}
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743static struct page *follow_page_mask(struct vm_area_struct *vma,
744 unsigned long address, unsigned int flags,
745 struct follow_page_context *ctx)
746{
747 pgd_t *pgd;
748 struct page *page;
749 struct mm_struct *mm = vma->vm_mm;
750
751 ctx->page_mask = 0;
752
753
754 page = follow_huge_addr(mm, address, flags & FOLL_WRITE);
755 if (!IS_ERR(page)) {
756 WARN_ON_ONCE(flags & (FOLL_GET | FOLL_PIN));
757 return page;
758 }
759
760 pgd = pgd_offset(mm, address);
761
762 if (pgd_none(*pgd) || unlikely(pgd_bad(*pgd)))
763 return no_page_table(vma, flags);
764
765 if (pgd_huge(*pgd)) {
766 page = follow_huge_pgd(mm, address, pgd, flags);
767 if (page)
768 return page;
769 return no_page_table(vma, flags);
770 }
771 if (is_hugepd(__hugepd(pgd_val(*pgd)))) {
772 page = follow_huge_pd(vma, address,
773 __hugepd(pgd_val(*pgd)), flags,
774 PGDIR_SHIFT);
775 if (page)
776 return page;
777 return no_page_table(vma, flags);
778 }
779
780 return follow_p4d_mask(vma, address, pgd, flags, ctx);
781}
782
783struct page *follow_page(struct vm_area_struct *vma, unsigned long address,
784 unsigned int foll_flags)
785{
786 struct follow_page_context ctx = { NULL };
787 struct page *page;
788
789 page = follow_page_mask(vma, address, foll_flags, &ctx);
790 if (ctx.pgmap)
791 put_dev_pagemap(ctx.pgmap);
792 return page;
793}
794
795static int get_gate_page(struct mm_struct *mm, unsigned long address,
796 unsigned int gup_flags, struct vm_area_struct **vma,
797 struct page **page)
798{
799 pgd_t *pgd;
800 p4d_t *p4d;
801 pud_t *pud;
802 pmd_t *pmd;
803 pte_t *pte;
804 int ret = -EFAULT;
805
806
807 if (gup_flags & FOLL_WRITE)
808 return -EFAULT;
809 if (address > TASK_SIZE)
810 pgd = pgd_offset_k(address);
811 else
812 pgd = pgd_offset_gate(mm, address);
813 if (pgd_none(*pgd))
814 return -EFAULT;
815 p4d = p4d_offset(pgd, address);
816 if (p4d_none(*p4d))
817 return -EFAULT;
818 pud = pud_offset(p4d, address);
819 if (pud_none(*pud))
820 return -EFAULT;
821 pmd = pmd_offset(pud, address);
822 if (!pmd_present(*pmd))
823 return -EFAULT;
824 VM_BUG_ON(pmd_trans_huge(*pmd));
825 pte = pte_offset_map(pmd, address);
826 if (pte_none(*pte))
827 goto unmap;
828 *vma = get_gate_vma(mm);
829 if (!page)
830 goto out;
831 *page = vm_normal_page(*vma, address, *pte);
832 if (!*page) {
833 if ((gup_flags & FOLL_DUMP) || !is_zero_pfn(pte_pfn(*pte)))
834 goto unmap;
835 *page = pte_page(*pte);
836 }
837 if (unlikely(!try_grab_page(*page, gup_flags))) {
838 ret = -ENOMEM;
839 goto unmap;
840 }
841out:
842 ret = 0;
843unmap:
844 pte_unmap(pte);
845 return ret;
846}
847
848
849
850
851
852
853static int faultin_page(struct vm_area_struct *vma,
854 unsigned long address, unsigned int *flags, int *locked)
855{
856 unsigned int fault_flags = 0;
857 vm_fault_t ret;
858
859
860 if ((*flags & (FOLL_POPULATE | FOLL_MLOCK)) == FOLL_MLOCK)
861 return -ENOENT;
862 if (*flags & FOLL_WRITE)
863 fault_flags |= FAULT_FLAG_WRITE;
864 if (*flags & FOLL_REMOTE)
865 fault_flags |= FAULT_FLAG_REMOTE;
866 if (locked)
867 fault_flags |= FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
868 if (*flags & FOLL_NOWAIT)
869 fault_flags |= FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_RETRY_NOWAIT;
870 if (*flags & FOLL_TRIED) {
871
872
873
874
875 fault_flags |= FAULT_FLAG_TRIED;
876 }
877
878 ret = handle_mm_fault(vma, address, fault_flags, NULL);
879 if (ret & VM_FAULT_ERROR) {
880 int err = vm_fault_to_errno(ret, *flags);
881
882 if (err)
883 return err;
884 BUG();
885 }
886
887 if (ret & VM_FAULT_RETRY) {
888 if (locked && !(fault_flags & FAULT_FLAG_RETRY_NOWAIT))
889 *locked = 0;
890 return -EBUSY;
891 }
892
893
894
895
896
897
898
899
900
901
902 if ((ret & VM_FAULT_WRITE) && !(vma->vm_flags & VM_WRITE))
903 *flags |= FOLL_COW;
904 return 0;
905}
906
907static int check_vma_flags(struct vm_area_struct *vma, unsigned long gup_flags)
908{
909 vm_flags_t vm_flags = vma->vm_flags;
910 int write = (gup_flags & FOLL_WRITE);
911 int foreign = (gup_flags & FOLL_REMOTE);
912
913 if (vm_flags & (VM_IO | VM_PFNMAP))
914 return -EFAULT;
915
916 if (gup_flags & FOLL_ANON && !vma_is_anonymous(vma))
917 return -EFAULT;
918
919 if (write) {
920 if (!(vm_flags & VM_WRITE)) {
921 if (!(gup_flags & FOLL_FORCE))
922 return -EFAULT;
923
924
925
926
927
928
929
930
931
932 if (!is_cow_mapping(vm_flags))
933 return -EFAULT;
934 }
935 } else if (!(vm_flags & VM_READ)) {
936 if (!(gup_flags & FOLL_FORCE))
937 return -EFAULT;
938
939
940
941
942 if (!(vm_flags & VM_MAYREAD))
943 return -EFAULT;
944 }
945
946
947
948
949 if (!arch_vma_access_permitted(vma, write, false, foreign))
950 return -EFAULT;
951 return 0;
952}
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
1001
1002
1003
1004
1005
1006
1007
1008
1009
1010
1011
1012
1013
1014static long __get_user_pages(struct mm_struct *mm,
1015 unsigned long start, unsigned long nr_pages,
1016 unsigned int gup_flags, struct page **pages,
1017 struct vm_area_struct **vmas, int *locked)
1018{
1019 long ret = 0, i = 0;
1020 struct vm_area_struct *vma = NULL;
1021 struct follow_page_context ctx = { NULL };
1022
1023 if (!nr_pages)
1024 return 0;
1025
1026 start = untagged_addr(start);
1027
1028 VM_BUG_ON(!!pages != !!(gup_flags & (FOLL_GET | FOLL_PIN)));
1029
1030
1031
1032
1033
1034
1035 if (!(gup_flags & FOLL_FORCE))
1036 gup_flags |= FOLL_NUMA;
1037
1038 do {
1039 struct page *page;
1040 unsigned int foll_flags = gup_flags;
1041 unsigned int page_increm;
1042
1043
1044 if (!vma || start >= vma->vm_end) {
1045 vma = find_extend_vma(mm, start);
1046 if (!vma && in_gate_area(mm, start)) {
1047 ret = get_gate_page(mm, start & PAGE_MASK,
1048 gup_flags, &vma,
1049 pages ? &pages[i] : NULL);
1050 if (ret)
1051 goto out;
1052 ctx.page_mask = 0;
1053 goto next_page;
1054 }
1055
1056 if (!vma || check_vma_flags(vma, gup_flags)) {
1057 ret = -EFAULT;
1058 goto out;
1059 }
1060 if (is_vm_hugetlb_page(vma)) {
1061 i = follow_hugetlb_page(mm, vma, pages, vmas,
1062 &start, &nr_pages, i,
1063 gup_flags, locked);
1064 if (locked && *locked == 0) {
1065
1066
1067
1068
1069
1070 BUG_ON(gup_flags & FOLL_NOWAIT);
1071 BUG_ON(ret != 0);
1072 goto out;
1073 }
1074 continue;
1075 }
1076 }
1077retry:
1078
1079
1080
1081
1082 if (fatal_signal_pending(current)) {
1083 ret = -EINTR;
1084 goto out;
1085 }
1086 cond_resched();
1087
1088 page = follow_page_mask(vma, start, foll_flags, &ctx);
1089 if (!page) {
1090 ret = faultin_page(vma, start, &foll_flags, locked);
1091 switch (ret) {
1092 case 0:
1093 goto retry;
1094 case -EBUSY:
1095 ret = 0;
1096 fallthrough;
1097 case -EFAULT:
1098 case -ENOMEM:
1099 case -EHWPOISON:
1100 goto out;
1101 case -ENOENT:
1102 goto next_page;
1103 }
1104 BUG();
1105 } else if (PTR_ERR(page) == -EEXIST) {
1106
1107
1108
1109
1110 goto next_page;
1111 } else if (IS_ERR(page)) {
1112 ret = PTR_ERR(page);
1113 goto out;
1114 }
1115 if (pages) {
1116 pages[i] = page;
1117 flush_anon_page(vma, page, start);
1118 flush_dcache_page(page);
1119 ctx.page_mask = 0;
1120 }
1121next_page:
1122 if (vmas) {
1123 vmas[i] = vma;
1124 ctx.page_mask = 0;
1125 }
1126 page_increm = 1 + (~(start >> PAGE_SHIFT) & ctx.page_mask);
1127 if (page_increm > nr_pages)
1128 page_increm = nr_pages;
1129 i += page_increm;
1130 start += page_increm * PAGE_SIZE;
1131 nr_pages -= page_increm;
1132 } while (nr_pages);
1133out:
1134 if (ctx.pgmap)
1135 put_dev_pagemap(ctx.pgmap);
1136 return i ? i : ret;
1137}
1138
1139static bool vma_permits_fault(struct vm_area_struct *vma,
1140 unsigned int fault_flags)
1141{
1142 bool write = !!(fault_flags & FAULT_FLAG_WRITE);
1143 bool foreign = !!(fault_flags & FAULT_FLAG_REMOTE);
1144 vm_flags_t vm_flags = write ? VM_WRITE : VM_READ;
1145
1146 if (!(vm_flags & vma->vm_flags))
1147 return false;
1148
1149
1150
1151
1152
1153
1154
1155
1156 if (!arch_vma_access_permitted(vma, write, false, foreign))
1157 return false;
1158
1159 return true;
1160}
1161
1162
1163
1164
1165
1166
1167
1168
1169
1170
1171
1172
1173
1174
1175
1176
1177
1178
1179
1180
1181
1182
1183
1184
1185
1186
1187
1188
1189
1190
1191int fixup_user_fault(struct mm_struct *mm,
1192 unsigned long address, unsigned int fault_flags,
1193 bool *unlocked)
1194{
1195 struct vm_area_struct *vma;
1196 vm_fault_t ret, major = 0;
1197
1198 address = untagged_addr(address);
1199
1200 if (unlocked)
1201 fault_flags |= FAULT_FLAG_ALLOW_RETRY | FAULT_FLAG_KILLABLE;
1202
1203retry:
1204 vma = find_extend_vma(mm, address);
1205 if (!vma || address < vma->vm_start)
1206 return -EFAULT;
1207
1208 if (!vma_permits_fault(vma, fault_flags))
1209 return -EFAULT;
1210
1211 if ((fault_flags & FAULT_FLAG_KILLABLE) &&
1212 fatal_signal_pending(current))
1213 return -EINTR;
1214
1215 ret = handle_mm_fault(vma, address, fault_flags, NULL);
1216 major |= ret & VM_FAULT_MAJOR;
1217 if (ret & VM_FAULT_ERROR) {
1218 int err = vm_fault_to_errno(ret, 0);
1219
1220 if (err)
1221 return err;
1222 BUG();
1223 }
1224
1225 if (ret & VM_FAULT_RETRY) {
1226 mmap_read_lock(mm);
1227 *unlocked = true;
1228 fault_flags |= FAULT_FLAG_TRIED;
1229 goto retry;
1230 }
1231
1232 return 0;
1233}
1234EXPORT_SYMBOL_GPL(fixup_user_fault);
1235
1236
1237
1238
1239
1240static __always_inline long __get_user_pages_locked(struct mm_struct *mm,
1241 unsigned long start,
1242 unsigned long nr_pages,
1243 struct page **pages,
1244 struct vm_area_struct **vmas,
1245 int *locked,
1246 unsigned int flags)
1247{
1248 long ret, pages_done;
1249 bool lock_dropped;
1250
1251 if (locked) {
1252
1253 BUG_ON(vmas);
1254
1255 BUG_ON(*locked != 1);
1256 }
1257
1258 if (flags & FOLL_PIN)
1259 atomic_set(&mm->has_pinned, 1);
1260
1261
1262
1263
1264
1265
1266
1267
1268
1269
1270 if (pages && !(flags & FOLL_PIN))
1271 flags |= FOLL_GET;
1272
1273 pages_done = 0;
1274 lock_dropped = false;
1275 for (;;) {
1276 ret = __get_user_pages(mm, start, nr_pages, flags, pages,
1277 vmas, locked);
1278 if (!locked)
1279
1280 return ret;
1281
1282
1283 if (!*locked) {
1284 BUG_ON(ret < 0);
1285 BUG_ON(ret >= nr_pages);
1286 }
1287
1288 if (ret > 0) {
1289 nr_pages -= ret;
1290 pages_done += ret;
1291 if (!nr_pages)
1292 break;
1293 }
1294 if (*locked) {
1295
1296
1297
1298
1299 if (!pages_done)
1300 pages_done = ret;
1301 break;
1302 }
1303
1304
1305
1306
1307 if (likely(pages))
1308 pages += ret;
1309 start += ret << PAGE_SHIFT;
1310 lock_dropped = true;
1311
1312retry:
1313
1314
1315
1316
1317
1318
1319
1320
1321 if (fatal_signal_pending(current)) {
1322 if (!pages_done)
1323 pages_done = -EINTR;
1324 break;
1325 }
1326
1327 ret = mmap_read_lock_killable(mm);
1328 if (ret) {
1329 BUG_ON(ret > 0);
1330 if (!pages_done)
1331 pages_done = ret;
1332 break;
1333 }
1334
1335 *locked = 1;
1336 ret = __get_user_pages(mm, start, 1, flags | FOLL_TRIED,
1337 pages, NULL, locked);
1338 if (!*locked) {
1339
1340 BUG_ON(ret != 0);
1341 goto retry;
1342 }
1343 if (ret != 1) {
1344 BUG_ON(ret > 1);
1345 if (!pages_done)
1346 pages_done = ret;
1347 break;
1348 }
1349 nr_pages--;
1350 pages_done++;
1351 if (!nr_pages)
1352 break;
1353 if (likely(pages))
1354 pages++;
1355 start += PAGE_SIZE;
1356 }
1357 if (lock_dropped && *locked) {
1358
1359
1360
1361
1362 mmap_read_unlock(mm);
1363 *locked = 0;
1364 }
1365 return pages_done;
1366}
1367
1368
1369
1370
1371
1372
1373
1374
1375
1376
1377
1378
1379
1380
1381
1382
1383
1384
1385
1386
1387
1388long populate_vma_page_range(struct vm_area_struct *vma,
1389 unsigned long start, unsigned long end, int *locked)
1390{
1391 struct mm_struct *mm = vma->vm_mm;
1392 unsigned long nr_pages = (end - start) / PAGE_SIZE;
1393 int gup_flags;
1394
1395 VM_BUG_ON(start & ~PAGE_MASK);
1396 VM_BUG_ON(end & ~PAGE_MASK);
1397 VM_BUG_ON_VMA(start < vma->vm_start, vma);
1398 VM_BUG_ON_VMA(end > vma->vm_end, vma);
1399 mmap_assert_locked(mm);
1400
1401 gup_flags = FOLL_TOUCH | FOLL_POPULATE | FOLL_MLOCK;
1402 if (vma->vm_flags & VM_LOCKONFAULT)
1403 gup_flags &= ~FOLL_POPULATE;
1404
1405
1406
1407
1408
1409 if ((vma->vm_flags & (VM_WRITE | VM_SHARED)) == VM_WRITE)
1410 gup_flags |= FOLL_WRITE;
1411
1412
1413
1414
1415
1416 if (vma_is_accessible(vma))
1417 gup_flags |= FOLL_FORCE;
1418
1419
1420
1421
1422
1423 return __get_user_pages(mm, start, nr_pages, gup_flags,
1424 NULL, NULL, locked);
1425}
1426
1427
1428
1429
1430
1431
1432
1433
1434int __mm_populate(unsigned long start, unsigned long len, int ignore_errors)
1435{
1436 struct mm_struct *mm = current->mm;
1437 unsigned long end, nstart, nend;
1438 struct vm_area_struct *vma = NULL;
1439 int locked = 0;
1440 long ret = 0;
1441
1442 end = start + len;
1443
1444 for (nstart = start; nstart < end; nstart = nend) {
1445
1446
1447
1448
1449 if (!locked) {
1450 locked = 1;
1451 mmap_read_lock(mm);
1452 vma = find_vma(mm, nstart);
1453 } else if (nstart >= vma->vm_end)
1454 vma = vma->vm_next;
1455 if (!vma || vma->vm_start >= end)
1456 break;
1457
1458
1459
1460
1461 nend = min(end, vma->vm_end);
1462 if (vma->vm_flags & (VM_IO | VM_PFNMAP))
1463 continue;
1464 if (nstart < vma->vm_start)
1465 nstart = vma->vm_start;
1466
1467
1468
1469
1470
1471 ret = populate_vma_page_range(vma, nstart, nend, &locked);
1472 if (ret < 0) {
1473 if (ignore_errors) {
1474 ret = 0;
1475 continue;
1476 }
1477 break;
1478 }
1479 nend = nstart + ret * PAGE_SIZE;
1480 ret = 0;
1481 }
1482 if (locked)
1483 mmap_read_unlock(mm);
1484 return ret;
1485}
1486
1487
1488
1489
1490
1491
1492
1493
1494
1495
1496
1497
1498
1499
1500
1501#ifdef CONFIG_ELF_CORE
1502struct page *get_dump_page(unsigned long addr)
1503{
1504 struct vm_area_struct *vma;
1505 struct page *page;
1506
1507 if (__get_user_pages(current->mm, addr, 1,
1508 FOLL_FORCE | FOLL_DUMP | FOLL_GET, &page, &vma,
1509 NULL) < 1)
1510 return NULL;
1511 flush_cache_page(vma, addr, page_to_pfn(page));
1512 return page;
1513}
1514#endif
1515#else
1516static long __get_user_pages_locked(struct mm_struct *mm, unsigned long start,
1517 unsigned long nr_pages, struct page **pages,
1518 struct vm_area_struct **vmas, int *locked,
1519 unsigned int foll_flags)
1520{
1521 struct vm_area_struct *vma;
1522 unsigned long vm_flags;
1523 int i;
1524
1525
1526
1527
1528 vm_flags = (foll_flags & FOLL_WRITE) ?
1529 (VM_WRITE | VM_MAYWRITE) : (VM_READ | VM_MAYREAD);
1530 vm_flags &= (foll_flags & FOLL_FORCE) ?
1531 (VM_MAYREAD | VM_MAYWRITE) : (VM_READ | VM_WRITE);
1532
1533 for (i = 0; i < nr_pages; i++) {
1534 vma = find_vma(mm, start);
1535 if (!vma)
1536 goto finish_or_fault;
1537
1538
1539 if ((vma->vm_flags & (VM_IO | VM_PFNMAP)) ||
1540 !(vm_flags & vma->vm_flags))
1541 goto finish_or_fault;
1542
1543 if (pages) {
1544 pages[i] = virt_to_page(start);
1545 if (pages[i])
1546 get_page(pages[i]);
1547 }
1548 if (vmas)
1549 vmas[i] = vma;
1550 start = (start + PAGE_SIZE) & PAGE_MASK;
1551 }
1552
1553 return i;
1554
1555finish_or_fault:
1556 return i ? : -EFAULT;
1557}
1558#endif
1559
1560#if defined(CONFIG_FS_DAX) || defined (CONFIG_CMA)
1561static bool check_dax_vmas(struct vm_area_struct **vmas, long nr_pages)
1562{
1563 long i;
1564 struct vm_area_struct *vma_prev = NULL;
1565
1566 for (i = 0; i < nr_pages; i++) {
1567 struct vm_area_struct *vma = vmas[i];
1568
1569 if (vma == vma_prev)
1570 continue;
1571
1572 vma_prev = vma;
1573
1574 if (vma_is_fsdax(vma))
1575 return true;
1576 }
1577 return false;
1578}
1579
1580#ifdef CONFIG_CMA
1581static long check_and_migrate_cma_pages(struct mm_struct *mm,
1582 unsigned long start,
1583 unsigned long nr_pages,
1584 struct page **pages,
1585 struct vm_area_struct **vmas,
1586 unsigned int gup_flags)
1587{
1588 unsigned long i;
1589 unsigned long step;
1590 bool drain_allow = true;
1591 bool migrate_allow = true;
1592 LIST_HEAD(cma_page_list);
1593 long ret = nr_pages;
1594 struct migration_target_control mtc = {
1595 .nid = NUMA_NO_NODE,
1596 .gfp_mask = GFP_USER | __GFP_MOVABLE | __GFP_NOWARN,
1597 };
1598
1599check_again:
1600 for (i = 0; i < nr_pages;) {
1601
1602 struct page *head = compound_head(pages[i]);
1603
1604
1605
1606
1607
1608 step = compound_nr(head) - (pages[i] - head);
1609
1610
1611
1612
1613
1614 if (is_migrate_cma_page(head)) {
1615 if (PageHuge(head))
1616 isolate_huge_page(head, &cma_page_list);
1617 else {
1618 if (!PageLRU(head) && drain_allow) {
1619 lru_add_drain_all();
1620 drain_allow = false;
1621 }
1622
1623 if (!isolate_lru_page(head)) {
1624 list_add_tail(&head->lru, &cma_page_list);
1625 mod_node_page_state(page_pgdat(head),
1626 NR_ISOLATED_ANON +
1627 page_is_file_lru(head),
1628 thp_nr_pages(head));
1629 }
1630 }
1631 }
1632
1633 i += step;
1634 }
1635
1636 if (!list_empty(&cma_page_list)) {
1637
1638
1639
1640 for (i = 0; i < nr_pages; i++)
1641 put_page(pages[i]);
1642
1643 if (migrate_pages(&cma_page_list, alloc_migration_target, NULL,
1644 (unsigned long)&mtc, MIGRATE_SYNC, MR_CONTIG_RANGE)) {
1645
1646
1647
1648
1649 migrate_allow = false;
1650
1651 if (!list_empty(&cma_page_list))
1652 putback_movable_pages(&cma_page_list);
1653 }
1654
1655
1656
1657
1658
1659 ret = __get_user_pages_locked(mm, start, nr_pages,
1660 pages, vmas, NULL,
1661 gup_flags);
1662
1663 if ((ret > 0) && migrate_allow) {
1664 nr_pages = ret;
1665 drain_allow = true;
1666 goto check_again;
1667 }
1668 }
1669
1670 return ret;
1671}
1672#else
1673static long check_and_migrate_cma_pages(struct mm_struct *mm,
1674 unsigned long start,
1675 unsigned long nr_pages,
1676 struct page **pages,
1677 struct vm_area_struct **vmas,
1678 unsigned int gup_flags)
1679{
1680 return nr_pages;
1681}
1682#endif
1683
1684
1685
1686
1687
1688static long __gup_longterm_locked(struct mm_struct *mm,
1689 unsigned long start,
1690 unsigned long nr_pages,
1691 struct page **pages,
1692 struct vm_area_struct **vmas,
1693 unsigned int gup_flags)
1694{
1695 struct vm_area_struct **vmas_tmp = vmas;
1696 unsigned long flags = 0;
1697 long rc, i;
1698
1699 if (gup_flags & FOLL_LONGTERM) {
1700 if (!pages)
1701 return -EINVAL;
1702
1703 if (!vmas_tmp) {
1704 vmas_tmp = kcalloc(nr_pages,
1705 sizeof(struct vm_area_struct *),
1706 GFP_KERNEL);
1707 if (!vmas_tmp)
1708 return -ENOMEM;
1709 }
1710 flags = memalloc_nocma_save();
1711 }
1712
1713 rc = __get_user_pages_locked(mm, start, nr_pages, pages,
1714 vmas_tmp, NULL, gup_flags);
1715
1716 if (gup_flags & FOLL_LONGTERM) {
1717 if (rc < 0)
1718 goto out;
1719
1720 if (check_dax_vmas(vmas_tmp, rc)) {
1721 for (i = 0; i < rc; i++)
1722 put_page(pages[i]);
1723 rc = -EOPNOTSUPP;
1724 goto out;
1725 }
1726
1727 rc = check_and_migrate_cma_pages(mm, start, rc, pages,
1728 vmas_tmp, gup_flags);
1729out:
1730 memalloc_nocma_restore(flags);
1731 }
1732
1733 if (vmas_tmp != vmas)
1734 kfree(vmas_tmp);
1735 return rc;
1736}
1737#else
1738static __always_inline long __gup_longterm_locked(struct mm_struct *mm,
1739 unsigned long start,
1740 unsigned long nr_pages,
1741 struct page **pages,
1742 struct vm_area_struct **vmas,
1743 unsigned int flags)
1744{
1745 return __get_user_pages_locked(mm, start, nr_pages, pages, vmas,
1746 NULL, flags);
1747}
1748#endif
1749
1750#ifdef CONFIG_MMU
1751static long __get_user_pages_remote(struct mm_struct *mm,
1752 unsigned long start, unsigned long nr_pages,
1753 unsigned int gup_flags, struct page **pages,
1754 struct vm_area_struct **vmas, int *locked)
1755{
1756
1757
1758
1759
1760
1761
1762
1763 if (gup_flags & FOLL_LONGTERM) {
1764 if (WARN_ON_ONCE(locked))
1765 return -EINVAL;
1766
1767
1768
1769
1770 return __gup_longterm_locked(mm, start, nr_pages, pages,
1771 vmas, gup_flags | FOLL_TOUCH |
1772 FOLL_REMOTE);
1773 }
1774
1775 return __get_user_pages_locked(mm, start, nr_pages, pages, vmas,
1776 locked,
1777 gup_flags | FOLL_TOUCH | FOLL_REMOTE);
1778}
1779
1780
1781
1782
1783
1784
1785
1786
1787
1788
1789
1790
1791
1792
1793
1794
1795
1796
1797
1798
1799
1800
1801
1802
1803
1804
1805
1806
1807
1808
1809
1810
1811
1812
1813
1814
1815
1816
1817
1818
1819
1820
1821
1822
1823
1824
1825
1826
1827
1828
1829
1830
1831
1832
1833
1834
1835
1836
1837
1838
1839
1840long get_user_pages_remote(struct mm_struct *mm,
1841 unsigned long start, unsigned long nr_pages,
1842 unsigned int gup_flags, struct page **pages,
1843 struct vm_area_struct **vmas, int *locked)
1844{
1845
1846
1847
1848
1849 if (WARN_ON_ONCE(gup_flags & FOLL_PIN))
1850 return -EINVAL;
1851
1852 return __get_user_pages_remote(mm, start, nr_pages, gup_flags,
1853 pages, vmas, locked);
1854}
1855EXPORT_SYMBOL(get_user_pages_remote);
1856
1857#else
1858long get_user_pages_remote(struct mm_struct *mm,
1859 unsigned long start, unsigned long nr_pages,
1860 unsigned int gup_flags, struct page **pages,
1861 struct vm_area_struct **vmas, int *locked)
1862{
1863 return 0;
1864}
1865
1866static long __get_user_pages_remote(struct mm_struct *mm,
1867 unsigned long start, unsigned long nr_pages,
1868 unsigned int gup_flags, struct page **pages,
1869 struct vm_area_struct **vmas, int *locked)
1870{
1871 return 0;
1872}
1873#endif
1874
1875
1876
1877
1878
1879
1880
1881
1882
1883
1884
1885
1886
1887
1888
1889
1890
1891long get_user_pages(unsigned long start, unsigned long nr_pages,
1892 unsigned int gup_flags, struct page **pages,
1893 struct vm_area_struct **vmas)
1894{
1895
1896
1897
1898
1899 if (WARN_ON_ONCE(gup_flags & FOLL_PIN))
1900 return -EINVAL;
1901
1902 return __gup_longterm_locked(current->mm, start, nr_pages,
1903 pages, vmas, gup_flags | FOLL_TOUCH);
1904}
1905EXPORT_SYMBOL(get_user_pages);
1906
1907
1908
1909
1910
1911
1912
1913
1914
1915
1916
1917
1918
1919
1920
1921
1922
1923
1924
1925
1926
1927
1928
1929
1930
1931
1932
1933
1934
1935
1936
1937
1938
1939long get_user_pages_locked(unsigned long start, unsigned long nr_pages,
1940 unsigned int gup_flags, struct page **pages,
1941 int *locked)
1942{
1943
1944
1945
1946
1947
1948
1949 if (WARN_ON_ONCE(gup_flags & FOLL_LONGTERM))
1950 return -EINVAL;
1951
1952
1953
1954
1955 if (WARN_ON_ONCE(gup_flags & FOLL_PIN))
1956 return -EINVAL;
1957
1958 return __get_user_pages_locked(current->mm, start, nr_pages,
1959 pages, NULL, locked,
1960 gup_flags | FOLL_TOUCH);
1961}
1962EXPORT_SYMBOL(get_user_pages_locked);
1963
1964
1965
1966
1967
1968
1969
1970
1971
1972
1973
1974
1975
1976
1977
1978
1979long get_user_pages_unlocked(unsigned long start, unsigned long nr_pages,
1980 struct page **pages, unsigned int gup_flags)
1981{
1982 struct mm_struct *mm = current->mm;
1983 int locked = 1;
1984 long ret;
1985
1986
1987
1988
1989
1990
1991
1992 if (WARN_ON_ONCE(gup_flags & FOLL_LONGTERM))
1993 return -EINVAL;
1994
1995 mmap_read_lock(mm);
1996 ret = __get_user_pages_locked(mm, start, nr_pages, pages, NULL,
1997 &locked, gup_flags | FOLL_TOUCH);
1998 if (locked)
1999 mmap_read_unlock(mm);
2000 return ret;
2001}
2002EXPORT_SYMBOL(get_user_pages_unlocked);
2003
2004
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
2025
2026
2027
2028
2029
2030
2031
2032
2033
2034
2035
2036
2037#ifdef CONFIG_HAVE_FAST_GUP
2038
2039static void put_compound_head(struct page *page, int refs, unsigned int flags)
2040{
2041 if (flags & FOLL_PIN) {
2042 mod_node_page_state(page_pgdat(page), NR_FOLL_PIN_RELEASED,
2043 refs);
2044
2045 if (hpage_pincount_available(page))
2046 hpage_pincount_sub(page, refs);
2047 else
2048 refs *= GUP_PIN_COUNTING_BIAS;
2049 }
2050
2051 VM_BUG_ON_PAGE(page_ref_count(page) < refs, page);
2052
2053
2054
2055
2056 if (refs > 1)
2057 page_ref_sub(page, refs - 1);
2058 put_page(page);
2059}
2060
2061#ifdef CONFIG_GUP_GET_PTE_LOW_HIGH
2062
2063
2064
2065
2066
2067
2068
2069
2070
2071
2072
2073
2074
2075
2076
2077
2078
2079
2080
2081
2082
2083
2084
2085
2086
2087
2088
2089
2090
2091
2092
2093
2094static inline pte_t gup_get_pte(pte_t *ptep)
2095{
2096 pte_t pte;
2097
2098 do {
2099 pte.pte_low = ptep->pte_low;
2100 smp_rmb();
2101 pte.pte_high = ptep->pte_high;
2102 smp_rmb();
2103 } while (unlikely(pte.pte_low != ptep->pte_low));
2104
2105 return pte;
2106}
2107#else
2108
2109
2110
2111static inline pte_t gup_get_pte(pte_t *ptep)
2112{
2113 return ptep_get(ptep);
2114}
2115#endif
2116
2117static void __maybe_unused undo_dev_pagemap(int *nr, int nr_start,
2118 unsigned int flags,
2119 struct page **pages)
2120{
2121 while ((*nr) - nr_start) {
2122 struct page *page = pages[--(*nr)];
2123
2124 ClearPageReferenced(page);
2125 if (flags & FOLL_PIN)
2126 unpin_user_page(page);
2127 else
2128 put_page(page);
2129 }
2130}
2131
2132#ifdef CONFIG_ARCH_HAS_PTE_SPECIAL
2133static int gup_pte_range(pmd_t pmd, unsigned long addr, unsigned long end,
2134 unsigned int flags, struct page **pages, int *nr)
2135{
2136 struct dev_pagemap *pgmap = NULL;
2137 int nr_start = *nr, ret = 0;
2138 pte_t *ptep, *ptem;
2139
2140 ptem = ptep = pte_offset_map(&pmd, addr);
2141 do {
2142 pte_t pte = gup_get_pte(ptep);
2143 struct page *head, *page;
2144
2145
2146
2147
2148
2149 if (pte_protnone(pte))
2150 goto pte_unmap;
2151
2152 if (!pte_access_permitted(pte, flags & FOLL_WRITE))
2153 goto pte_unmap;
2154
2155 if (pte_devmap(pte)) {
2156 if (unlikely(flags & FOLL_LONGTERM))
2157 goto pte_unmap;
2158
2159 pgmap = get_dev_pagemap(pte_pfn(pte), pgmap);
2160 if (unlikely(!pgmap)) {
2161 undo_dev_pagemap(nr, nr_start, flags, pages);
2162 goto pte_unmap;
2163 }
2164 } else if (pte_special(pte))
2165 goto pte_unmap;
2166
2167 VM_BUG_ON(!pfn_valid(pte_pfn(pte)));
2168 page = pte_page(pte);
2169
2170 head = try_grab_compound_head(page, 1, flags);
2171 if (!head)
2172 goto pte_unmap;
2173
2174 if (unlikely(pte_val(pte) != pte_val(*ptep))) {
2175 put_compound_head(head, 1, flags);
2176 goto pte_unmap;
2177 }
2178
2179 VM_BUG_ON_PAGE(compound_head(page) != head, page);
2180
2181
2182
2183
2184
2185
2186
2187 if (flags & FOLL_PIN) {
2188 ret = arch_make_page_accessible(page);
2189 if (ret) {
2190 unpin_user_page(page);
2191 goto pte_unmap;
2192 }
2193 }
2194 SetPageReferenced(page);
2195 pages[*nr] = page;
2196 (*nr)++;
2197
2198 } while (ptep++, addr += PAGE_SIZE, addr != end);
2199
2200 ret = 1;
2201
2202pte_unmap:
2203 if (pgmap)
2204 put_dev_pagemap(pgmap);
2205 pte_unmap(ptem);
2206 return ret;
2207}
2208#else
2209
2210
2211
2212
2213
2214
2215
2216
2217
2218
2219static int gup_pte_range(pmd_t pmd, unsigned long addr, unsigned long end,
2220 unsigned int flags, struct page **pages, int *nr)
2221{
2222 return 0;
2223}
2224#endif
2225
2226#if defined(CONFIG_ARCH_HAS_PTE_DEVMAP) && defined(CONFIG_TRANSPARENT_HUGEPAGE)
2227static int __gup_device_huge(unsigned long pfn, unsigned long addr,
2228 unsigned long end, unsigned int flags,
2229 struct page **pages, int *nr)
2230{
2231 int nr_start = *nr;
2232 struct dev_pagemap *pgmap = NULL;
2233
2234 do {
2235 struct page *page = pfn_to_page(pfn);
2236
2237 pgmap = get_dev_pagemap(pfn, pgmap);
2238 if (unlikely(!pgmap)) {
2239 undo_dev_pagemap(nr, nr_start, flags, pages);
2240 return 0;
2241 }
2242 SetPageReferenced(page);
2243 pages[*nr] = page;
2244 if (unlikely(!try_grab_page(page, flags))) {
2245 undo_dev_pagemap(nr, nr_start, flags, pages);
2246 return 0;
2247 }
2248 (*nr)++;
2249 pfn++;
2250 } while (addr += PAGE_SIZE, addr != end);
2251
2252 if (pgmap)
2253 put_dev_pagemap(pgmap);
2254 return 1;
2255}
2256
2257static int __gup_device_huge_pmd(pmd_t orig, pmd_t *pmdp, unsigned long addr,
2258 unsigned long end, unsigned int flags,
2259 struct page **pages, int *nr)
2260{
2261 unsigned long fault_pfn;
2262 int nr_start = *nr;
2263
2264 fault_pfn = pmd_pfn(orig) + ((addr & ~PMD_MASK) >> PAGE_SHIFT);
2265 if (!__gup_device_huge(fault_pfn, addr, end, flags, pages, nr))
2266 return 0;
2267
2268 if (unlikely(pmd_val(orig) != pmd_val(*pmdp))) {
2269 undo_dev_pagemap(nr, nr_start, flags, pages);
2270 return 0;
2271 }
2272 return 1;
2273}
2274
2275static int __gup_device_huge_pud(pud_t orig, pud_t *pudp, unsigned long addr,
2276 unsigned long end, unsigned int flags,
2277 struct page **pages, int *nr)
2278{
2279 unsigned long fault_pfn;
2280 int nr_start = *nr;
2281
2282 fault_pfn = pud_pfn(orig) + ((addr & ~PUD_MASK) >> PAGE_SHIFT);
2283 if (!__gup_device_huge(fault_pfn, addr, end, flags, pages, nr))
2284 return 0;
2285
2286 if (unlikely(pud_val(orig) != pud_val(*pudp))) {
2287 undo_dev_pagemap(nr, nr_start, flags, pages);
2288 return 0;
2289 }
2290 return 1;
2291}
2292#else
2293static int __gup_device_huge_pmd(pmd_t orig, pmd_t *pmdp, unsigned long addr,
2294 unsigned long end, unsigned int flags,
2295 struct page **pages, int *nr)
2296{
2297 BUILD_BUG();
2298 return 0;
2299}
2300
2301static int __gup_device_huge_pud(pud_t pud, pud_t *pudp, unsigned long addr,
2302 unsigned long end, unsigned int flags,
2303 struct page **pages, int *nr)
2304{
2305 BUILD_BUG();
2306 return 0;
2307}
2308#endif
2309
2310static int record_subpages(struct page *page, unsigned long addr,
2311 unsigned long end, struct page **pages)
2312{
2313 int nr;
2314
2315 for (nr = 0; addr != end; addr += PAGE_SIZE)
2316 pages[nr++] = page++;
2317
2318 return nr;
2319}
2320
2321#ifdef CONFIG_ARCH_HAS_HUGEPD
2322static unsigned long hugepte_addr_end(unsigned long addr, unsigned long end,
2323 unsigned long sz)
2324{
2325 unsigned long __boundary = (addr + sz) & ~(sz-1);
2326 return (__boundary - 1 < end - 1) ? __boundary : end;
2327}
2328
2329static int gup_hugepte(pte_t *ptep, unsigned long sz, unsigned long addr,
2330 unsigned long end, unsigned int flags,
2331 struct page **pages, int *nr)
2332{
2333 unsigned long pte_end;
2334 struct page *head, *page;
2335 pte_t pte;
2336 int refs;
2337
2338 pte_end = (addr + sz) & ~(sz-1);
2339 if (pte_end < end)
2340 end = pte_end;
2341
2342 pte = huge_ptep_get(ptep);
2343
2344 if (!pte_access_permitted(pte, flags & FOLL_WRITE))
2345 return 0;
2346
2347
2348 VM_BUG_ON(!pfn_valid(pte_pfn(pte)));
2349
2350 head = pte_page(pte);
2351 page = head + ((addr & (sz-1)) >> PAGE_SHIFT);
2352 refs = record_subpages(page, addr, end, pages + *nr);
2353
2354 head = try_grab_compound_head(head, refs, flags);
2355 if (!head)
2356 return 0;
2357
2358 if (unlikely(pte_val(pte) != pte_val(*ptep))) {
2359 put_compound_head(head, refs, flags);
2360 return 0;
2361 }
2362
2363 *nr += refs;
2364 SetPageReferenced(head);
2365 return 1;
2366}
2367
2368static int gup_huge_pd(hugepd_t hugepd, unsigned long addr,
2369 unsigned int pdshift, unsigned long end, unsigned int flags,
2370 struct page **pages, int *nr)
2371{
2372 pte_t *ptep;
2373 unsigned long sz = 1UL << hugepd_shift(hugepd);
2374 unsigned long next;
2375
2376 ptep = hugepte_offset(hugepd, addr, pdshift);
2377 do {
2378 next = hugepte_addr_end(addr, end, sz);
2379 if (!gup_hugepte(ptep, sz, addr, end, flags, pages, nr))
2380 return 0;
2381 } while (ptep++, addr = next, addr != end);
2382
2383 return 1;
2384}
2385#else
2386static inline int gup_huge_pd(hugepd_t hugepd, unsigned long addr,
2387 unsigned int pdshift, unsigned long end, unsigned int flags,
2388 struct page **pages, int *nr)
2389{
2390 return 0;
2391}
2392#endif
2393
2394static int gup_huge_pmd(pmd_t orig, pmd_t *pmdp, unsigned long addr,
2395 unsigned long end, unsigned int flags,
2396 struct page **pages, int *nr)
2397{
2398 struct page *head, *page;
2399 int refs;
2400
2401 if (!pmd_access_permitted(orig, flags & FOLL_WRITE))
2402 return 0;
2403
2404 if (pmd_devmap(orig)) {
2405 if (unlikely(flags & FOLL_LONGTERM))
2406 return 0;
2407 return __gup_device_huge_pmd(orig, pmdp, addr, end, flags,
2408 pages, nr);
2409 }
2410
2411 page = pmd_page(orig) + ((addr & ~PMD_MASK) >> PAGE_SHIFT);
2412 refs = record_subpages(page, addr, end, pages + *nr);
2413
2414 head = try_grab_compound_head(pmd_page(orig), refs, flags);
2415 if (!head)
2416 return 0;
2417
2418 if (unlikely(pmd_val(orig) != pmd_val(*pmdp))) {
2419 put_compound_head(head, refs, flags);
2420 return 0;
2421 }
2422
2423 *nr += refs;
2424 SetPageReferenced(head);
2425 return 1;
2426}
2427
2428static int gup_huge_pud(pud_t orig, pud_t *pudp, unsigned long addr,
2429 unsigned long end, unsigned int flags,
2430 struct page **pages, int *nr)
2431{
2432 struct page *head, *page;
2433 int refs;
2434
2435 if (!pud_access_permitted(orig, flags & FOLL_WRITE))
2436 return 0;
2437
2438 if (pud_devmap(orig)) {
2439 if (unlikely(flags & FOLL_LONGTERM))
2440 return 0;
2441 return __gup_device_huge_pud(orig, pudp, addr, end, flags,
2442 pages, nr);
2443 }
2444
2445 page = pud_page(orig) + ((addr & ~PUD_MASK) >> PAGE_SHIFT);
2446 refs = record_subpages(page, addr, end, pages + *nr);
2447
2448 head = try_grab_compound_head(pud_page(orig), refs, flags);
2449 if (!head)
2450 return 0;
2451
2452 if (unlikely(pud_val(orig) != pud_val(*pudp))) {
2453 put_compound_head(head, refs, flags);
2454 return 0;
2455 }
2456
2457 *nr += refs;
2458 SetPageReferenced(head);
2459 return 1;
2460}
2461
2462static int gup_huge_pgd(pgd_t orig, pgd_t *pgdp, unsigned long addr,
2463 unsigned long end, unsigned int flags,
2464 struct page **pages, int *nr)
2465{
2466 int refs;
2467 struct page *head, *page;
2468
2469 if (!pgd_access_permitted(orig, flags & FOLL_WRITE))
2470 return 0;
2471
2472 BUILD_BUG_ON(pgd_devmap(orig));
2473
2474 page = pgd_page(orig) + ((addr & ~PGDIR_MASK) >> PAGE_SHIFT);
2475 refs = record_subpages(page, addr, end, pages + *nr);
2476
2477 head = try_grab_compound_head(pgd_page(orig), refs, flags);
2478 if (!head)
2479 return 0;
2480
2481 if (unlikely(pgd_val(orig) != pgd_val(*pgdp))) {
2482 put_compound_head(head, refs, flags);
2483 return 0;
2484 }
2485
2486 *nr += refs;
2487 SetPageReferenced(head);
2488 return 1;
2489}
2490
2491static int gup_pmd_range(pud_t *pudp, pud_t pud, unsigned long addr, unsigned long end,
2492 unsigned int flags, struct page **pages, int *nr)
2493{
2494 unsigned long next;
2495 pmd_t *pmdp;
2496
2497 pmdp = pmd_offset_lockless(pudp, pud, addr);
2498 do {
2499 pmd_t pmd = READ_ONCE(*pmdp);
2500
2501 next = pmd_addr_end(addr, end);
2502 if (!pmd_present(pmd))
2503 return 0;
2504
2505 if (unlikely(pmd_trans_huge(pmd) || pmd_huge(pmd) ||
2506 pmd_devmap(pmd))) {
2507
2508
2509
2510
2511
2512 if (pmd_protnone(pmd))
2513 return 0;
2514
2515 if (!gup_huge_pmd(pmd, pmdp, addr, next, flags,
2516 pages, nr))
2517 return 0;
2518
2519 } else if (unlikely(is_hugepd(__hugepd(pmd_val(pmd))))) {
2520
2521
2522
2523
2524 if (!gup_huge_pd(__hugepd(pmd_val(pmd)), addr,
2525 PMD_SHIFT, next, flags, pages, nr))
2526 return 0;
2527 } else if (!gup_pte_range(pmd, addr, next, flags, pages, nr))
2528 return 0;
2529 } while (pmdp++, addr = next, addr != end);
2530
2531 return 1;
2532}
2533
2534static int gup_pud_range(p4d_t *p4dp, p4d_t p4d, unsigned long addr, unsigned long end,
2535 unsigned int flags, struct page **pages, int *nr)
2536{
2537 unsigned long next;
2538 pud_t *pudp;
2539
2540 pudp = pud_offset_lockless(p4dp, p4d, addr);
2541 do {
2542 pud_t pud = READ_ONCE(*pudp);
2543
2544 next = pud_addr_end(addr, end);
2545 if (unlikely(!pud_present(pud)))
2546 return 0;
2547 if (unlikely(pud_huge(pud))) {
2548 if (!gup_huge_pud(pud, pudp, addr, next, flags,
2549 pages, nr))
2550 return 0;
2551 } else if (unlikely(is_hugepd(__hugepd(pud_val(pud))))) {
2552 if (!gup_huge_pd(__hugepd(pud_val(pud)), addr,
2553 PUD_SHIFT, next, flags, pages, nr))
2554 return 0;
2555 } else if (!gup_pmd_range(pudp, pud, addr, next, flags, pages, nr))
2556 return 0;
2557 } while (pudp++, addr = next, addr != end);
2558
2559 return 1;
2560}
2561
2562static int gup_p4d_range(pgd_t *pgdp, pgd_t pgd, unsigned long addr, unsigned long end,
2563 unsigned int flags, struct page **pages, int *nr)
2564{
2565 unsigned long next;
2566 p4d_t *p4dp;
2567
2568 p4dp = p4d_offset_lockless(pgdp, pgd, addr);
2569 do {
2570 p4d_t p4d = READ_ONCE(*p4dp);
2571
2572 next = p4d_addr_end(addr, end);
2573 if (p4d_none(p4d))
2574 return 0;
2575 BUILD_BUG_ON(p4d_huge(p4d));
2576 if (unlikely(is_hugepd(__hugepd(p4d_val(p4d))))) {
2577 if (!gup_huge_pd(__hugepd(p4d_val(p4d)), addr,
2578 P4D_SHIFT, next, flags, pages, nr))
2579 return 0;
2580 } else if (!gup_pud_range(p4dp, p4d, addr, next, flags, pages, nr))
2581 return 0;
2582 } while (p4dp++, addr = next, addr != end);
2583
2584 return 1;
2585}
2586
2587static void gup_pgd_range(unsigned long addr, unsigned long end,
2588 unsigned int flags, struct page **pages, int *nr)
2589{
2590 unsigned long next;
2591 pgd_t *pgdp;
2592
2593 pgdp = pgd_offset(current->mm, addr);
2594 do {
2595 pgd_t pgd = READ_ONCE(*pgdp);
2596
2597 next = pgd_addr_end(addr, end);
2598 if (pgd_none(pgd))
2599 return;
2600 if (unlikely(pgd_huge(pgd))) {
2601 if (!gup_huge_pgd(pgd, pgdp, addr, next, flags,
2602 pages, nr))
2603 return;
2604 } else if (unlikely(is_hugepd(__hugepd(pgd_val(pgd))))) {
2605 if (!gup_huge_pd(__hugepd(pgd_val(pgd)), addr,
2606 PGDIR_SHIFT, next, flags, pages, nr))
2607 return;
2608 } else if (!gup_p4d_range(pgdp, pgd, addr, next, flags, pages, nr))
2609 return;
2610 } while (pgdp++, addr = next, addr != end);
2611}
2612#else
2613static inline void gup_pgd_range(unsigned long addr, unsigned long end,
2614 unsigned int flags, struct page **pages, int *nr)
2615{
2616}
2617#endif
2618
2619#ifndef gup_fast_permitted
2620
2621
2622
2623
2624static bool gup_fast_permitted(unsigned long start, unsigned long end)
2625{
2626 return true;
2627}
2628#endif
2629
2630static int __gup_longterm_unlocked(unsigned long start, int nr_pages,
2631 unsigned int gup_flags, struct page **pages)
2632{
2633 int ret;
2634
2635
2636
2637
2638
2639 if (gup_flags & FOLL_LONGTERM) {
2640 mmap_read_lock(current->mm);
2641 ret = __gup_longterm_locked(current->mm,
2642 start, nr_pages,
2643 pages, NULL, gup_flags);
2644 mmap_read_unlock(current->mm);
2645 } else {
2646 ret = get_user_pages_unlocked(start, nr_pages,
2647 pages, gup_flags);
2648 }
2649
2650 return ret;
2651}
2652
2653static int internal_get_user_pages_fast(unsigned long start, int nr_pages,
2654 unsigned int gup_flags,
2655 struct page **pages)
2656{
2657 unsigned long addr, len, end;
2658 unsigned long flags;
2659 int nr_pinned = 0, ret = 0;
2660
2661 if (WARN_ON_ONCE(gup_flags & ~(FOLL_WRITE | FOLL_LONGTERM |
2662 FOLL_FORCE | FOLL_PIN | FOLL_GET |
2663 FOLL_FAST_ONLY)))
2664 return -EINVAL;
2665
2666 if (gup_flags & FOLL_PIN)
2667 atomic_set(¤t->mm->has_pinned, 1);
2668
2669 if (!(gup_flags & FOLL_FAST_ONLY))
2670 might_lock_read(¤t->mm->mmap_lock);
2671
2672 start = untagged_addr(start) & PAGE_MASK;
2673 addr = start;
2674 len = (unsigned long) nr_pages << PAGE_SHIFT;
2675 end = start + len;
2676
2677 if (end <= start)
2678 return 0;
2679 if (unlikely(!access_ok((void __user *)start, len)))
2680 return -EFAULT;
2681
2682
2683
2684
2685
2686
2687
2688
2689
2690
2691
2692
2693 if (IS_ENABLED(CONFIG_HAVE_FAST_GUP) && gup_fast_permitted(start, end)) {
2694 unsigned long fast_flags = gup_flags;
2695
2696 local_irq_save(flags);
2697 gup_pgd_range(addr, end, fast_flags, pages, &nr_pinned);
2698 local_irq_restore(flags);
2699 ret = nr_pinned;
2700 }
2701
2702 if (nr_pinned < nr_pages && !(gup_flags & FOLL_FAST_ONLY)) {
2703
2704 start += nr_pinned << PAGE_SHIFT;
2705 pages += nr_pinned;
2706
2707 ret = __gup_longterm_unlocked(start, nr_pages - nr_pinned,
2708 gup_flags, pages);
2709
2710
2711 if (nr_pinned > 0) {
2712 if (ret < 0)
2713 ret = nr_pinned;
2714 else
2715 ret += nr_pinned;
2716 }
2717 }
2718
2719 return ret;
2720}
2721
2722
2723
2724
2725
2726
2727
2728
2729
2730
2731
2732
2733
2734
2735
2736
2737
2738
2739
2740
2741int get_user_pages_fast_only(unsigned long start, int nr_pages,
2742 unsigned int gup_flags, struct page **pages)
2743{
2744 int nr_pinned;
2745
2746
2747
2748
2749
2750
2751
2752 gup_flags |= FOLL_GET | FOLL_FAST_ONLY;
2753
2754 nr_pinned = internal_get_user_pages_fast(start, nr_pages, gup_flags,
2755 pages);
2756
2757
2758
2759
2760
2761
2762
2763 if (nr_pinned < 0)
2764 nr_pinned = 0;
2765
2766 return nr_pinned;
2767}
2768EXPORT_SYMBOL_GPL(get_user_pages_fast_only);
2769
2770
2771
2772
2773
2774
2775
2776
2777
2778
2779
2780
2781
2782
2783
2784
2785
2786int get_user_pages_fast(unsigned long start, int nr_pages,
2787 unsigned int gup_flags, struct page **pages)
2788{
2789
2790
2791
2792
2793 if (WARN_ON_ONCE(gup_flags & FOLL_PIN))
2794 return -EINVAL;
2795
2796
2797
2798
2799
2800
2801
2802 gup_flags |= FOLL_GET;
2803 return internal_get_user_pages_fast(start, nr_pages, gup_flags, pages);
2804}
2805EXPORT_SYMBOL_GPL(get_user_pages_fast);
2806
2807
2808
2809
2810
2811
2812
2813
2814
2815
2816
2817
2818
2819
2820
2821
2822
2823int pin_user_pages_fast(unsigned long start, int nr_pages,
2824 unsigned int gup_flags, struct page **pages)
2825{
2826
2827 if (WARN_ON_ONCE(gup_flags & FOLL_GET))
2828 return -EINVAL;
2829
2830 gup_flags |= FOLL_PIN;
2831 return internal_get_user_pages_fast(start, nr_pages, gup_flags, pages);
2832}
2833EXPORT_SYMBOL_GPL(pin_user_pages_fast);
2834
2835
2836
2837
2838
2839
2840
2841int pin_user_pages_fast_only(unsigned long start, int nr_pages,
2842 unsigned int gup_flags, struct page **pages)
2843{
2844 int nr_pinned;
2845
2846
2847
2848
2849
2850 if (WARN_ON_ONCE(gup_flags & FOLL_GET))
2851 return 0;
2852
2853
2854
2855
2856 gup_flags |= (FOLL_PIN | FOLL_FAST_ONLY);
2857 nr_pinned = internal_get_user_pages_fast(start, nr_pages, gup_flags,
2858 pages);
2859
2860
2861
2862
2863
2864 if (nr_pinned < 0)
2865 nr_pinned = 0;
2866
2867 return nr_pinned;
2868}
2869EXPORT_SYMBOL_GPL(pin_user_pages_fast_only);
2870
2871
2872
2873
2874
2875
2876
2877
2878
2879
2880
2881
2882
2883
2884
2885
2886
2887
2888
2889
2890
2891
2892
2893
2894long pin_user_pages_remote(struct mm_struct *mm,
2895 unsigned long start, unsigned long nr_pages,
2896 unsigned int gup_flags, struct page **pages,
2897 struct vm_area_struct **vmas, int *locked)
2898{
2899
2900 if (WARN_ON_ONCE(gup_flags & FOLL_GET))
2901 return -EINVAL;
2902
2903 gup_flags |= FOLL_PIN;
2904 return __get_user_pages_remote(mm, start, nr_pages, gup_flags,
2905 pages, vmas, locked);
2906}
2907EXPORT_SYMBOL(pin_user_pages_remote);
2908
2909
2910
2911
2912
2913
2914
2915
2916
2917
2918
2919
2920
2921
2922
2923
2924
2925
2926
2927long pin_user_pages(unsigned long start, unsigned long nr_pages,
2928 unsigned int gup_flags, struct page **pages,
2929 struct vm_area_struct **vmas)
2930{
2931
2932 if (WARN_ON_ONCE(gup_flags & FOLL_GET))
2933 return -EINVAL;
2934
2935 gup_flags |= FOLL_PIN;
2936 return __gup_longterm_locked(current->mm, start, nr_pages,
2937 pages, vmas, gup_flags);
2938}
2939EXPORT_SYMBOL(pin_user_pages);
2940
2941
2942
2943
2944
2945
2946long pin_user_pages_unlocked(unsigned long start, unsigned long nr_pages,
2947 struct page **pages, unsigned int gup_flags)
2948{
2949
2950 if (WARN_ON_ONCE(gup_flags & FOLL_GET))
2951 return -EINVAL;
2952
2953 gup_flags |= FOLL_PIN;
2954 return get_user_pages_unlocked(start, nr_pages, pages, gup_flags);
2955}
2956EXPORT_SYMBOL(pin_user_pages_unlocked);
2957
2958
2959
2960
2961
2962
2963long pin_user_pages_locked(unsigned long start, unsigned long nr_pages,
2964 unsigned int gup_flags, struct page **pages,
2965 int *locked)
2966{
2967
2968
2969
2970
2971
2972
2973 if (WARN_ON_ONCE(gup_flags & FOLL_LONGTERM))
2974 return -EINVAL;
2975
2976
2977 if (WARN_ON_ONCE(gup_flags & FOLL_GET))
2978 return -EINVAL;
2979
2980 gup_flags |= FOLL_PIN;
2981 return __get_user_pages_locked(current->mm, start, nr_pages,
2982 pages, NULL, locked,
2983 gup_flags | FOLL_TOUCH);
2984}
2985EXPORT_SYMBOL(pin_user_pages_locked);
2986