interconnect: qcom: icc-rpm: Fix peak rate calculation
[linux-2.6-microblaze.git] / mm / memory.c
1
2 // SPDX-License-Identifier: GPL-2.0-only
3 /*
4  *  linux/mm/memory.c
5  *
6  *  Copyright (C) 1991, 1992, 1993, 1994  Linus Torvalds
7  */
8
9 /*
10  * demand-loading started 01.12.91 - seems it is high on the list of
11  * things wanted, and it should be easy to implement. - Linus
12  */
13
14 /*
15  * Ok, demand-loading was easy, shared pages a little bit tricker. Shared
16  * pages started 02.12.91, seems to work. - Linus.
17  *
18  * Tested sharing by executing about 30 /bin/sh: under the old kernel it
19  * would have taken more than the 6M I have free, but it worked well as
20  * far as I could see.
21  *
22  * Also corrected some "invalidate()"s - I wasn't doing enough of them.
23  */
24
25 /*
26  * Real VM (paging to/from disk) started 18.12.91. Much more work and
27  * thought has to go into this. Oh, well..
28  * 19.12.91  -  works, somewhat. Sometimes I get faults, don't know why.
29  *              Found it. Everything seems to work now.
30  * 20.12.91  -  Ok, making the swap-device changeable like the root.
31  */
32
33 /*
34  * 05.04.94  -  Multi-page memory management added for v1.1.
35  *              Idea by Alex Bligh (alex@cconcepts.co.uk)
36  *
37  * 16.07.99  -  Support of BIGMEM added by Gerhard Wichert, Siemens AG
38  *              (Gerhard.Wichert@pdb.siemens.de)
39  *
40  * Aug/Sep 2004 Changed to four level page tables (Andi Kleen)
41  */
42
43 #include <linux/kernel_stat.h>
44 #include <linux/mm.h>
45 #include <linux/mm_inline.h>
46 #include <linux/sched/mm.h>
47 #include <linux/sched/coredump.h>
48 #include <linux/sched/numa_balancing.h>
49 #include <linux/sched/task.h>
50 #include <linux/hugetlb.h>
51 #include <linux/mman.h>
52 #include <linux/swap.h>
53 #include <linux/highmem.h>
54 #include <linux/pagemap.h>
55 #include <linux/memremap.h>
56 #include <linux/kmsan.h>
57 #include <linux/ksm.h>
58 #include <linux/rmap.h>
59 #include <linux/export.h>
60 #include <linux/delayacct.h>
61 #include <linux/init.h>
62 #include <linux/pfn_t.h>
63 #include <linux/writeback.h>
64 #include <linux/memcontrol.h>
65 #include <linux/mmu_notifier.h>
66 #include <linux/swapops.h>
67 #include <linux/elf.h>
68 #include <linux/gfp.h>
69 #include <linux/migrate.h>
70 #include <linux/string.h>
71 #include <linux/memory-tiers.h>
72 #include <linux/debugfs.h>
73 #include <linux/userfaultfd_k.h>
74 #include <linux/dax.h>
75 #include <linux/oom.h>
76 #include <linux/numa.h>
77 #include <linux/perf_event.h>
78 #include <linux/ptrace.h>
79 #include <linux/vmalloc.h>
80 #include <linux/sched/sysctl.h>
81
82 #include <trace/events/kmem.h>
83
84 #include <asm/io.h>
85 #include <asm/mmu_context.h>
86 #include <asm/pgalloc.h>
87 #include <linux/uaccess.h>
88 #include <asm/tlb.h>
89 #include <asm/tlbflush.h>
90
91 #include "pgalloc-track.h"
92 #include "internal.h"
93 #include "swap.h"
94
95 #if defined(LAST_CPUPID_NOT_IN_PAGE_FLAGS) && !defined(CONFIG_COMPILE_TEST)
96 #warning Unfortunate NUMA and NUMA Balancing config, growing page-frame for last_cpupid.
97 #endif
98
99 #ifndef CONFIG_NUMA
100 unsigned long max_mapnr;
101 EXPORT_SYMBOL(max_mapnr);
102
103 struct page *mem_map;
104 EXPORT_SYMBOL(mem_map);
105 #endif
106
107 static vm_fault_t do_fault(struct vm_fault *vmf);
108 static vm_fault_t do_anonymous_page(struct vm_fault *vmf);
109 static bool vmf_pte_changed(struct vm_fault *vmf);
110
111 /*
112  * Return true if the original pte was a uffd-wp pte marker (so the pte was
113  * wr-protected).
114  */
115 static bool vmf_orig_pte_uffd_wp(struct vm_fault *vmf)
116 {
117         if (!(vmf->flags & FAULT_FLAG_ORIG_PTE_VALID))
118                 return false;
119
120         return pte_marker_uffd_wp(vmf->orig_pte);
121 }
122
123 /*
124  * A number of key systems in x86 including ioremap() rely on the assumption
125  * that high_memory defines the upper bound on direct map memory, then end
126  * of ZONE_NORMAL.  Under CONFIG_DISCONTIG this means that max_low_pfn and
127  * highstart_pfn must be the same; there must be no gap between ZONE_NORMAL
128  * and ZONE_HIGHMEM.
129  */
130 void *high_memory;
131 EXPORT_SYMBOL(high_memory);
132
133 /*
134  * Randomize the address space (stacks, mmaps, brk, etc.).
135  *
136  * ( When CONFIG_COMPAT_BRK=y we exclude brk from randomization,
137  *   as ancient (libc5 based) binaries can segfault. )
138  */
139 int randomize_va_space __read_mostly =
140 #ifdef CONFIG_COMPAT_BRK
141                                         1;
142 #else
143                                         2;
144 #endif
145
146 #ifndef arch_wants_old_prefaulted_pte
147 static inline bool arch_wants_old_prefaulted_pte(void)
148 {
149         /*
150          * Transitioning a PTE from 'old' to 'young' can be expensive on
151          * some architectures, even if it's performed in hardware. By
152          * default, "false" means prefaulted entries will be 'young'.
153          */
154         return false;
155 }
156 #endif
157
158 static int __init disable_randmaps(char *s)
159 {
160         randomize_va_space = 0;
161         return 1;
162 }
163 __setup("norandmaps", disable_randmaps);
164
165 unsigned long zero_pfn __read_mostly;
166 EXPORT_SYMBOL(zero_pfn);
167
168 unsigned long highest_memmap_pfn __read_mostly;
169
170 /*
171  * CONFIG_MMU architectures set up ZERO_PAGE in their paging_init()
172  */
173 static int __init init_zero_pfn(void)
174 {
175         zero_pfn = page_to_pfn(ZERO_PAGE(0));
176         return 0;
177 }
178 early_initcall(init_zero_pfn);
179
180 void mm_trace_rss_stat(struct mm_struct *mm, int member)
181 {
182         trace_rss_stat(mm, member);
183 }
184
185 /*
186  * Note: this doesn't free the actual pages themselves. That
187  * has been handled earlier when unmapping all the memory regions.
188  */
189 static void free_pte_range(struct mmu_gather *tlb, pmd_t *pmd,
190                            unsigned long addr)
191 {
192         pgtable_t token = pmd_pgtable(*pmd);
193         pmd_clear(pmd);
194         pte_free_tlb(tlb, token, addr);
195         mm_dec_nr_ptes(tlb->mm);
196 }
197
198 static inline void free_pmd_range(struct mmu_gather *tlb, pud_t *pud,
199                                 unsigned long addr, unsigned long end,
200                                 unsigned long floor, unsigned long ceiling)
201 {
202         pmd_t *pmd;
203         unsigned long next;
204         unsigned long start;
205
206         start = addr;
207         pmd = pmd_offset(pud, addr);
208         do {
209                 next = pmd_addr_end(addr, end);
210                 if (pmd_none_or_clear_bad(pmd))
211                         continue;
212                 free_pte_range(tlb, pmd, addr);
213         } while (pmd++, addr = next, addr != end);
214
215         start &= PUD_MASK;
216         if (start < floor)
217                 return;
218         if (ceiling) {
219                 ceiling &= PUD_MASK;
220                 if (!ceiling)
221                         return;
222         }
223         if (end - 1 > ceiling - 1)
224                 return;
225
226         pmd = pmd_offset(pud, start);
227         pud_clear(pud);
228         pmd_free_tlb(tlb, pmd, start);
229         mm_dec_nr_pmds(tlb->mm);
230 }
231
232 static inline void free_pud_range(struct mmu_gather *tlb, p4d_t *p4d,
233                                 unsigned long addr, unsigned long end,
234                                 unsigned long floor, unsigned long ceiling)
235 {
236         pud_t *pud;
237         unsigned long next;
238         unsigned long start;
239
240         start = addr;
241         pud = pud_offset(p4d, addr);
242         do {
243                 next = pud_addr_end(addr, end);
244                 if (pud_none_or_clear_bad(pud))
245                         continue;
246                 free_pmd_range(tlb, pud, addr, next, floor, ceiling);
247         } while (pud++, addr = next, addr != end);
248
249         start &= P4D_MASK;
250         if (start < floor)
251                 return;
252         if (ceiling) {
253                 ceiling &= P4D_MASK;
254                 if (!ceiling)
255                         return;
256         }
257         if (end - 1 > ceiling - 1)
258                 return;
259
260         pud = pud_offset(p4d, start);
261         p4d_clear(p4d);
262         pud_free_tlb(tlb, pud, start);
263         mm_dec_nr_puds(tlb->mm);
264 }
265
266 static inline void free_p4d_range(struct mmu_gather *tlb, pgd_t *pgd,
267                                 unsigned long addr, unsigned long end,
268                                 unsigned long floor, unsigned long ceiling)
269 {
270         p4d_t *p4d;
271         unsigned long next;
272         unsigned long start;
273
274         start = addr;
275         p4d = p4d_offset(pgd, addr);
276         do {
277                 next = p4d_addr_end(addr, end);
278                 if (p4d_none_or_clear_bad(p4d))
279                         continue;
280                 free_pud_range(tlb, p4d, addr, next, floor, ceiling);
281         } while (p4d++, 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         p4d = p4d_offset(pgd, start);
295         pgd_clear(pgd);
296         p4d_free_tlb(tlb, p4d, start);
297 }
298
299 /*
300  * This function frees user-level page tables of a process.
301  */
302 void free_pgd_range(struct mmu_gather *tlb,
303                         unsigned long addr, unsigned long end,
304                         unsigned long floor, unsigned long ceiling)
305 {
306         pgd_t *pgd;
307         unsigned long next;
308
309         /*
310          * The next few lines have given us lots of grief...
311          *
312          * Why are we testing PMD* at this top level?  Because often
313          * there will be no work to do at all, and we'd prefer not to
314          * go all the way down to the bottom just to discover that.
315          *
316          * Why all these "- 1"s?  Because 0 represents both the bottom
317          * of the address space and the top of it (using -1 for the
318          * top wouldn't help much: the masks would do the wrong thing).
319          * The rule is that addr 0 and floor 0 refer to the bottom of
320          * the address space, but end 0 and ceiling 0 refer to the top
321          * Comparisons need to use "end - 1" and "ceiling - 1" (though
322          * that end 0 case should be mythical).
323          *
324          * Wherever addr is brought up or ceiling brought down, we must
325          * be careful to reject "the opposite 0" before it confuses the
326          * subsequent tests.  But what about where end is brought down
327          * by PMD_SIZE below? no, end can't go down to 0 there.
328          *
329          * Whereas we round start (addr) and ceiling down, by different
330          * masks at different levels, in order to test whether a table
331          * now has no other vmas using it, so can be freed, we don't
332          * bother to round floor or end up - the tests don't need that.
333          */
334
335         addr &= PMD_MASK;
336         if (addr < floor) {
337                 addr += PMD_SIZE;
338                 if (!addr)
339                         return;
340         }
341         if (ceiling) {
342                 ceiling &= PMD_MASK;
343                 if (!ceiling)
344                         return;
345         }
346         if (end - 1 > ceiling - 1)
347                 end -= PMD_SIZE;
348         if (addr > end - 1)
349                 return;
350         /*
351          * We add page table cache pages with PAGE_SIZE,
352          * (see pte_free_tlb()), flush the tlb if we need
353          */
354         tlb_change_page_size(tlb, PAGE_SIZE);
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_p4d_range(tlb, pgd, addr, next, floor, ceiling);
361         } while (pgd++, addr = next, addr != end);
362 }
363
364 void free_pgtables(struct mmu_gather *tlb, struct ma_state *mas,
365                    struct vm_area_struct *vma, unsigned long floor,
366                    unsigned long ceiling, bool mm_wr_locked)
367 {
368         do {
369                 unsigned long addr = vma->vm_start;
370                 struct vm_area_struct *next;
371
372                 /*
373                  * Note: USER_PGTABLES_CEILING may be passed as ceiling and may
374                  * be 0.  This will underflow and is okay.
375                  */
376                 next = mas_find(mas, ceiling - 1);
377
378                 /*
379                  * Hide vma from rmap and truncate_pagecache before freeing
380                  * pgtables
381                  */
382                 if (mm_wr_locked)
383                         vma_start_write(vma);
384                 unlink_anon_vmas(vma);
385                 unlink_file_vma(vma);
386
387                 if (is_vm_hugetlb_page(vma)) {
388                         hugetlb_free_pgd_range(tlb, addr, vma->vm_end,
389                                 floor, next ? next->vm_start : ceiling);
390                 } else {
391                         /*
392                          * Optimization: gather nearby vmas into one call down
393                          */
394                         while (next && next->vm_start <= vma->vm_end + PMD_SIZE
395                                && !is_vm_hugetlb_page(next)) {
396                                 vma = next;
397                                 next = mas_find(mas, ceiling - 1);
398                                 if (mm_wr_locked)
399                                         vma_start_write(vma);
400                                 unlink_anon_vmas(vma);
401                                 unlink_file_vma(vma);
402                         }
403                         free_pgd_range(tlb, addr, vma->vm_end,
404                                 floor, next ? next->vm_start : ceiling);
405                 }
406                 vma = next;
407         } while (vma);
408 }
409
410 void pmd_install(struct mm_struct *mm, pmd_t *pmd, pgtable_t *pte)
411 {
412         spinlock_t *ptl = pmd_lock(mm, pmd);
413
414         if (likely(pmd_none(*pmd))) {   /* Has another populated it ? */
415                 mm_inc_nr_ptes(mm);
416                 /*
417                  * Ensure all pte setup (eg. pte page lock and page clearing) are
418                  * visible before the pte is made visible to other CPUs by being
419                  * put into page tables.
420                  *
421                  * The other side of the story is the pointer chasing in the page
422                  * table walking code (when walking the page table without locking;
423                  * ie. most of the time). Fortunately, these data accesses consist
424                  * of a chain of data-dependent loads, meaning most CPUs (alpha
425                  * being the notable exception) will already guarantee loads are
426                  * seen in-order. See the alpha page table accessors for the
427                  * smp_rmb() barriers in page table walking code.
428                  */
429                 smp_wmb(); /* Could be smp_wmb__xxx(before|after)_spin_lock */
430                 pmd_populate(mm, pmd, *pte);
431                 *pte = NULL;
432         }
433         spin_unlock(ptl);
434 }
435
436 int __pte_alloc(struct mm_struct *mm, pmd_t *pmd)
437 {
438         pgtable_t new = pte_alloc_one(mm);
439         if (!new)
440                 return -ENOMEM;
441
442         pmd_install(mm, pmd, &new);
443         if (new)
444                 pte_free(mm, new);
445         return 0;
446 }
447
448 int __pte_alloc_kernel(pmd_t *pmd)
449 {
450         pte_t *new = pte_alloc_one_kernel(&init_mm);
451         if (!new)
452                 return -ENOMEM;
453
454         spin_lock(&init_mm.page_table_lock);
455         if (likely(pmd_none(*pmd))) {   /* Has another populated it ? */
456                 smp_wmb(); /* See comment in pmd_install() */
457                 pmd_populate_kernel(&init_mm, pmd, new);
458                 new = NULL;
459         }
460         spin_unlock(&init_mm.page_table_lock);
461         if (new)
462                 pte_free_kernel(&init_mm, new);
463         return 0;
464 }
465
466 static inline void init_rss_vec(int *rss)
467 {
468         memset(rss, 0, sizeof(int) * NR_MM_COUNTERS);
469 }
470
471 static inline void add_mm_rss_vec(struct mm_struct *mm, int *rss)
472 {
473         int i;
474
475         for (i = 0; i < NR_MM_COUNTERS; i++)
476                 if (rss[i])
477                         add_mm_counter(mm, i, rss[i]);
478 }
479
480 /*
481  * This function is called to print an error when a bad pte
482  * is found. For example, we might have a PFN-mapped pte in
483  * a region that doesn't allow it.
484  *
485  * The calling function must still handle the error.
486  */
487 static void print_bad_pte(struct vm_area_struct *vma, unsigned long addr,
488                           pte_t pte, struct page *page)
489 {
490         pgd_t *pgd = pgd_offset(vma->vm_mm, addr);
491         p4d_t *p4d = p4d_offset(pgd, addr);
492         pud_t *pud = pud_offset(p4d, addr);
493         pmd_t *pmd = pmd_offset(pud, addr);
494         struct address_space *mapping;
495         pgoff_t index;
496         static unsigned long resume;
497         static unsigned long nr_shown;
498         static unsigned long nr_unshown;
499
500         /*
501          * Allow a burst of 60 reports, then keep quiet for that minute;
502          * or allow a steady drip of one report per second.
503          */
504         if (nr_shown == 60) {
505                 if (time_before(jiffies, resume)) {
506                         nr_unshown++;
507                         return;
508                 }
509                 if (nr_unshown) {
510                         pr_alert("BUG: Bad page map: %lu messages suppressed\n",
511                                  nr_unshown);
512                         nr_unshown = 0;
513                 }
514                 nr_shown = 0;
515         }
516         if (nr_shown++ == 0)
517                 resume = jiffies + 60 * HZ;
518
519         mapping = vma->vm_file ? vma->vm_file->f_mapping : NULL;
520         index = linear_page_index(vma, addr);
521
522         pr_alert("BUG: Bad page map in process %s  pte:%08llx pmd:%08llx\n",
523                  current->comm,
524                  (long long)pte_val(pte), (long long)pmd_val(*pmd));
525         if (page)
526                 dump_page(page, "bad pte");
527         pr_alert("addr:%px vm_flags:%08lx anon_vma:%px mapping:%px index:%lx\n",
528                  (void *)addr, vma->vm_flags, vma->anon_vma, mapping, index);
529         pr_alert("file:%pD fault:%ps mmap:%ps read_folio:%ps\n",
530                  vma->vm_file,
531                  vma->vm_ops ? vma->vm_ops->fault : NULL,
532                  vma->vm_file ? vma->vm_file->f_op->mmap : NULL,
533                  mapping ? mapping->a_ops->read_folio : NULL);
534         dump_stack();
535         add_taint(TAINT_BAD_PAGE, LOCKDEP_NOW_UNRELIABLE);
536 }
537
538 /*
539  * vm_normal_page -- This function gets the "struct page" associated with a pte.
540  *
541  * "Special" mappings do not wish to be associated with a "struct page" (either
542  * it doesn't exist, or it exists but they don't want to touch it). In this
543  * case, NULL is returned here. "Normal" mappings do have a struct page.
544  *
545  * There are 2 broad cases. Firstly, an architecture may define a pte_special()
546  * pte bit, in which case this function is trivial. Secondly, an architecture
547  * may not have a spare pte bit, which requires a more complicated scheme,
548  * described below.
549  *
550  * A raw VM_PFNMAP mapping (ie. one that is not COWed) is always considered a
551  * special mapping (even if there are underlying and valid "struct pages").
552  * COWed pages of a VM_PFNMAP are always normal.
553  *
554  * The way we recognize COWed pages within VM_PFNMAP mappings is through the
555  * rules set up by "remap_pfn_range()": the vma will have the VM_PFNMAP bit
556  * set, and the vm_pgoff will point to the first PFN mapped: thus every special
557  * mapping will always honor the rule
558  *
559  *      pfn_of_page == vma->vm_pgoff + ((addr - vma->vm_start) >> PAGE_SHIFT)
560  *
561  * And for normal mappings this is false.
562  *
563  * This restricts such mappings to be a linear translation from virtual address
564  * to pfn. To get around this restriction, we allow arbitrary mappings so long
565  * as the vma is not a COW mapping; in that case, we know that all ptes are
566  * special (because none can have been COWed).
567  *
568  *
569  * In order to support COW of arbitrary special mappings, we have VM_MIXEDMAP.
570  *
571  * VM_MIXEDMAP mappings can likewise contain memory with or without "struct
572  * page" backing, however the difference is that _all_ pages with a struct
573  * page (that is, those where pfn_valid is true) are refcounted and considered
574  * normal pages by the VM. The disadvantage is that pages are refcounted
575  * (which can be slower and simply not an option for some PFNMAP users). The
576  * advantage is that we don't have to follow the strict linearity rule of
577  * PFNMAP mappings in order to support COWable mappings.
578  *
579  */
580 struct page *vm_normal_page(struct vm_area_struct *vma, unsigned long addr,
581                             pte_t pte)
582 {
583         unsigned long pfn = pte_pfn(pte);
584
585         if (IS_ENABLED(CONFIG_ARCH_HAS_PTE_SPECIAL)) {
586                 if (likely(!pte_special(pte)))
587                         goto check_pfn;
588                 if (vma->vm_ops && vma->vm_ops->find_special_page)
589                         return vma->vm_ops->find_special_page(vma, addr);
590                 if (vma->vm_flags & (VM_PFNMAP | VM_MIXEDMAP))
591                         return NULL;
592                 if (is_zero_pfn(pfn))
593                         return NULL;
594                 if (pte_devmap(pte))
595                 /*
596                  * NOTE: New users of ZONE_DEVICE will not set pte_devmap()
597                  * and will have refcounts incremented on their struct pages
598                  * when they are inserted into PTEs, thus they are safe to
599                  * return here. Legacy ZONE_DEVICE pages that set pte_devmap()
600                  * do not have refcounts. Example of legacy ZONE_DEVICE is
601                  * MEMORY_DEVICE_FS_DAX type in pmem or virtio_fs drivers.
602                  */
603                         return NULL;
604
605                 print_bad_pte(vma, addr, pte, NULL);
606                 return NULL;
607         }
608
609         /* !CONFIG_ARCH_HAS_PTE_SPECIAL case follows: */
610
611         if (unlikely(vma->vm_flags & (VM_PFNMAP|VM_MIXEDMAP))) {
612                 if (vma->vm_flags & VM_MIXEDMAP) {
613                         if (!pfn_valid(pfn))
614                                 return NULL;
615                         goto out;
616                 } else {
617                         unsigned long off;
618                         off = (addr - vma->vm_start) >> PAGE_SHIFT;
619                         if (pfn == vma->vm_pgoff + off)
620                                 return NULL;
621                         if (!is_cow_mapping(vma->vm_flags))
622                                 return NULL;
623                 }
624         }
625
626         if (is_zero_pfn(pfn))
627                 return NULL;
628
629 check_pfn:
630         if (unlikely(pfn > highest_memmap_pfn)) {
631                 print_bad_pte(vma, addr, pte, NULL);
632                 return NULL;
633         }
634
635         /*
636          * NOTE! We still have PageReserved() pages in the page tables.
637          * eg. VDSO mappings can cause them to exist.
638          */
639 out:
640         return pfn_to_page(pfn);
641 }
642
643 struct folio *vm_normal_folio(struct vm_area_struct *vma, unsigned long addr,
644                             pte_t pte)
645 {
646         struct page *page = vm_normal_page(vma, addr, pte);
647
648         if (page)
649                 return page_folio(page);
650         return NULL;
651 }
652
653 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
654 struct page *vm_normal_page_pmd(struct vm_area_struct *vma, unsigned long addr,
655                                 pmd_t pmd)
656 {
657         unsigned long pfn = pmd_pfn(pmd);
658
659         /*
660          * There is no pmd_special() but there may be special pmds, e.g.
661          * in a direct-access (dax) mapping, so let's just replicate the
662          * !CONFIG_ARCH_HAS_PTE_SPECIAL case from vm_normal_page() here.
663          */
664         if (unlikely(vma->vm_flags & (VM_PFNMAP|VM_MIXEDMAP))) {
665                 if (vma->vm_flags & VM_MIXEDMAP) {
666                         if (!pfn_valid(pfn))
667                                 return NULL;
668                         goto out;
669                 } else {
670                         unsigned long off;
671                         off = (addr - vma->vm_start) >> PAGE_SHIFT;
672                         if (pfn == vma->vm_pgoff + off)
673                                 return NULL;
674                         if (!is_cow_mapping(vma->vm_flags))
675                                 return NULL;
676                 }
677         }
678
679         if (pmd_devmap(pmd))
680                 return NULL;
681         if (is_huge_zero_pmd(pmd))
682                 return NULL;
683         if (unlikely(pfn > highest_memmap_pfn))
684                 return NULL;
685
686         /*
687          * NOTE! We still have PageReserved() pages in the page tables.
688          * eg. VDSO mappings can cause them to exist.
689          */
690 out:
691         return pfn_to_page(pfn);
692 }
693
694 struct folio *vm_normal_folio_pmd(struct vm_area_struct *vma,
695                                   unsigned long addr, pmd_t pmd)
696 {
697         struct page *page = vm_normal_page_pmd(vma, addr, pmd);
698
699         if (page)
700                 return page_folio(page);
701         return NULL;
702 }
703 #endif
704
705 static void restore_exclusive_pte(struct vm_area_struct *vma,
706                                   struct page *page, unsigned long address,
707                                   pte_t *ptep)
708 {
709         pte_t orig_pte;
710         pte_t pte;
711         swp_entry_t entry;
712
713         orig_pte = ptep_get(ptep);
714         pte = pte_mkold(mk_pte(page, READ_ONCE(vma->vm_page_prot)));
715         if (pte_swp_soft_dirty(orig_pte))
716                 pte = pte_mksoft_dirty(pte);
717
718         entry = pte_to_swp_entry(orig_pte);
719         if (pte_swp_uffd_wp(orig_pte))
720                 pte = pte_mkuffd_wp(pte);
721         else if (is_writable_device_exclusive_entry(entry))
722                 pte = maybe_mkwrite(pte_mkdirty(pte), vma);
723
724         VM_BUG_ON(pte_write(pte) && !(PageAnon(page) && PageAnonExclusive(page)));
725
726         /*
727          * No need to take a page reference as one was already
728          * created when the swap entry was made.
729          */
730         if (PageAnon(page))
731                 page_add_anon_rmap(page, vma, address, RMAP_NONE);
732         else
733                 /*
734                  * Currently device exclusive access only supports anonymous
735                  * memory so the entry shouldn't point to a filebacked page.
736                  */
737                 WARN_ON_ONCE(1);
738
739         set_pte_at(vma->vm_mm, address, ptep, pte);
740
741         /*
742          * No need to invalidate - it was non-present before. However
743          * secondary CPUs may have mappings that need invalidating.
744          */
745         update_mmu_cache(vma, address, ptep);
746 }
747
748 /*
749  * Tries to restore an exclusive pte if the page lock can be acquired without
750  * sleeping.
751  */
752 static int
753 try_restore_exclusive_pte(pte_t *src_pte, struct vm_area_struct *vma,
754                         unsigned long addr)
755 {
756         swp_entry_t entry = pte_to_swp_entry(ptep_get(src_pte));
757         struct page *page = pfn_swap_entry_to_page(entry);
758
759         if (trylock_page(page)) {
760                 restore_exclusive_pte(vma, page, addr, src_pte);
761                 unlock_page(page);
762                 return 0;
763         }
764
765         return -EBUSY;
766 }
767
768 /*
769  * copy one vm_area from one task to the other. Assumes the page tables
770  * already present in the new task to be cleared in the whole range
771  * covered by this vma.
772  */
773
774 static unsigned long
775 copy_nonpresent_pte(struct mm_struct *dst_mm, struct mm_struct *src_mm,
776                 pte_t *dst_pte, pte_t *src_pte, struct vm_area_struct *dst_vma,
777                 struct vm_area_struct *src_vma, unsigned long addr, int *rss)
778 {
779         unsigned long vm_flags = dst_vma->vm_flags;
780         pte_t orig_pte = ptep_get(src_pte);
781         pte_t pte = orig_pte;
782         struct page *page;
783         swp_entry_t entry = pte_to_swp_entry(orig_pte);
784
785         if (likely(!non_swap_entry(entry))) {
786                 if (swap_duplicate(entry) < 0)
787                         return -EIO;
788
789                 /* make sure dst_mm is on swapoff's mmlist. */
790                 if (unlikely(list_empty(&dst_mm->mmlist))) {
791                         spin_lock(&mmlist_lock);
792                         if (list_empty(&dst_mm->mmlist))
793                                 list_add(&dst_mm->mmlist,
794                                                 &src_mm->mmlist);
795                         spin_unlock(&mmlist_lock);
796                 }
797                 /* Mark the swap entry as shared. */
798                 if (pte_swp_exclusive(orig_pte)) {
799                         pte = pte_swp_clear_exclusive(orig_pte);
800                         set_pte_at(src_mm, addr, src_pte, pte);
801                 }
802                 rss[MM_SWAPENTS]++;
803         } else if (is_migration_entry(entry)) {
804                 page = pfn_swap_entry_to_page(entry);
805
806                 rss[mm_counter(page)]++;
807
808                 if (!is_readable_migration_entry(entry) &&
809                                 is_cow_mapping(vm_flags)) {
810                         /*
811                          * COW mappings require pages in both parent and child
812                          * to be set to read. A previously exclusive entry is
813                          * now shared.
814                          */
815                         entry = make_readable_migration_entry(
816                                                         swp_offset(entry));
817                         pte = swp_entry_to_pte(entry);
818                         if (pte_swp_soft_dirty(orig_pte))
819                                 pte = pte_swp_mksoft_dirty(pte);
820                         if (pte_swp_uffd_wp(orig_pte))
821                                 pte = pte_swp_mkuffd_wp(pte);
822                         set_pte_at(src_mm, addr, src_pte, pte);
823                 }
824         } else if (is_device_private_entry(entry)) {
825                 page = pfn_swap_entry_to_page(entry);
826
827                 /*
828                  * Update rss count even for unaddressable pages, as
829                  * they should treated just like normal pages in this
830                  * respect.
831                  *
832                  * We will likely want to have some new rss counters
833                  * for unaddressable pages, at some point. But for now
834                  * keep things as they are.
835                  */
836                 get_page(page);
837                 rss[mm_counter(page)]++;
838                 /* Cannot fail as these pages cannot get pinned. */
839                 BUG_ON(page_try_dup_anon_rmap(page, false, src_vma));
840
841                 /*
842                  * We do not preserve soft-dirty information, because so
843                  * far, checkpoint/restore is the only feature that
844                  * requires that. And checkpoint/restore does not work
845                  * when a device driver is involved (you cannot easily
846                  * save and restore device driver state).
847                  */
848                 if (is_writable_device_private_entry(entry) &&
849                     is_cow_mapping(vm_flags)) {
850                         entry = make_readable_device_private_entry(
851                                                         swp_offset(entry));
852                         pte = swp_entry_to_pte(entry);
853                         if (pte_swp_uffd_wp(orig_pte))
854                                 pte = pte_swp_mkuffd_wp(pte);
855                         set_pte_at(src_mm, addr, src_pte, pte);
856                 }
857         } else if (is_device_exclusive_entry(entry)) {
858                 /*
859                  * Make device exclusive entries present by restoring the
860                  * original entry then copying as for a present pte. Device
861                  * exclusive entries currently only support private writable
862                  * (ie. COW) mappings.
863                  */
864                 VM_BUG_ON(!is_cow_mapping(src_vma->vm_flags));
865                 if (try_restore_exclusive_pte(src_pte, src_vma, addr))
866                         return -EBUSY;
867                 return -ENOENT;
868         } else if (is_pte_marker_entry(entry)) {
869                 pte_marker marker = copy_pte_marker(entry, dst_vma);
870
871                 if (marker)
872                         set_pte_at(dst_mm, addr, dst_pte,
873                                    make_pte_marker(marker));
874                 return 0;
875         }
876         if (!userfaultfd_wp(dst_vma))
877                 pte = pte_swp_clear_uffd_wp(pte);
878         set_pte_at(dst_mm, addr, dst_pte, pte);
879         return 0;
880 }
881
882 /*
883  * Copy a present and normal page.
884  *
885  * NOTE! The usual case is that this isn't required;
886  * instead, the caller can just increase the page refcount
887  * and re-use the pte the traditional way.
888  *
889  * And if we need a pre-allocated page but don't yet have
890  * one, return a negative error to let the preallocation
891  * code know so that it can do so outside the page table
892  * lock.
893  */
894 static inline int
895 copy_present_page(struct vm_area_struct *dst_vma, struct vm_area_struct *src_vma,
896                   pte_t *dst_pte, pte_t *src_pte, unsigned long addr, int *rss,
897                   struct folio **prealloc, struct page *page)
898 {
899         struct folio *new_folio;
900         pte_t pte;
901
902         new_folio = *prealloc;
903         if (!new_folio)
904                 return -EAGAIN;
905
906         /*
907          * We have a prealloc page, all good!  Take it
908          * over and copy the page & arm it.
909          */
910         *prealloc = NULL;
911         copy_user_highpage(&new_folio->page, page, addr, src_vma);
912         __folio_mark_uptodate(new_folio);
913         folio_add_new_anon_rmap(new_folio, dst_vma, addr);
914         folio_add_lru_vma(new_folio, dst_vma);
915         rss[MM_ANONPAGES]++;
916
917         /* All done, just insert the new page copy in the child */
918         pte = mk_pte(&new_folio->page, dst_vma->vm_page_prot);
919         pte = maybe_mkwrite(pte_mkdirty(pte), dst_vma);
920         if (userfaultfd_pte_wp(dst_vma, ptep_get(src_pte)))
921                 /* Uffd-wp needs to be delivered to dest pte as well */
922                 pte = pte_mkuffd_wp(pte);
923         set_pte_at(dst_vma->vm_mm, addr, dst_pte, pte);
924         return 0;
925 }
926
927 /*
928  * Copy one pte.  Returns 0 if succeeded, or -EAGAIN if one preallocated page
929  * is required to copy this pte.
930  */
931 static inline int
932 copy_present_pte(struct vm_area_struct *dst_vma, struct vm_area_struct *src_vma,
933                  pte_t *dst_pte, pte_t *src_pte, unsigned long addr, int *rss,
934                  struct folio **prealloc)
935 {
936         struct mm_struct *src_mm = src_vma->vm_mm;
937         unsigned long vm_flags = src_vma->vm_flags;
938         pte_t pte = ptep_get(src_pte);
939         struct page *page;
940         struct folio *folio;
941
942         page = vm_normal_page(src_vma, addr, pte);
943         if (page)
944                 folio = page_folio(page);
945         if (page && folio_test_anon(folio)) {
946                 /*
947                  * If this page may have been pinned by the parent process,
948                  * copy the page immediately for the child so that we'll always
949                  * guarantee the pinned page won't be randomly replaced in the
950                  * future.
951                  */
952                 folio_get(folio);
953                 if (unlikely(page_try_dup_anon_rmap(page, false, src_vma))) {
954                         /* Page may be pinned, we have to copy. */
955                         folio_put(folio);
956                         return copy_present_page(dst_vma, src_vma, dst_pte, src_pte,
957                                                  addr, rss, prealloc, page);
958                 }
959                 rss[MM_ANONPAGES]++;
960         } else if (page) {
961                 folio_get(folio);
962                 page_dup_file_rmap(page, false);
963                 rss[mm_counter_file(page)]++;
964         }
965
966         /*
967          * If it's a COW mapping, write protect it both
968          * in the parent and the child
969          */
970         if (is_cow_mapping(vm_flags) && pte_write(pte)) {
971                 ptep_set_wrprotect(src_mm, addr, src_pte);
972                 pte = pte_wrprotect(pte);
973         }
974         VM_BUG_ON(page && folio_test_anon(folio) && PageAnonExclusive(page));
975
976         /*
977          * If it's a shared mapping, mark it clean in
978          * the child
979          */
980         if (vm_flags & VM_SHARED)
981                 pte = pte_mkclean(pte);
982         pte = pte_mkold(pte);
983
984         if (!userfaultfd_wp(dst_vma))
985                 pte = pte_clear_uffd_wp(pte);
986
987         set_pte_at(dst_vma->vm_mm, addr, dst_pte, pte);
988         return 0;
989 }
990
991 static inline struct folio *page_copy_prealloc(struct mm_struct *src_mm,
992                 struct vm_area_struct *vma, unsigned long addr)
993 {
994         struct folio *new_folio;
995
996         new_folio = vma_alloc_folio(GFP_HIGHUSER_MOVABLE, 0, vma, addr, false);
997         if (!new_folio)
998                 return NULL;
999
1000         if (mem_cgroup_charge(new_folio, src_mm, GFP_KERNEL)) {
1001                 folio_put(new_folio);
1002                 return NULL;
1003         }
1004         folio_throttle_swaprate(new_folio, GFP_KERNEL);
1005
1006         return new_folio;
1007 }
1008
1009 static int
1010 copy_pte_range(struct vm_area_struct *dst_vma, struct vm_area_struct *src_vma,
1011                pmd_t *dst_pmd, pmd_t *src_pmd, unsigned long addr,
1012                unsigned long end)
1013 {
1014         struct mm_struct *dst_mm = dst_vma->vm_mm;
1015         struct mm_struct *src_mm = src_vma->vm_mm;
1016         pte_t *orig_src_pte, *orig_dst_pte;
1017         pte_t *src_pte, *dst_pte;
1018         pte_t ptent;
1019         spinlock_t *src_ptl, *dst_ptl;
1020         int progress, ret = 0;
1021         int rss[NR_MM_COUNTERS];
1022         swp_entry_t entry = (swp_entry_t){0};
1023         struct folio *prealloc = NULL;
1024
1025 again:
1026         progress = 0;
1027         init_rss_vec(rss);
1028
1029         /*
1030          * copy_pmd_range()'s prior pmd_none_or_clear_bad(src_pmd), and the
1031          * error handling here, assume that exclusive mmap_lock on dst and src
1032          * protects anon from unexpected THP transitions; with shmem and file
1033          * protected by mmap_lock-less collapse skipping areas with anon_vma
1034          * (whereas vma_needs_copy() skips areas without anon_vma).  A rework
1035          * can remove such assumptions later, but this is good enough for now.
1036          */
1037         dst_pte = pte_alloc_map_lock(dst_mm, dst_pmd, addr, &dst_ptl);
1038         if (!dst_pte) {
1039                 ret = -ENOMEM;
1040                 goto out;
1041         }
1042         src_pte = pte_offset_map_nolock(src_mm, src_pmd, addr, &src_ptl);
1043         if (!src_pte) {
1044                 pte_unmap_unlock(dst_pte, dst_ptl);
1045                 /* ret == 0 */
1046                 goto out;
1047         }
1048         spin_lock_nested(src_ptl, SINGLE_DEPTH_NESTING);
1049         orig_src_pte = src_pte;
1050         orig_dst_pte = dst_pte;
1051         arch_enter_lazy_mmu_mode();
1052
1053         do {
1054                 /*
1055                  * We are holding two locks at this point - either of them
1056                  * could generate latencies in another task on another CPU.
1057                  */
1058                 if (progress >= 32) {
1059                         progress = 0;
1060                         if (need_resched() ||
1061                             spin_needbreak(src_ptl) || spin_needbreak(dst_ptl))
1062                                 break;
1063                 }
1064                 ptent = ptep_get(src_pte);
1065                 if (pte_none(ptent)) {
1066                         progress++;
1067                         continue;
1068                 }
1069                 if (unlikely(!pte_present(ptent))) {
1070                         ret = copy_nonpresent_pte(dst_mm, src_mm,
1071                                                   dst_pte, src_pte,
1072                                                   dst_vma, src_vma,
1073                                                   addr, rss);
1074                         if (ret == -EIO) {
1075                                 entry = pte_to_swp_entry(ptep_get(src_pte));
1076                                 break;
1077                         } else if (ret == -EBUSY) {
1078                                 break;
1079                         } else if (!ret) {
1080                                 progress += 8;
1081                                 continue;
1082                         }
1083
1084                         /*
1085                          * Device exclusive entry restored, continue by copying
1086                          * the now present pte.
1087                          */
1088                         WARN_ON_ONCE(ret != -ENOENT);
1089                 }
1090                 /* copy_present_pte() will clear `*prealloc' if consumed */
1091                 ret = copy_present_pte(dst_vma, src_vma, dst_pte, src_pte,
1092                                        addr, rss, &prealloc);
1093                 /*
1094                  * If we need a pre-allocated page for this pte, drop the
1095                  * locks, allocate, and try again.
1096                  */
1097                 if (unlikely(ret == -EAGAIN))
1098                         break;
1099                 if (unlikely(prealloc)) {
1100                         /*
1101                          * pre-alloc page cannot be reused by next time so as
1102                          * to strictly follow mempolicy (e.g., alloc_page_vma()
1103                          * will allocate page according to address).  This
1104                          * could only happen if one pinned pte changed.
1105                          */
1106                         folio_put(prealloc);
1107                         prealloc = NULL;
1108                 }
1109                 progress += 8;
1110         } while (dst_pte++, src_pte++, addr += PAGE_SIZE, addr != end);
1111
1112         arch_leave_lazy_mmu_mode();
1113         pte_unmap_unlock(orig_src_pte, src_ptl);
1114         add_mm_rss_vec(dst_mm, rss);
1115         pte_unmap_unlock(orig_dst_pte, dst_ptl);
1116         cond_resched();
1117
1118         if (ret == -EIO) {
1119                 VM_WARN_ON_ONCE(!entry.val);
1120                 if (add_swap_count_continuation(entry, GFP_KERNEL) < 0) {
1121                         ret = -ENOMEM;
1122                         goto out;
1123                 }
1124                 entry.val = 0;
1125         } else if (ret == -EBUSY) {
1126                 goto out;
1127         } else if (ret ==  -EAGAIN) {
1128                 prealloc = page_copy_prealloc(src_mm, src_vma, addr);
1129                 if (!prealloc)
1130                         return -ENOMEM;
1131         } else if (ret) {
1132                 VM_WARN_ON_ONCE(1);
1133         }
1134
1135         /* We've captured and resolved the error. Reset, try again. */
1136         ret = 0;
1137
1138         if (addr != end)
1139                 goto again;
1140 out:
1141         if (unlikely(prealloc))
1142                 folio_put(prealloc);
1143         return ret;
1144 }
1145
1146 static inline int
1147 copy_pmd_range(struct vm_area_struct *dst_vma, struct vm_area_struct *src_vma,
1148                pud_t *dst_pud, pud_t *src_pud, unsigned long addr,
1149                unsigned long end)
1150 {
1151         struct mm_struct *dst_mm = dst_vma->vm_mm;
1152         struct mm_struct *src_mm = src_vma->vm_mm;
1153         pmd_t *src_pmd, *dst_pmd;
1154         unsigned long next;
1155
1156         dst_pmd = pmd_alloc(dst_mm, dst_pud, addr);
1157         if (!dst_pmd)
1158                 return -ENOMEM;
1159         src_pmd = pmd_offset(src_pud, addr);
1160         do {
1161                 next = pmd_addr_end(addr, end);
1162                 if (is_swap_pmd(*src_pmd) || pmd_trans_huge(*src_pmd)
1163                         || pmd_devmap(*src_pmd)) {
1164                         int err;
1165                         VM_BUG_ON_VMA(next-addr != HPAGE_PMD_SIZE, src_vma);
1166                         err = copy_huge_pmd(dst_mm, src_mm, dst_pmd, src_pmd,
1167                                             addr, dst_vma, src_vma);
1168                         if (err == -ENOMEM)
1169                                 return -ENOMEM;
1170                         if (!err)
1171                                 continue;
1172                         /* fall through */
1173                 }
1174                 if (pmd_none_or_clear_bad(src_pmd))
1175                         continue;
1176                 if (copy_pte_range(dst_vma, src_vma, dst_pmd, src_pmd,
1177                                    addr, next))
1178                         return -ENOMEM;
1179         } while (dst_pmd++, src_pmd++, addr = next, addr != end);
1180         return 0;
1181 }
1182
1183 static inline int
1184 copy_pud_range(struct vm_area_struct *dst_vma, struct vm_area_struct *src_vma,
1185                p4d_t *dst_p4d, p4d_t *src_p4d, unsigned long addr,
1186                unsigned long end)
1187 {
1188         struct mm_struct *dst_mm = dst_vma->vm_mm;
1189         struct mm_struct *src_mm = src_vma->vm_mm;
1190         pud_t *src_pud, *dst_pud;
1191         unsigned long next;
1192
1193         dst_pud = pud_alloc(dst_mm, dst_p4d, addr);
1194         if (!dst_pud)
1195                 return -ENOMEM;
1196         src_pud = pud_offset(src_p4d, addr);
1197         do {
1198                 next = pud_addr_end(addr, end);
1199                 if (pud_trans_huge(*src_pud) || pud_devmap(*src_pud)) {
1200                         int err;
1201
1202                         VM_BUG_ON_VMA(next-addr != HPAGE_PUD_SIZE, src_vma);
1203                         err = copy_huge_pud(dst_mm, src_mm,
1204                                             dst_pud, src_pud, addr, src_vma);
1205                         if (err == -ENOMEM)
1206                                 return -ENOMEM;
1207                         if (!err)
1208                                 continue;
1209                         /* fall through */
1210                 }
1211                 if (pud_none_or_clear_bad(src_pud))
1212                         continue;
1213                 if (copy_pmd_range(dst_vma, src_vma, dst_pud, src_pud,
1214                                    addr, next))
1215                         return -ENOMEM;
1216         } while (dst_pud++, src_pud++, addr = next, addr != end);
1217         return 0;
1218 }
1219
1220 static inline int
1221 copy_p4d_range(struct vm_area_struct *dst_vma, struct vm_area_struct *src_vma,
1222                pgd_t *dst_pgd, pgd_t *src_pgd, unsigned long addr,
1223                unsigned long end)
1224 {
1225         struct mm_struct *dst_mm = dst_vma->vm_mm;
1226         p4d_t *src_p4d, *dst_p4d;
1227         unsigned long next;
1228
1229         dst_p4d = p4d_alloc(dst_mm, dst_pgd, addr);
1230         if (!dst_p4d)
1231                 return -ENOMEM;
1232         src_p4d = p4d_offset(src_pgd, addr);
1233         do {
1234                 next = p4d_addr_end(addr, end);
1235                 if (p4d_none_or_clear_bad(src_p4d))
1236                         continue;
1237                 if (copy_pud_range(dst_vma, src_vma, dst_p4d, src_p4d,
1238                                    addr, next))
1239                         return -ENOMEM;
1240         } while (dst_p4d++, src_p4d++, addr = next, addr != end);
1241         return 0;
1242 }
1243
1244 /*
1245  * Return true if the vma needs to copy the pgtable during this fork().  Return
1246  * false when we can speed up fork() by allowing lazy page faults later until
1247  * when the child accesses the memory range.
1248  */
1249 static bool
1250 vma_needs_copy(struct vm_area_struct *dst_vma, struct vm_area_struct *src_vma)
1251 {
1252         /*
1253          * Always copy pgtables when dst_vma has uffd-wp enabled even if it's
1254          * file-backed (e.g. shmem). Because when uffd-wp is enabled, pgtable
1255          * contains uffd-wp protection information, that's something we can't
1256          * retrieve from page cache, and skip copying will lose those info.
1257          */
1258         if (userfaultfd_wp(dst_vma))
1259                 return true;
1260
1261         if (src_vma->vm_flags & (VM_PFNMAP | VM_MIXEDMAP))
1262                 return true;
1263
1264         if (src_vma->anon_vma)
1265                 return true;
1266
1267         /*
1268          * Don't copy ptes where a page fault will fill them correctly.  Fork
1269          * becomes much lighter when there are big shared or private readonly
1270          * mappings. The tradeoff is that copy_page_range is more efficient
1271          * than faulting.
1272          */
1273         return false;
1274 }
1275
1276 int
1277 copy_page_range(struct vm_area_struct *dst_vma, struct vm_area_struct *src_vma)
1278 {
1279         pgd_t *src_pgd, *dst_pgd;
1280         unsigned long next;
1281         unsigned long addr = src_vma->vm_start;
1282         unsigned long end = src_vma->vm_end;
1283         struct mm_struct *dst_mm = dst_vma->vm_mm;
1284         struct mm_struct *src_mm = src_vma->vm_mm;
1285         struct mmu_notifier_range range;
1286         bool is_cow;
1287         int ret;
1288
1289         if (!vma_needs_copy(dst_vma, src_vma))
1290                 return 0;
1291
1292         if (is_vm_hugetlb_page(src_vma))
1293                 return copy_hugetlb_page_range(dst_mm, src_mm, dst_vma, src_vma);
1294
1295         if (unlikely(src_vma->vm_flags & VM_PFNMAP)) {
1296                 /*
1297                  * We do not free on error cases below as remove_vma
1298                  * gets called on error from higher level routine
1299                  */
1300                 ret = track_pfn_copy(src_vma);
1301                 if (ret)
1302                         return ret;
1303         }
1304
1305         /*
1306          * We need to invalidate the secondary MMU mappings only when
1307          * there could be a permission downgrade on the ptes of the
1308          * parent mm. And a permission downgrade will only happen if
1309          * is_cow_mapping() returns true.
1310          */
1311         is_cow = is_cow_mapping(src_vma->vm_flags);
1312
1313         if (is_cow) {
1314                 mmu_notifier_range_init(&range, MMU_NOTIFY_PROTECTION_PAGE,
1315                                         0, src_mm, addr, end);
1316                 mmu_notifier_invalidate_range_start(&range);
1317                 /*
1318                  * Disabling preemption is not needed for the write side, as
1319                  * the read side doesn't spin, but goes to the mmap_lock.
1320                  *
1321                  * Use the raw variant of the seqcount_t write API to avoid
1322                  * lockdep complaining about preemptibility.
1323                  */
1324                 vma_assert_write_locked(src_vma);
1325                 raw_write_seqcount_begin(&src_mm->write_protect_seq);
1326         }
1327
1328         ret = 0;
1329         dst_pgd = pgd_offset(dst_mm, addr);
1330         src_pgd = pgd_offset(src_mm, addr);
1331         do {
1332                 next = pgd_addr_end(addr, end);
1333                 if (pgd_none_or_clear_bad(src_pgd))
1334                         continue;
1335                 if (unlikely(copy_p4d_range(dst_vma, src_vma, dst_pgd, src_pgd,
1336                                             addr, next))) {
1337                         untrack_pfn_clear(dst_vma);
1338                         ret = -ENOMEM;
1339                         break;
1340                 }
1341         } while (dst_pgd++, src_pgd++, addr = next, addr != end);
1342
1343         if (is_cow) {
1344                 raw_write_seqcount_end(&src_mm->write_protect_seq);
1345                 mmu_notifier_invalidate_range_end(&range);
1346         }
1347         return ret;
1348 }
1349
1350 /* Whether we should zap all COWed (private) pages too */
1351 static inline bool should_zap_cows(struct zap_details *details)
1352 {
1353         /* By default, zap all pages */
1354         if (!details)
1355                 return true;
1356
1357         /* Or, we zap COWed pages only if the caller wants to */
1358         return details->even_cows;
1359 }
1360
1361 /* Decides whether we should zap this page with the page pointer specified */
1362 static inline bool should_zap_page(struct zap_details *details, struct page *page)
1363 {
1364         /* If we can make a decision without *page.. */
1365         if (should_zap_cows(details))
1366                 return true;
1367
1368         /* E.g. the caller passes NULL for the case of a zero page */
1369         if (!page)
1370                 return true;
1371
1372         /* Otherwise we should only zap non-anon pages */
1373         return !PageAnon(page);
1374 }
1375
1376 static inline bool zap_drop_file_uffd_wp(struct zap_details *details)
1377 {
1378         if (!details)
1379                 return false;
1380
1381         return details->zap_flags & ZAP_FLAG_DROP_MARKER;
1382 }
1383
1384 /*
1385  * This function makes sure that we'll replace the none pte with an uffd-wp
1386  * swap special pte marker when necessary. Must be with the pgtable lock held.
1387  */
1388 static inline void
1389 zap_install_uffd_wp_if_needed(struct vm_area_struct *vma,
1390                               unsigned long addr, pte_t *pte,
1391                               struct zap_details *details, pte_t pteval)
1392 {
1393         /* Zap on anonymous always means dropping everything */
1394         if (vma_is_anonymous(vma))
1395                 return;
1396
1397         if (zap_drop_file_uffd_wp(details))
1398                 return;
1399
1400         pte_install_uffd_wp_if_needed(vma, addr, pte, pteval);
1401 }
1402
1403 static unsigned long zap_pte_range(struct mmu_gather *tlb,
1404                                 struct vm_area_struct *vma, pmd_t *pmd,
1405                                 unsigned long addr, unsigned long end,
1406                                 struct zap_details *details)
1407 {
1408         struct mm_struct *mm = tlb->mm;
1409         int force_flush = 0;
1410         int rss[NR_MM_COUNTERS];
1411         spinlock_t *ptl;
1412         pte_t *start_pte;
1413         pte_t *pte;
1414         swp_entry_t entry;
1415
1416         tlb_change_page_size(tlb, PAGE_SIZE);
1417         init_rss_vec(rss);
1418         start_pte = pte = pte_offset_map_lock(mm, pmd, addr, &ptl);
1419         if (!pte)
1420                 return addr;
1421
1422         flush_tlb_batched_pending(mm);
1423         arch_enter_lazy_mmu_mode();
1424         do {
1425                 pte_t ptent = ptep_get(pte);
1426                 struct page *page;
1427
1428                 if (pte_none(ptent))
1429                         continue;
1430
1431                 if (need_resched())
1432                         break;
1433
1434                 if (pte_present(ptent)) {
1435                         unsigned int delay_rmap;
1436
1437                         page = vm_normal_page(vma, addr, ptent);
1438                         if (unlikely(!should_zap_page(details, page)))
1439                                 continue;
1440                         ptent = ptep_get_and_clear_full(mm, addr, pte,
1441                                                         tlb->fullmm);
1442                         arch_check_zapped_pte(vma, ptent);
1443                         tlb_remove_tlb_entry(tlb, pte, addr);
1444                         zap_install_uffd_wp_if_needed(vma, addr, pte, details,
1445                                                       ptent);
1446                         if (unlikely(!page)) {
1447                                 ksm_might_unmap_zero_page(mm, ptent);
1448                                 continue;
1449                         }
1450
1451                         delay_rmap = 0;
1452                         if (!PageAnon(page)) {
1453                                 if (pte_dirty(ptent)) {
1454                                         set_page_dirty(page);
1455                                         if (tlb_delay_rmap(tlb)) {
1456                                                 delay_rmap = 1;
1457                                                 force_flush = 1;
1458                                         }
1459                                 }
1460                                 if (pte_young(ptent) && likely(vma_has_recency(vma)))
1461                                         mark_page_accessed(page);
1462                         }
1463                         rss[mm_counter(page)]--;
1464                         if (!delay_rmap) {
1465                                 page_remove_rmap(page, vma, false);
1466                                 if (unlikely(page_mapcount(page) < 0))
1467                                         print_bad_pte(vma, addr, ptent, page);
1468                         }
1469                         if (unlikely(__tlb_remove_page(tlb, page, delay_rmap))) {
1470                                 force_flush = 1;
1471                                 addr += PAGE_SIZE;
1472                                 break;
1473                         }
1474                         continue;
1475                 }
1476
1477                 entry = pte_to_swp_entry(ptent);
1478                 if (is_device_private_entry(entry) ||
1479                     is_device_exclusive_entry(entry)) {
1480                         page = pfn_swap_entry_to_page(entry);
1481                         if (unlikely(!should_zap_page(details, page)))
1482                                 continue;
1483                         /*
1484                          * Both device private/exclusive mappings should only
1485                          * work with anonymous page so far, so we don't need to
1486                          * consider uffd-wp bit when zap. For more information,
1487                          * see zap_install_uffd_wp_if_needed().
1488                          */
1489                         WARN_ON_ONCE(!vma_is_anonymous(vma));
1490                         rss[mm_counter(page)]--;
1491                         if (is_device_private_entry(entry))
1492                                 page_remove_rmap(page, vma, false);
1493                         put_page(page);
1494                 } else if (!non_swap_entry(entry)) {
1495                         /* Genuine swap entry, hence a private anon page */
1496                         if (!should_zap_cows(details))
1497                                 continue;
1498                         rss[MM_SWAPENTS]--;
1499                         if (unlikely(!free_swap_and_cache(entry)))
1500                                 print_bad_pte(vma, addr, ptent, NULL);
1501                 } else if (is_migration_entry(entry)) {
1502                         page = pfn_swap_entry_to_page(entry);
1503                         if (!should_zap_page(details, page))
1504                                 continue;
1505                         rss[mm_counter(page)]--;
1506                 } else if (pte_marker_entry_uffd_wp(entry)) {
1507                         /*
1508                          * For anon: always drop the marker; for file: only
1509                          * drop the marker if explicitly requested.
1510                          */
1511                         if (!vma_is_anonymous(vma) &&
1512                             !zap_drop_file_uffd_wp(details))
1513                                 continue;
1514                 } else if (is_hwpoison_entry(entry) ||
1515                            is_poisoned_swp_entry(entry)) {
1516                         if (!should_zap_cows(details))
1517                                 continue;
1518                 } else {
1519                         /* We should have covered all the swap entry types */
1520                         WARN_ON_ONCE(1);
1521                 }
1522                 pte_clear_not_present_full(mm, addr, pte, tlb->fullmm);
1523                 zap_install_uffd_wp_if_needed(vma, addr, pte, details, ptent);
1524         } while (pte++, addr += PAGE_SIZE, addr != end);
1525
1526         add_mm_rss_vec(mm, rss);
1527         arch_leave_lazy_mmu_mode();
1528
1529         /* Do the actual TLB flush before dropping ptl */
1530         if (force_flush) {
1531                 tlb_flush_mmu_tlbonly(tlb);
1532                 tlb_flush_rmaps(tlb, vma);
1533         }
1534         pte_unmap_unlock(start_pte, ptl);
1535
1536         /*
1537          * If we forced a TLB flush (either due to running out of
1538          * batch buffers or because we needed to flush dirty TLB
1539          * entries before releasing the ptl), free the batched
1540          * memory too. Come back again if we didn't do everything.
1541          */
1542         if (force_flush)
1543                 tlb_flush_mmu(tlb);
1544
1545         return addr;
1546 }
1547
1548 static inline unsigned long zap_pmd_range(struct mmu_gather *tlb,
1549                                 struct vm_area_struct *vma, pud_t *pud,
1550                                 unsigned long addr, unsigned long end,
1551                                 struct zap_details *details)
1552 {
1553         pmd_t *pmd;
1554         unsigned long next;
1555
1556         pmd = pmd_offset(pud, addr);
1557         do {
1558                 next = pmd_addr_end(addr, end);
1559                 if (is_swap_pmd(*pmd) || pmd_trans_huge(*pmd) || pmd_devmap(*pmd)) {
1560                         if (next - addr != HPAGE_PMD_SIZE)
1561                                 __split_huge_pmd(vma, pmd, addr, false, NULL);
1562                         else if (zap_huge_pmd(tlb, vma, pmd, addr)) {
1563                                 addr = next;
1564                                 continue;
1565                         }
1566                         /* fall through */
1567                 } else if (details && details->single_folio &&
1568                            folio_test_pmd_mappable(details->single_folio) &&
1569                            next - addr == HPAGE_PMD_SIZE && pmd_none(*pmd)) {
1570                         spinlock_t *ptl = pmd_lock(tlb->mm, pmd);
1571                         /*
1572                          * Take and drop THP pmd lock so that we cannot return
1573                          * prematurely, while zap_huge_pmd() has cleared *pmd,
1574                          * but not yet decremented compound_mapcount().
1575                          */
1576                         spin_unlock(ptl);
1577                 }
1578                 if (pmd_none(*pmd)) {
1579                         addr = next;
1580                         continue;
1581                 }
1582                 addr = zap_pte_range(tlb, vma, pmd, addr, next, details);
1583                 if (addr != next)
1584                         pmd--;
1585         } while (pmd++, cond_resched(), addr != end);
1586
1587         return addr;
1588 }
1589
1590 static inline unsigned long zap_pud_range(struct mmu_gather *tlb,
1591                                 struct vm_area_struct *vma, p4d_t *p4d,
1592                                 unsigned long addr, unsigned long end,
1593                                 struct zap_details *details)
1594 {
1595         pud_t *pud;
1596         unsigned long next;
1597
1598         pud = pud_offset(p4d, addr);
1599         do {
1600                 next = pud_addr_end(addr, end);
1601                 if (pud_trans_huge(*pud) || pud_devmap(*pud)) {
1602                         if (next - addr != HPAGE_PUD_SIZE) {
1603                                 mmap_assert_locked(tlb->mm);
1604                                 split_huge_pud(vma, pud, addr);
1605                         } else if (zap_huge_pud(tlb, vma, pud, addr))
1606                                 goto next;
1607                         /* fall through */
1608                 }
1609                 if (pud_none_or_clear_bad(pud))
1610                         continue;
1611                 next = zap_pmd_range(tlb, vma, pud, addr, next, details);
1612 next:
1613                 cond_resched();
1614         } while (pud++, addr = next, addr != end);
1615
1616         return addr;
1617 }
1618
1619 static inline unsigned long zap_p4d_range(struct mmu_gather *tlb,
1620                                 struct vm_area_struct *vma, pgd_t *pgd,
1621                                 unsigned long addr, unsigned long end,
1622                                 struct zap_details *details)
1623 {
1624         p4d_t *p4d;
1625         unsigned long next;
1626
1627         p4d = p4d_offset(pgd, addr);
1628         do {
1629                 next = p4d_addr_end(addr, end);
1630                 if (p4d_none_or_clear_bad(p4d))
1631                         continue;
1632                 next = zap_pud_range(tlb, vma, p4d, addr, next, details);
1633         } while (p4d++, addr = next, addr != end);
1634
1635         return addr;
1636 }
1637
1638 void unmap_page_range(struct mmu_gather *tlb,
1639                              struct vm_area_struct *vma,
1640                              unsigned long addr, unsigned long end,
1641                              struct zap_details *details)
1642 {
1643         pgd_t *pgd;
1644         unsigned long next;
1645
1646         BUG_ON(addr >= end);
1647         tlb_start_vma(tlb, vma);
1648         pgd = pgd_offset(vma->vm_mm, addr);
1649         do {
1650                 next = pgd_addr_end(addr, end);
1651                 if (pgd_none_or_clear_bad(pgd))
1652                         continue;
1653                 next = zap_p4d_range(tlb, vma, pgd, addr, next, details);
1654         } while (pgd++, addr = next, addr != end);
1655         tlb_end_vma(tlb, vma);
1656 }
1657
1658
1659 static void unmap_single_vma(struct mmu_gather *tlb,
1660                 struct vm_area_struct *vma, unsigned long start_addr,
1661                 unsigned long end_addr,
1662                 struct zap_details *details, bool mm_wr_locked)
1663 {
1664         unsigned long start = max(vma->vm_start, start_addr);
1665         unsigned long end;
1666
1667         if (start >= vma->vm_end)
1668                 return;
1669         end = min(vma->vm_end, end_addr);
1670         if (end <= vma->vm_start)
1671                 return;
1672
1673         if (vma->vm_file)
1674                 uprobe_munmap(vma, start, end);
1675
1676         if (unlikely(vma->vm_flags & VM_PFNMAP))
1677                 untrack_pfn(vma, 0, 0, mm_wr_locked);
1678
1679         if (start != end) {
1680                 if (unlikely(is_vm_hugetlb_page(vma))) {
1681                         /*
1682                          * It is undesirable to test vma->vm_file as it
1683                          * should be non-null for valid hugetlb area.
1684                          * However, vm_file will be NULL in the error
1685                          * cleanup path of mmap_region. When
1686                          * hugetlbfs ->mmap method fails,
1687                          * mmap_region() nullifies vma->vm_file
1688                          * before calling this function to clean up.
1689                          * Since no pte has actually been setup, it is
1690                          * safe to do nothing in this case.
1691                          */
1692                         if (vma->vm_file) {
1693                                 zap_flags_t zap_flags = details ?
1694                                     details->zap_flags : 0;
1695                                 __unmap_hugepage_range(tlb, vma, start, end,
1696                                                              NULL, zap_flags);
1697                         }
1698                 } else
1699                         unmap_page_range(tlb, vma, start, end, details);
1700         }
1701 }
1702
1703 /**
1704  * unmap_vmas - unmap a range of memory covered by a list of vma's
1705  * @tlb: address of the caller's struct mmu_gather
1706  * @mas: the maple state
1707  * @vma: the starting vma
1708  * @start_addr: virtual address at which to start unmapping
1709  * @end_addr: virtual address at which to end unmapping
1710  * @tree_end: The maximum index to check
1711  * @mm_wr_locked: lock flag
1712  *
1713  * Unmap all pages in the vma list.
1714  *
1715  * Only addresses between `start' and `end' will be unmapped.
1716  *
1717  * The VMA list must be sorted in ascending virtual address order.
1718  *
1719  * unmap_vmas() assumes that the caller will flush the whole unmapped address
1720  * range after unmap_vmas() returns.  So the only responsibility here is to
1721  * ensure that any thus-far unmapped pages are flushed before unmap_vmas()
1722  * drops the lock and schedules.
1723  */
1724 void unmap_vmas(struct mmu_gather *tlb, struct ma_state *mas,
1725                 struct vm_area_struct *vma, unsigned long start_addr,
1726                 unsigned long end_addr, unsigned long tree_end,
1727                 bool mm_wr_locked)
1728 {
1729         struct mmu_notifier_range range;
1730         struct zap_details details = {
1731                 .zap_flags = ZAP_FLAG_DROP_MARKER | ZAP_FLAG_UNMAP,
1732                 /* Careful - we need to zap private pages too! */
1733                 .even_cows = true,
1734         };
1735
1736         mmu_notifier_range_init(&range, MMU_NOTIFY_UNMAP, 0, vma->vm_mm,
1737                                 start_addr, end_addr);
1738         mmu_notifier_invalidate_range_start(&range);
1739         do {
1740                 unsigned long start = start_addr;
1741                 unsigned long end = end_addr;
1742                 hugetlb_zap_begin(vma, &start, &end);
1743                 unmap_single_vma(tlb, vma, start, end, &details,
1744                                  mm_wr_locked);
1745                 hugetlb_zap_end(vma, &details);
1746         } while ((vma = mas_find(mas, tree_end - 1)) != NULL);
1747         mmu_notifier_invalidate_range_end(&range);
1748 }
1749
1750 /**
1751  * zap_page_range_single - remove user pages in a given range
1752  * @vma: vm_area_struct holding the applicable pages
1753  * @address: starting address of pages to zap
1754  * @size: number of bytes to zap
1755  * @details: details of shared cache invalidation
1756  *
1757  * The range must fit into one VMA.
1758  */
1759 void zap_page_range_single(struct vm_area_struct *vma, unsigned long address,
1760                 unsigned long size, struct zap_details *details)
1761 {
1762         const unsigned long end = address + size;
1763         struct mmu_notifier_range range;
1764         struct mmu_gather tlb;
1765
1766         lru_add_drain();
1767         mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma->vm_mm,
1768                                 address, end);
1769         hugetlb_zap_begin(vma, &range.start, &range.end);
1770         tlb_gather_mmu(&tlb, vma->vm_mm);
1771         update_hiwater_rss(vma->vm_mm);
1772         mmu_notifier_invalidate_range_start(&range);
1773         /*
1774          * unmap 'address-end' not 'range.start-range.end' as range
1775          * could have been expanded for hugetlb pmd sharing.
1776          */
1777         unmap_single_vma(&tlb, vma, address, end, details, false);
1778         mmu_notifier_invalidate_range_end(&range);
1779         tlb_finish_mmu(&tlb);
1780         hugetlb_zap_end(vma, details);
1781 }
1782
1783 /**
1784  * zap_vma_ptes - remove ptes mapping the vma
1785  * @vma: vm_area_struct holding ptes to be zapped
1786  * @address: starting address of pages to zap
1787  * @size: number of bytes to zap
1788  *
1789  * This function only unmaps ptes assigned to VM_PFNMAP vmas.
1790  *
1791  * The entire address range must be fully contained within the vma.
1792  *
1793  */
1794 void zap_vma_ptes(struct vm_area_struct *vma, unsigned long address,
1795                 unsigned long size)
1796 {
1797         if (!range_in_vma(vma, address, address + size) ||
1798                         !(vma->vm_flags & VM_PFNMAP))
1799                 return;
1800
1801         zap_page_range_single(vma, address, size, NULL);
1802 }
1803 EXPORT_SYMBOL_GPL(zap_vma_ptes);
1804
1805 static pmd_t *walk_to_pmd(struct mm_struct *mm, unsigned long addr)
1806 {
1807         pgd_t *pgd;
1808         p4d_t *p4d;
1809         pud_t *pud;
1810         pmd_t *pmd;
1811
1812         pgd = pgd_offset(mm, addr);
1813         p4d = p4d_alloc(mm, pgd, addr);
1814         if (!p4d)
1815                 return NULL;
1816         pud = pud_alloc(mm, p4d, addr);
1817         if (!pud)
1818                 return NULL;
1819         pmd = pmd_alloc(mm, pud, addr);
1820         if (!pmd)
1821                 return NULL;
1822
1823         VM_BUG_ON(pmd_trans_huge(*pmd));
1824         return pmd;
1825 }
1826
1827 pte_t *__get_locked_pte(struct mm_struct *mm, unsigned long addr,
1828                         spinlock_t **ptl)
1829 {
1830         pmd_t *pmd = walk_to_pmd(mm, addr);
1831
1832         if (!pmd)
1833                 return NULL;
1834         return pte_alloc_map_lock(mm, pmd, addr, ptl);
1835 }
1836
1837 static int validate_page_before_insert(struct page *page)
1838 {
1839         if (PageAnon(page) || PageSlab(page) || page_has_type(page))
1840                 return -EINVAL;
1841         flush_dcache_page(page);
1842         return 0;
1843 }
1844
1845 static int insert_page_into_pte_locked(struct vm_area_struct *vma, pte_t *pte,
1846                         unsigned long addr, struct page *page, pgprot_t prot)
1847 {
1848         if (!pte_none(ptep_get(pte)))
1849                 return -EBUSY;
1850         /* Ok, finally just insert the thing.. */
1851         get_page(page);
1852         inc_mm_counter(vma->vm_mm, mm_counter_file(page));
1853         page_add_file_rmap(page, vma, false);
1854         set_pte_at(vma->vm_mm, addr, pte, mk_pte(page, prot));
1855         return 0;
1856 }
1857
1858 /*
1859  * This is the old fallback for page remapping.
1860  *
1861  * For historical reasons, it only allows reserved pages. Only
1862  * old drivers should use this, and they needed to mark their
1863  * pages reserved for the old functions anyway.
1864  */
1865 static int insert_page(struct vm_area_struct *vma, unsigned long addr,
1866                         struct page *page, pgprot_t prot)
1867 {
1868         int retval;
1869         pte_t *pte;
1870         spinlock_t *ptl;
1871
1872         retval = validate_page_before_insert(page);
1873         if (retval)
1874                 goto out;
1875         retval = -ENOMEM;
1876         pte = get_locked_pte(vma->vm_mm, addr, &ptl);
1877         if (!pte)
1878                 goto out;
1879         retval = insert_page_into_pte_locked(vma, pte, addr, page, prot);
1880         pte_unmap_unlock(pte, ptl);
1881 out:
1882         return retval;
1883 }
1884
1885 static int insert_page_in_batch_locked(struct vm_area_struct *vma, pte_t *pte,
1886                         unsigned long addr, struct page *page, pgprot_t prot)
1887 {
1888         int err;
1889
1890         if (!page_count(page))
1891                 return -EINVAL;
1892         err = validate_page_before_insert(page);
1893         if (err)
1894                 return err;
1895         return insert_page_into_pte_locked(vma, pte, addr, page, prot);
1896 }
1897
1898 /* insert_pages() amortizes the cost of spinlock operations
1899  * when inserting pages in a loop.
1900  */
1901 static int insert_pages(struct vm_area_struct *vma, unsigned long addr,
1902                         struct page **pages, unsigned long *num, pgprot_t prot)
1903 {
1904         pmd_t *pmd = NULL;
1905         pte_t *start_pte, *pte;
1906         spinlock_t *pte_lock;
1907         struct mm_struct *const mm = vma->vm_mm;
1908         unsigned long curr_page_idx = 0;
1909         unsigned long remaining_pages_total = *num;
1910         unsigned long pages_to_write_in_pmd;
1911         int ret;
1912 more:
1913         ret = -EFAULT;
1914         pmd = walk_to_pmd(mm, addr);
1915         if (!pmd)
1916                 goto out;
1917
1918         pages_to_write_in_pmd = min_t(unsigned long,
1919                 remaining_pages_total, PTRS_PER_PTE - pte_index(addr));
1920
1921         /* Allocate the PTE if necessary; takes PMD lock once only. */
1922         ret = -ENOMEM;
1923         if (pte_alloc(mm, pmd))
1924                 goto out;
1925
1926         while (pages_to_write_in_pmd) {
1927                 int pte_idx = 0;
1928                 const int batch_size = min_t(int, pages_to_write_in_pmd, 8);
1929
1930                 start_pte = pte_offset_map_lock(mm, pmd, addr, &pte_lock);
1931                 if (!start_pte) {
1932                         ret = -EFAULT;
1933                         goto out;
1934                 }
1935                 for (pte = start_pte; pte_idx < batch_size; ++pte, ++pte_idx) {
1936                         int err = insert_page_in_batch_locked(vma, pte,
1937                                 addr, pages[curr_page_idx], prot);
1938                         if (unlikely(err)) {
1939                                 pte_unmap_unlock(start_pte, pte_lock);
1940                                 ret = err;
1941                                 remaining_pages_total -= pte_idx;
1942                                 goto out;
1943                         }
1944                         addr += PAGE_SIZE;
1945                         ++curr_page_idx;
1946                 }
1947                 pte_unmap_unlock(start_pte, pte_lock);
1948                 pages_to_write_in_pmd -= batch_size;
1949                 remaining_pages_total -= batch_size;
1950         }
1951         if (remaining_pages_total)
1952                 goto more;
1953         ret = 0;
1954 out:
1955         *num = remaining_pages_total;
1956         return ret;
1957 }
1958
1959 /**
1960  * vm_insert_pages - insert multiple pages into user vma, batching the pmd lock.
1961  * @vma: user vma to map to
1962  * @addr: target start user address of these pages
1963  * @pages: source kernel pages
1964  * @num: in: number of pages to map. out: number of pages that were *not*
1965  * mapped. (0 means all pages were successfully mapped).
1966  *
1967  * Preferred over vm_insert_page() when inserting multiple pages.
1968  *
1969  * In case of error, we may have mapped a subset of the provided
1970  * pages. It is the caller's responsibility to account for this case.
1971  *
1972  * The same restrictions apply as in vm_insert_page().
1973  */
1974 int vm_insert_pages(struct vm_area_struct *vma, unsigned long addr,
1975                         struct page **pages, unsigned long *num)
1976 {
1977         const unsigned long end_addr = addr + (*num * PAGE_SIZE) - 1;
1978
1979         if (addr < vma->vm_start || end_addr >= vma->vm_end)
1980                 return -EFAULT;
1981         if (!(vma->vm_flags & VM_MIXEDMAP)) {
1982                 BUG_ON(mmap_read_trylock(vma->vm_mm));
1983                 BUG_ON(vma->vm_flags & VM_PFNMAP);
1984                 vm_flags_set(vma, VM_MIXEDMAP);
1985         }
1986         /* Defer page refcount checking till we're about to map that page. */
1987         return insert_pages(vma, addr, pages, num, vma->vm_page_prot);
1988 }
1989 EXPORT_SYMBOL(vm_insert_pages);
1990
1991 /**
1992  * vm_insert_page - insert single page into user vma
1993  * @vma: user vma to map to
1994  * @addr: target user address of this page
1995  * @page: source kernel page
1996  *
1997  * This allows drivers to insert individual pages they've allocated
1998  * into a user vma.
1999  *
2000  * The page has to be a nice clean _individual_ kernel allocation.
2001  * If you allocate a compound page, you need to have marked it as
2002  * such (__GFP_COMP), or manually just split the page up yourself
2003  * (see split_page()).
2004  *
2005  * NOTE! Traditionally this was done with "remap_pfn_range()" which
2006  * took an arbitrary page protection parameter. This doesn't allow
2007  * that. Your vma protection will have to be set up correctly, which
2008  * means that if you want a shared writable mapping, you'd better
2009  * ask for a shared writable mapping!
2010  *
2011  * The page does not need to be reserved.
2012  *
2013  * Usually this function is called from f_op->mmap() handler
2014  * under mm->mmap_lock write-lock, so it can change vma->vm_flags.
2015  * Caller must set VM_MIXEDMAP on vma if it wants to call this
2016  * function from other places, for example from page-fault handler.
2017  *
2018  * Return: %0 on success, negative error code otherwise.
2019  */
2020 int vm_insert_page(struct vm_area_struct *vma, unsigned long addr,
2021                         struct page *page)
2022 {
2023         if (addr < vma->vm_start || addr >= vma->vm_end)
2024                 return -EFAULT;
2025         if (!page_count(page))
2026                 return -EINVAL;
2027         if (!(vma->vm_flags & VM_MIXEDMAP)) {
2028                 BUG_ON(mmap_read_trylock(vma->vm_mm));
2029                 BUG_ON(vma->vm_flags & VM_PFNMAP);
2030                 vm_flags_set(vma, VM_MIXEDMAP);
2031         }
2032         return insert_page(vma, addr, page, vma->vm_page_prot);
2033 }
2034 EXPORT_SYMBOL(vm_insert_page);
2035
2036 /*
2037  * __vm_map_pages - maps range of kernel pages into user vma
2038  * @vma: user vma to map to
2039  * @pages: pointer to array of source kernel pages
2040  * @num: number of pages in page array
2041  * @offset: user's requested vm_pgoff
2042  *
2043  * This allows drivers to map range of kernel pages into a user vma.
2044  *
2045  * Return: 0 on success and error code otherwise.
2046  */
2047 static int __vm_map_pages(struct vm_area_struct *vma, struct page **pages,
2048                                 unsigned long num, unsigned long offset)
2049 {
2050         unsigned long count = vma_pages(vma);
2051         unsigned long uaddr = vma->vm_start;
2052         int ret, i;
2053
2054         /* Fail if the user requested offset is beyond the end of the object */
2055         if (offset >= num)
2056                 return -ENXIO;
2057
2058         /* Fail if the user requested size exceeds available object size */
2059         if (count > num - offset)
2060                 return -ENXIO;
2061
2062         for (i = 0; i < count; i++) {
2063                 ret = vm_insert_page(vma, uaddr, pages[offset + i]);
2064                 if (ret < 0)
2065                         return ret;
2066                 uaddr += PAGE_SIZE;
2067         }
2068
2069         return 0;
2070 }
2071
2072 /**
2073  * vm_map_pages - maps range of kernel pages starts with non zero offset
2074  * @vma: user vma to map to
2075  * @pages: pointer to array of source kernel pages
2076  * @num: number of pages in page array
2077  *
2078  * Maps an object consisting of @num pages, catering for the user's
2079  * requested vm_pgoff
2080  *
2081  * If we fail to insert any page into the vma, the function will return
2082  * immediately leaving any previously inserted pages present.  Callers
2083  * from the mmap handler may immediately return the error as their caller
2084  * will destroy the vma, removing any successfully inserted pages. Other
2085  * callers should make their own arrangements for calling unmap_region().
2086  *
2087  * Context: Process context. Called by mmap handlers.
2088  * Return: 0 on success and error code otherwise.
2089  */
2090 int vm_map_pages(struct vm_area_struct *vma, struct page **pages,
2091                                 unsigned long num)
2092 {
2093         return __vm_map_pages(vma, pages, num, vma->vm_pgoff);
2094 }
2095 EXPORT_SYMBOL(vm_map_pages);
2096
2097 /**
2098  * vm_map_pages_zero - map range of kernel pages starts with zero offset
2099  * @vma: user vma to map to
2100  * @pages: pointer to array of source kernel pages
2101  * @num: number of pages in page array
2102  *
2103  * Similar to vm_map_pages(), except that it explicitly sets the offset
2104  * to 0. This function is intended for the drivers that did not consider
2105  * vm_pgoff.
2106  *
2107  * Context: Process context. Called by mmap handlers.
2108  * Return: 0 on success and error code otherwise.
2109  */
2110 int vm_map_pages_zero(struct vm_area_struct *vma, struct page **pages,
2111                                 unsigned long num)
2112 {
2113         return __vm_map_pages(vma, pages, num, 0);
2114 }
2115 EXPORT_SYMBOL(vm_map_pages_zero);
2116
2117 static vm_fault_t insert_pfn(struct vm_area_struct *vma, unsigned long addr,
2118                         pfn_t pfn, pgprot_t prot, bool mkwrite)
2119 {
2120         struct mm_struct *mm = vma->vm_mm;
2121         pte_t *pte, entry;
2122         spinlock_t *ptl;
2123
2124         pte = get_locked_pte(mm, addr, &ptl);
2125         if (!pte)
2126                 return VM_FAULT_OOM;
2127         entry = ptep_get(pte);
2128         if (!pte_none(entry)) {
2129                 if (mkwrite) {
2130                         /*
2131                          * For read faults on private mappings the PFN passed
2132                          * in may not match the PFN we have mapped if the
2133                          * mapped PFN is a writeable COW page.  In the mkwrite
2134                          * case we are creating a writable PTE for a shared
2135                          * mapping and we expect the PFNs to match. If they
2136                          * don't match, we are likely racing with block
2137                          * allocation and mapping invalidation so just skip the
2138                          * update.
2139                          */
2140                         if (pte_pfn(entry) != pfn_t_to_pfn(pfn)) {
2141                                 WARN_ON_ONCE(!is_zero_pfn(pte_pfn(entry)));
2142                                 goto out_unlock;
2143                         }
2144                         entry = pte_mkyoung(entry);
2145                         entry = maybe_mkwrite(pte_mkdirty(entry), vma);
2146                         if (ptep_set_access_flags(vma, addr, pte, entry, 1))
2147                                 update_mmu_cache(vma, addr, pte);
2148                 }
2149                 goto out_unlock;
2150         }
2151
2152         /* Ok, finally just insert the thing.. */
2153         if (pfn_t_devmap(pfn))
2154                 entry = pte_mkdevmap(pfn_t_pte(pfn, prot));
2155         else
2156                 entry = pte_mkspecial(pfn_t_pte(pfn, prot));
2157
2158         if (mkwrite) {
2159                 entry = pte_mkyoung(entry);
2160                 entry = maybe_mkwrite(pte_mkdirty(entry), vma);
2161         }
2162
2163         set_pte_at(mm, addr, pte, entry);
2164         update_mmu_cache(vma, addr, pte); /* XXX: why not for insert_page? */
2165
2166 out_unlock:
2167         pte_unmap_unlock(pte, ptl);
2168         return VM_FAULT_NOPAGE;
2169 }
2170
2171 /**
2172  * vmf_insert_pfn_prot - insert single pfn into user vma with specified pgprot
2173  * @vma: user vma to map to
2174  * @addr: target user address of this page
2175  * @pfn: source kernel pfn
2176  * @pgprot: pgprot flags for the inserted page
2177  *
2178  * This is exactly like vmf_insert_pfn(), except that it allows drivers
2179  * to override pgprot on a per-page basis.
2180  *
2181  * This only makes sense for IO mappings, and it makes no sense for
2182  * COW mappings.  In general, using multiple vmas is preferable;
2183  * vmf_insert_pfn_prot should only be used if using multiple VMAs is
2184  * impractical.
2185  *
2186  * pgprot typically only differs from @vma->vm_page_prot when drivers set
2187  * caching- and encryption bits different than those of @vma->vm_page_prot,
2188  * because the caching- or encryption mode may not be known at mmap() time.
2189  *
2190  * This is ok as long as @vma->vm_page_prot is not used by the core vm
2191  * to set caching and encryption bits for those vmas (except for COW pages).
2192  * This is ensured by core vm only modifying these page table entries using
2193  * functions that don't touch caching- or encryption bits, using pte_modify()
2194  * if needed. (See for example mprotect()).
2195  *
2196  * Also when new page-table entries are created, this is only done using the
2197  * fault() callback, and never using the value of vma->vm_page_prot,
2198  * except for page-table entries that point to anonymous pages as the result
2199  * of COW.
2200  *
2201  * Context: Process context.  May allocate using %GFP_KERNEL.
2202  * Return: vm_fault_t value.
2203  */
2204 vm_fault_t vmf_insert_pfn_prot(struct vm_area_struct *vma, unsigned long addr,
2205                         unsigned long pfn, pgprot_t pgprot)
2206 {
2207         /*
2208          * Technically, architectures with pte_special can avoid all these
2209          * restrictions (same for remap_pfn_range).  However we would like
2210          * consistency in testing and feature parity among all, so we should
2211          * try to keep these invariants in place for everybody.
2212          */
2213         BUG_ON(!(vma->vm_flags & (VM_PFNMAP|VM_MIXEDMAP)));
2214         BUG_ON((vma->vm_flags & (VM_PFNMAP|VM_MIXEDMAP)) ==
2215                                                 (VM_PFNMAP|VM_MIXEDMAP));
2216         BUG_ON((vma->vm_flags & VM_PFNMAP) && is_cow_mapping(vma->vm_flags));
2217         BUG_ON((vma->vm_flags & VM_MIXEDMAP) && pfn_valid(pfn));
2218
2219         if (addr < vma->vm_start || addr >= vma->vm_end)
2220                 return VM_FAULT_SIGBUS;
2221
2222         if (!pfn_modify_allowed(pfn, pgprot))
2223                 return VM_FAULT_SIGBUS;
2224
2225         track_pfn_insert(vma, &pgprot, __pfn_to_pfn_t(pfn, PFN_DEV));
2226
2227         return insert_pfn(vma, addr, __pfn_to_pfn_t(pfn, PFN_DEV), pgprot,
2228                         false);
2229 }
2230 EXPORT_SYMBOL(vmf_insert_pfn_prot);
2231
2232 /**
2233  * vmf_insert_pfn - insert single pfn into user vma
2234  * @vma: user vma to map to
2235  * @addr: target user address of this page
2236  * @pfn: source kernel pfn
2237  *
2238  * Similar to vm_insert_page, this allows drivers to insert individual pages
2239  * they've allocated into a user vma. Same comments apply.
2240  *
2241  * This function should only be called from a vm_ops->fault handler, and
2242  * in that case the handler should return the result of this function.
2243  *
2244  * vma cannot be a COW mapping.
2245  *
2246  * As this is called only for pages that do not currently exist, we
2247  * do not need to flush old virtual caches or the TLB.
2248  *
2249  * Context: Process context.  May allocate using %GFP_KERNEL.
2250  * Return: vm_fault_t value.
2251  */
2252 vm_fault_t vmf_insert_pfn(struct vm_area_struct *vma, unsigned long addr,
2253                         unsigned long pfn)
2254 {
2255         return vmf_insert_pfn_prot(vma, addr, pfn, vma->vm_page_prot);
2256 }
2257 EXPORT_SYMBOL(vmf_insert_pfn);
2258
2259 static bool vm_mixed_ok(struct vm_area_struct *vma, pfn_t pfn)
2260 {
2261         /* these checks mirror the abort conditions in vm_normal_page */
2262         if (vma->vm_flags & VM_MIXEDMAP)
2263                 return true;
2264         if (pfn_t_devmap(pfn))
2265                 return true;
2266         if (pfn_t_special(pfn))
2267                 return true;
2268         if (is_zero_pfn(pfn_t_to_pfn(pfn)))
2269                 return true;
2270         return false;
2271 }
2272
2273 static vm_fault_t __vm_insert_mixed(struct vm_area_struct *vma,
2274                 unsigned long addr, pfn_t pfn, bool mkwrite)
2275 {
2276         pgprot_t pgprot = vma->vm_page_prot;
2277         int err;
2278
2279         BUG_ON(!vm_mixed_ok(vma, pfn));
2280
2281         if (addr < vma->vm_start || addr >= vma->vm_end)
2282                 return VM_FAULT_SIGBUS;
2283
2284         track_pfn_insert(vma, &pgprot, pfn);
2285
2286         if (!pfn_modify_allowed(pfn_t_to_pfn(pfn), pgprot))
2287                 return VM_FAULT_SIGBUS;
2288
2289         /*
2290          * If we don't have pte special, then we have to use the pfn_valid()
2291          * based VM_MIXEDMAP scheme (see vm_normal_page), and thus we *must*
2292          * refcount the page if pfn_valid is true (hence insert_page rather
2293          * than insert_pfn).  If a zero_pfn were inserted into a VM_MIXEDMAP
2294          * without pte special, it would there be refcounted as a normal page.
2295          */
2296         if (!IS_ENABLED(CONFIG_ARCH_HAS_PTE_SPECIAL) &&
2297             !pfn_t_devmap(pfn) && pfn_t_valid(pfn)) {
2298                 struct page *page;
2299
2300                 /*
2301                  * At this point we are committed to insert_page()
2302                  * regardless of whether the caller specified flags that
2303                  * result in pfn_t_has_page() == false.
2304                  */
2305                 page = pfn_to_page(pfn_t_to_pfn(pfn));
2306                 err = insert_page(vma, addr, page, pgprot);
2307         } else {
2308                 return insert_pfn(vma, addr, pfn, pgprot, mkwrite);
2309         }
2310
2311         if (err == -ENOMEM)
2312                 return VM_FAULT_OOM;
2313         if (err < 0 && err != -EBUSY)
2314                 return VM_FAULT_SIGBUS;
2315
2316         return VM_FAULT_NOPAGE;
2317 }
2318
2319 vm_fault_t vmf_insert_mixed(struct vm_area_struct *vma, unsigned long addr,
2320                 pfn_t pfn)
2321 {
2322         return __vm_insert_mixed(vma, addr, pfn, false);
2323 }
2324 EXPORT_SYMBOL(vmf_insert_mixed);
2325
2326 /*
2327  *  If the insertion of PTE failed because someone else already added a
2328  *  different entry in the mean time, we treat that as success as we assume
2329  *  the same entry was actually inserted.
2330  */
2331 vm_fault_t vmf_insert_mixed_mkwrite(struct vm_area_struct *vma,
2332                 unsigned long addr, pfn_t pfn)
2333 {
2334         return __vm_insert_mixed(vma, addr, pfn, true);
2335 }
2336 EXPORT_SYMBOL(vmf_insert_mixed_mkwrite);
2337
2338 /*
2339  * maps a range of physical memory into the requested pages. the old
2340  * mappings are removed. any references to nonexistent pages results
2341  * in null mappings (currently treated as "copy-on-access")
2342  */
2343 static int remap_pte_range(struct mm_struct *mm, pmd_t *pmd,
2344                         unsigned long addr, unsigned long end,
2345                         unsigned long pfn, pgprot_t prot)
2346 {
2347         pte_t *pte, *mapped_pte;
2348         spinlock_t *ptl;
2349         int err = 0;
2350
2351         mapped_pte = pte = pte_alloc_map_lock(mm, pmd, addr, &ptl);
2352         if (!pte)
2353                 return -ENOMEM;
2354         arch_enter_lazy_mmu_mode();
2355         do {
2356                 BUG_ON(!pte_none(ptep_get(pte)));
2357                 if (!pfn_modify_allowed(pfn, prot)) {
2358                         err = -EACCES;
2359                         break;
2360                 }
2361                 set_pte_at(mm, addr, pte, pte_mkspecial(pfn_pte(pfn, prot)));
2362                 pfn++;
2363         } while (pte++, addr += PAGE_SIZE, addr != end);
2364         arch_leave_lazy_mmu_mode();
2365         pte_unmap_unlock(mapped_pte, ptl);
2366         return err;
2367 }
2368
2369 static inline int remap_pmd_range(struct mm_struct *mm, pud_t *pud,
2370                         unsigned long addr, unsigned long end,
2371                         unsigned long pfn, pgprot_t prot)
2372 {
2373         pmd_t *pmd;
2374         unsigned long next;
2375         int err;
2376
2377         pfn -= addr >> PAGE_SHIFT;
2378         pmd = pmd_alloc(mm, pud, addr);
2379         if (!pmd)
2380                 return -ENOMEM;
2381         VM_BUG_ON(pmd_trans_huge(*pmd));
2382         do {
2383                 next = pmd_addr_end(addr, end);
2384                 err = remap_pte_range(mm, pmd, addr, next,
2385                                 pfn + (addr >> PAGE_SHIFT), prot);
2386                 if (err)
2387                         return err;
2388         } while (pmd++, addr = next, addr != end);
2389         return 0;
2390 }
2391
2392 static inline int remap_pud_range(struct mm_struct *mm, p4d_t *p4d,
2393                         unsigned long addr, unsigned long end,
2394                         unsigned long pfn, pgprot_t prot)
2395 {
2396         pud_t *pud;
2397         unsigned long next;
2398         int err;
2399
2400         pfn -= addr >> PAGE_SHIFT;
2401         pud = pud_alloc(mm, p4d, addr);
2402         if (!pud)
2403                 return -ENOMEM;
2404         do {
2405                 next = pud_addr_end(addr, end);
2406                 err = remap_pmd_range(mm, pud, addr, next,
2407                                 pfn + (addr >> PAGE_SHIFT), prot);
2408                 if (err)
2409                         return err;
2410         } while (pud++, addr = next, addr != end);
2411         return 0;
2412 }
2413
2414 static inline int remap_p4d_range(struct mm_struct *mm, pgd_t *pgd,
2415                         unsigned long addr, unsigned long end,
2416                         unsigned long pfn, pgprot_t prot)
2417 {
2418         p4d_t *p4d;
2419         unsigned long next;
2420         int err;
2421
2422         pfn -= addr >> PAGE_SHIFT;
2423         p4d = p4d_alloc(mm, pgd, addr);
2424         if (!p4d)
2425                 return -ENOMEM;
2426         do {
2427                 next = p4d_addr_end(addr, end);
2428                 err = remap_pud_range(mm, p4d, addr, next,
2429                                 pfn + (addr >> PAGE_SHIFT), prot);
2430                 if (err)
2431                         return err;
2432         } while (p4d++, addr = next, addr != end);
2433         return 0;
2434 }
2435
2436 /*
2437  * Variant of remap_pfn_range that does not call track_pfn_remap.  The caller
2438  * must have pre-validated the caching bits of the pgprot_t.
2439  */
2440 int remap_pfn_range_notrack(struct vm_area_struct *vma, unsigned long addr,
2441                 unsigned long pfn, unsigned long size, pgprot_t prot)
2442 {
2443         pgd_t *pgd;
2444         unsigned long next;
2445         unsigned long end = addr + PAGE_ALIGN(size);
2446         struct mm_struct *mm = vma->vm_mm;
2447         int err;
2448
2449         if (WARN_ON_ONCE(!PAGE_ALIGNED(addr)))
2450                 return -EINVAL;
2451
2452         /*
2453          * Physically remapped pages are special. Tell the
2454          * rest of the world about it:
2455          *   VM_IO tells people not to look at these pages
2456          *      (accesses can have side effects).
2457          *   VM_PFNMAP tells the core MM that the base pages are just
2458          *      raw PFN mappings, and do not have a "struct page" associated
2459          *      with them.
2460          *   VM_DONTEXPAND
2461          *      Disable vma merging and expanding with mremap().
2462          *   VM_DONTDUMP
2463          *      Omit vma from core dump, even when VM_IO turned off.
2464          *
2465          * There's a horrible special case to handle copy-on-write
2466          * behaviour that some programs depend on. We mark the "original"
2467          * un-COW'ed pages by matching them up with "vma->vm_pgoff".
2468          * See vm_normal_page() for details.
2469          */
2470         if (is_cow_mapping(vma->vm_flags)) {
2471                 if (addr != vma->vm_start || end != vma->vm_end)
2472                         return -EINVAL;
2473                 vma->vm_pgoff = pfn;
2474         }
2475
2476         vm_flags_set(vma, VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP);
2477
2478         BUG_ON(addr >= end);
2479         pfn -= addr >> PAGE_SHIFT;
2480         pgd = pgd_offset(mm, addr);
2481         flush_cache_range(vma, addr, end);
2482         do {
2483                 next = pgd_addr_end(addr, end);
2484                 err = remap_p4d_range(mm, pgd, addr, next,
2485                                 pfn + (addr >> PAGE_SHIFT), prot);
2486                 if (err)
2487                         return err;
2488         } while (pgd++, addr = next, addr != end);
2489
2490         return 0;
2491 }
2492
2493 /**
2494  * remap_pfn_range - remap kernel memory to userspace
2495  * @vma: user vma to map to
2496  * @addr: target page aligned user address to start at
2497  * @pfn: page frame number of kernel physical memory address
2498  * @size: size of mapping area
2499  * @prot: page protection flags for this mapping
2500  *
2501  * Note: this is only safe if the mm semaphore is held when called.
2502  *
2503  * Return: %0 on success, negative error code otherwise.
2504  */
2505 int remap_pfn_range(struct vm_area_struct *vma, unsigned long addr,
2506                     unsigned long pfn, unsigned long size, pgprot_t prot)
2507 {
2508         int err;
2509
2510         err = track_pfn_remap(vma, &prot, pfn, addr, PAGE_ALIGN(size));
2511         if (err)
2512                 return -EINVAL;
2513
2514         err = remap_pfn_range_notrack(vma, addr, pfn, size, prot);
2515         if (err)
2516                 untrack_pfn(vma, pfn, PAGE_ALIGN(size), true);
2517         return err;
2518 }
2519 EXPORT_SYMBOL(remap_pfn_range);
2520
2521 /**
2522  * vm_iomap_memory - remap memory to userspace
2523  * @vma: user vma to map to
2524  * @start: start of the physical memory to be mapped
2525  * @len: size of area
2526  *
2527  * This is a simplified io_remap_pfn_range() for common driver use. The
2528  * driver just needs to give us the physical memory range to be mapped,
2529  * we'll figure out the rest from the vma information.
2530  *
2531  * NOTE! Some drivers might want to tweak vma->vm_page_prot first to get
2532  * whatever write-combining details or similar.
2533  *
2534  * Return: %0 on success, negative error code otherwise.
2535  */
2536 int vm_iomap_memory(struct vm_area_struct *vma, phys_addr_t start, unsigned long len)
2537 {
2538         unsigned long vm_len, pfn, pages;
2539
2540         /* Check that the physical memory area passed in looks valid */
2541         if (start + len < start)
2542                 return -EINVAL;
2543         /*
2544          * You *really* shouldn't map things that aren't page-aligned,
2545          * but we've historically allowed it because IO memory might
2546          * just have smaller alignment.
2547          */
2548         len += start & ~PAGE_MASK;
2549         pfn = start >> PAGE_SHIFT;
2550         pages = (len + ~PAGE_MASK) >> PAGE_SHIFT;
2551         if (pfn + pages < pfn)
2552                 return -EINVAL;
2553
2554         /* We start the mapping 'vm_pgoff' pages into the area */
2555         if (vma->vm_pgoff > pages)
2556                 return -EINVAL;
2557         pfn += vma->vm_pgoff;
2558         pages -= vma->vm_pgoff;
2559
2560         /* Can we fit all of the mapping? */
2561         vm_len = vma->vm_end - vma->vm_start;
2562         if (vm_len >> PAGE_SHIFT > pages)
2563                 return -EINVAL;
2564
2565         /* Ok, let it rip */
2566         return io_remap_pfn_range(vma, vma->vm_start, pfn, vm_len, vma->vm_page_prot);
2567 }
2568 EXPORT_SYMBOL(vm_iomap_memory);
2569
2570 static int apply_to_pte_range(struct mm_struct *mm, pmd_t *pmd,
2571                                      unsigned long addr, unsigned long end,
2572                                      pte_fn_t fn, void *data, bool create,
2573                                      pgtbl_mod_mask *mask)
2574 {
2575         pte_t *pte, *mapped_pte;
2576         int err = 0;
2577         spinlock_t *ptl;
2578
2579         if (create) {
2580                 mapped_pte = pte = (mm == &init_mm) ?
2581                         pte_alloc_kernel_track(pmd, addr, mask) :
2582                         pte_alloc_map_lock(mm, pmd, addr, &ptl);
2583                 if (!pte)
2584                         return -ENOMEM;
2585         } else {
2586                 mapped_pte = pte = (mm == &init_mm) ?
2587                         pte_offset_kernel(pmd, addr) :
2588                         pte_offset_map_lock(mm, pmd, addr, &ptl);
2589                 if (!pte)
2590                         return -EINVAL;
2591         }
2592
2593         arch_enter_lazy_mmu_mode();
2594
2595         if (fn) {
2596                 do {
2597                         if (create || !pte_none(ptep_get(pte))) {
2598                                 err = fn(pte++, addr, data);
2599                                 if (err)
2600                                         break;
2601                         }
2602                 } while (addr += PAGE_SIZE, addr != end);
2603         }
2604         *mask |= PGTBL_PTE_MODIFIED;
2605
2606         arch_leave_lazy_mmu_mode();
2607
2608         if (mm != &init_mm)
2609                 pte_unmap_unlock(mapped_pte, ptl);
2610         return err;
2611 }
2612
2613 static int apply_to_pmd_range(struct mm_struct *mm, pud_t *pud,
2614                                      unsigned long addr, unsigned long end,
2615                                      pte_fn_t fn, void *data, bool create,
2616                                      pgtbl_mod_mask *mask)
2617 {
2618         pmd_t *pmd;
2619         unsigned long next;
2620         int err = 0;
2621
2622         BUG_ON(pud_huge(*pud));
2623
2624         if (create) {
2625                 pmd = pmd_alloc_track(mm, pud, addr, mask);
2626                 if (!pmd)
2627                         return -ENOMEM;
2628         } else {
2629                 pmd = pmd_offset(pud, addr);
2630         }
2631         do {
2632                 next = pmd_addr_end(addr, end);
2633                 if (pmd_none(*pmd) && !create)
2634                         continue;
2635                 if (WARN_ON_ONCE(pmd_leaf(*pmd)))
2636                         return -EINVAL;
2637                 if (!pmd_none(*pmd) && WARN_ON_ONCE(pmd_bad(*pmd))) {
2638                         if (!create)
2639                                 continue;
2640                         pmd_clear_bad(pmd);
2641                 }
2642                 err = apply_to_pte_range(mm, pmd, addr, next,
2643                                          fn, data, create, mask);
2644                 if (err)
2645                         break;
2646         } while (pmd++, addr = next, addr != end);
2647
2648         return err;
2649 }
2650
2651 static int apply_to_pud_range(struct mm_struct *mm, p4d_t *p4d,
2652                                      unsigned long addr, unsigned long end,
2653                                      pte_fn_t fn, void *data, bool create,
2654                                      pgtbl_mod_mask *mask)
2655 {
2656         pud_t *pud;
2657         unsigned long next;
2658         int err = 0;
2659
2660         if (create) {
2661                 pud = pud_alloc_track(mm, p4d, addr, mask);
2662                 if (!pud)
2663                         return -ENOMEM;
2664         } else {
2665                 pud = pud_offset(p4d, addr);
2666         }
2667         do {
2668                 next = pud_addr_end(addr, end);
2669                 if (pud_none(*pud) && !create)
2670                         continue;
2671                 if (WARN_ON_ONCE(pud_leaf(*pud)))
2672                         return -EINVAL;
2673                 if (!pud_none(*pud) && WARN_ON_ONCE(pud_bad(*pud))) {
2674                         if (!create)
2675                                 continue;
2676                         pud_clear_bad(pud);
2677                 }
2678                 err = apply_to_pmd_range(mm, pud, addr, next,
2679                                          fn, data, create, mask);
2680                 if (err)
2681                         break;
2682         } while (pud++, addr = next, addr != end);
2683
2684         return err;
2685 }
2686
2687 static int apply_to_p4d_range(struct mm_struct *mm, pgd_t *pgd,
2688                                      unsigned long addr, unsigned long end,
2689                                      pte_fn_t fn, void *data, bool create,
2690                                      pgtbl_mod_mask *mask)
2691 {
2692         p4d_t *p4d;
2693         unsigned long next;
2694         int err = 0;
2695
2696         if (create) {
2697                 p4d = p4d_alloc_track(mm, pgd, addr, mask);
2698                 if (!p4d)
2699                         return -ENOMEM;
2700         } else {
2701                 p4d = p4d_offset(pgd, addr);
2702         }
2703         do {
2704                 next = p4d_addr_end(addr, end);
2705                 if (p4d_none(*p4d) && !create)
2706                         continue;
2707                 if (WARN_ON_ONCE(p4d_leaf(*p4d)))
2708                         return -EINVAL;
2709                 if (!p4d_none(*p4d) && WARN_ON_ONCE(p4d_bad(*p4d))) {
2710                         if (!create)
2711                                 continue;
2712                         p4d_clear_bad(p4d);
2713                 }
2714                 err = apply_to_pud_range(mm, p4d, addr, next,
2715                                          fn, data, create, mask);
2716                 if (err)
2717                         break;
2718         } while (p4d++, addr = next, addr != end);
2719
2720         return err;
2721 }
2722
2723 static int __apply_to_page_range(struct mm_struct *mm, unsigned long addr,
2724                                  unsigned long size, pte_fn_t fn,
2725                                  void *data, bool create)
2726 {
2727         pgd_t *pgd;
2728         unsigned long start = addr, next;
2729         unsigned long end = addr + size;
2730         pgtbl_mod_mask mask = 0;
2731         int err = 0;
2732
2733         if (WARN_ON(addr >= end))
2734                 return -EINVAL;
2735
2736         pgd = pgd_offset(mm, addr);
2737         do {
2738                 next = pgd_addr_end(addr, end);
2739                 if (pgd_none(*pgd) && !create)
2740                         continue;
2741                 if (WARN_ON_ONCE(pgd_leaf(*pgd)))
2742                         return -EINVAL;
2743                 if (!pgd_none(*pgd) && WARN_ON_ONCE(pgd_bad(*pgd))) {
2744                         if (!create)
2745                                 continue;
2746                         pgd_clear_bad(pgd);
2747                 }
2748                 err = apply_to_p4d_range(mm, pgd, addr, next,
2749                                          fn, data, create, &mask);
2750                 if (err)
2751                         break;
2752         } while (pgd++, addr = next, addr != end);
2753
2754         if (mask & ARCH_PAGE_TABLE_SYNC_MASK)
2755                 arch_sync_kernel_mappings(start, start + size);
2756
2757         return err;
2758 }
2759
2760 /*
2761  * Scan a region of virtual memory, filling in page tables as necessary
2762  * and calling a provided function on each leaf page table.
2763  */
2764 int apply_to_page_range(struct mm_struct *mm, unsigned long addr,
2765                         unsigned long size, pte_fn_t fn, void *data)
2766 {
2767         return __apply_to_page_range(mm, addr, size, fn, data, true);
2768 }
2769 EXPORT_SYMBOL_GPL(apply_to_page_range);
2770
2771 /*
2772  * Scan a region of virtual memory, calling a provided function on
2773  * each leaf page table where it exists.
2774  *
2775  * Unlike apply_to_page_range, this does _not_ fill in page tables
2776  * where they are absent.
2777  */
2778 int apply_to_existing_page_range(struct mm_struct *mm, unsigned long addr,
2779                                  unsigned long size, pte_fn_t fn, void *data)
2780 {
2781         return __apply_to_page_range(mm, addr, size, fn, data, false);
2782 }
2783 EXPORT_SYMBOL_GPL(apply_to_existing_page_range);
2784
2785 /*
2786  * handle_pte_fault chooses page fault handler according to an entry which was
2787  * read non-atomically.  Before making any commitment, on those architectures
2788  * or configurations (e.g. i386 with PAE) which might give a mix of unmatched
2789  * parts, do_swap_page must check under lock before unmapping the pte and
2790  * proceeding (but do_wp_page is only called after already making such a check;
2791  * and do_anonymous_page can safely check later on).
2792  */
2793 static inline int pte_unmap_same(struct vm_fault *vmf)
2794 {
2795         int same = 1;
2796 #if defined(CONFIG_SMP) || defined(CONFIG_PREEMPTION)
2797         if (sizeof(pte_t) > sizeof(unsigned long)) {
2798                 spin_lock(vmf->ptl);
2799                 same = pte_same(ptep_get(vmf->pte), vmf->orig_pte);
2800                 spin_unlock(vmf->ptl);
2801         }
2802 #endif
2803         pte_unmap(vmf->pte);
2804         vmf->pte = NULL;
2805         return same;
2806 }
2807
2808 /*
2809  * Return:
2810  *      0:              copied succeeded
2811  *      -EHWPOISON:     copy failed due to hwpoison in source page
2812  *      -EAGAIN:        copied failed (some other reason)
2813  */
2814 static inline int __wp_page_copy_user(struct page *dst, struct page *src,
2815                                       struct vm_fault *vmf)
2816 {
2817         int ret;
2818         void *kaddr;
2819         void __user *uaddr;
2820         struct vm_area_struct *vma = vmf->vma;
2821         struct mm_struct *mm = vma->vm_mm;
2822         unsigned long addr = vmf->address;
2823
2824         if (likely(src)) {
2825                 if (copy_mc_user_highpage(dst, src, addr, vma)) {
2826                         memory_failure_queue(page_to_pfn(src), 0);
2827                         return -EHWPOISON;
2828                 }
2829                 return 0;
2830         }
2831
2832         /*
2833          * If the source page was a PFN mapping, we don't have
2834          * a "struct page" for it. We do a best-effort copy by
2835          * just copying from the original user address. If that
2836          * fails, we just zero-fill it. Live with it.
2837          */
2838         kaddr = kmap_atomic(dst);
2839         uaddr = (void __user *)(addr & PAGE_MASK);
2840
2841         /*
2842          * On architectures with software "accessed" bits, we would
2843          * take a double page fault, so mark it accessed here.
2844          */
2845         vmf->pte = NULL;
2846         if (!arch_has_hw_pte_young() && !pte_young(vmf->orig_pte)) {
2847                 pte_t entry;
2848
2849                 vmf->pte = pte_offset_map_lock(mm, vmf->pmd, addr, &vmf->ptl);
2850                 if (unlikely(!vmf->pte || !pte_same(ptep_get(vmf->pte), vmf->orig_pte))) {
2851                         /*
2852                          * Other thread has already handled the fault
2853                          * and update local tlb only
2854                          */
2855                         if (vmf->pte)
2856                                 update_mmu_tlb(vma, addr, vmf->pte);
2857                         ret = -EAGAIN;
2858                         goto pte_unlock;
2859                 }
2860
2861                 entry = pte_mkyoung(vmf->orig_pte);
2862                 if (ptep_set_access_flags(vma, addr, vmf->pte, entry, 0))
2863                         update_mmu_cache_range(vmf, vma, addr, vmf->pte, 1);
2864         }
2865
2866         /*
2867          * This really shouldn't fail, because the page is there
2868          * in the page tables. But it might just be unreadable,
2869          * in which case we just give up and fill the result with
2870          * zeroes.
2871          */
2872         if (__copy_from_user_inatomic(kaddr, uaddr, PAGE_SIZE)) {
2873                 if (vmf->pte)
2874                         goto warn;
2875
2876                 /* Re-validate under PTL if the page is still mapped */
2877                 vmf->pte = pte_offset_map_lock(mm, vmf->pmd, addr, &vmf->ptl);
2878                 if (unlikely(!vmf->pte || !pte_same(ptep_get(vmf->pte), vmf->orig_pte))) {
2879                         /* The PTE changed under us, update local tlb */
2880                         if (vmf->pte)
2881                                 update_mmu_tlb(vma, addr, vmf->pte);
2882                         ret = -EAGAIN;
2883                         goto pte_unlock;
2884                 }
2885
2886                 /*
2887                  * The same page can be mapped back since last copy attempt.
2888                  * Try to copy again under PTL.
2889                  */
2890                 if (__copy_from_user_inatomic(kaddr, uaddr, PAGE_SIZE)) {
2891                         /*
2892                          * Give a warn in case there can be some obscure
2893                          * use-case
2894                          */
2895 warn:
2896                         WARN_ON_ONCE(1);
2897                         clear_page(kaddr);
2898                 }
2899         }
2900
2901         ret = 0;
2902
2903 pte_unlock:
2904         if (vmf->pte)
2905                 pte_unmap_unlock(vmf->pte, vmf->ptl);
2906         kunmap_atomic(kaddr);
2907         flush_dcache_page(dst);
2908
2909         return ret;
2910 }
2911
2912 static gfp_t __get_fault_gfp_mask(struct vm_area_struct *vma)
2913 {
2914         struct file *vm_file = vma->vm_file;
2915
2916         if (vm_file)
2917                 return mapping_gfp_mask(vm_file->f_mapping) | __GFP_FS | __GFP_IO;
2918
2919         /*
2920          * Special mappings (e.g. VDSO) do not have any file so fake
2921          * a default GFP_KERNEL for them.
2922          */
2923         return GFP_KERNEL;
2924 }
2925
2926 /*
2927  * Notify the address space that the page is about to become writable so that
2928  * it can prohibit this or wait for the page to get into an appropriate state.
2929  *
2930  * We do this without the lock held, so that it can sleep if it needs to.
2931  */
2932 static vm_fault_t do_page_mkwrite(struct vm_fault *vmf, struct folio *folio)
2933 {
2934         vm_fault_t ret;
2935         unsigned int old_flags = vmf->flags;
2936
2937         vmf->flags = FAULT_FLAG_WRITE|FAULT_FLAG_MKWRITE;
2938
2939         if (vmf->vma->vm_file &&
2940             IS_SWAPFILE(vmf->vma->vm_file->f_mapping->host))
2941                 return VM_FAULT_SIGBUS;
2942
2943         ret = vmf->vma->vm_ops->page_mkwrite(vmf);
2944         /* Restore original flags so that caller is not surprised */
2945         vmf->flags = old_flags;
2946         if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE)))
2947                 return ret;
2948         if (unlikely(!(ret & VM_FAULT_LOCKED))) {
2949                 folio_lock(folio);
2950                 if (!folio->mapping) {
2951                         folio_unlock(folio);
2952                         return 0; /* retry */
2953                 }
2954                 ret |= VM_FAULT_LOCKED;
2955         } else
2956                 VM_BUG_ON_FOLIO(!folio_test_locked(folio), folio);
2957         return ret;
2958 }
2959
2960 /*
2961  * Handle dirtying of a page in shared file mapping on a write fault.
2962  *
2963  * The function expects the page to be locked and unlocks it.
2964  */
2965 static vm_fault_t fault_dirty_shared_page(struct vm_fault *vmf)
2966 {
2967         struct vm_area_struct *vma = vmf->vma;
2968         struct address_space *mapping;
2969         struct folio *folio = page_folio(vmf->page);
2970         bool dirtied;
2971         bool page_mkwrite = vma->vm_ops && vma->vm_ops->page_mkwrite;
2972
2973         dirtied = folio_mark_dirty(folio);
2974         VM_BUG_ON_FOLIO(folio_test_anon(folio), folio);
2975         /*
2976          * Take a local copy of the address_space - folio.mapping may be zeroed
2977          * by truncate after folio_unlock().   The address_space itself remains
2978          * pinned by vma->vm_file's reference.  We rely on folio_unlock()'s
2979          * release semantics to prevent the compiler from undoing this copying.
2980          */
2981         mapping = folio_raw_mapping(folio);
2982         folio_unlock(folio);
2983
2984         if (!page_mkwrite)
2985                 file_update_time(vma->vm_file);
2986
2987         /*
2988          * Throttle page dirtying rate down to writeback speed.
2989          *
2990          * mapping may be NULL here because some device drivers do not
2991          * set page.mapping but still dirty their pages
2992          *
2993          * Drop the mmap_lock before waiting on IO, if we can. The file
2994          * is pinning the mapping, as per above.
2995          */
2996         if ((dirtied || page_mkwrite) && mapping) {
2997                 struct file *fpin;
2998
2999                 fpin = maybe_unlock_mmap_for_io(vmf, NULL);
3000                 balance_dirty_pages_ratelimited(mapping);
3001                 if (fpin) {
3002                         fput(fpin);
3003                         return VM_FAULT_COMPLETED;
3004                 }
3005         }
3006
3007         return 0;
3008 }
3009
3010 /*
3011  * Handle write page faults for pages that can be reused in the current vma
3012  *
3013  * This can happen either due to the mapping being with the VM_SHARED flag,
3014  * or due to us being the last reference standing to the page. In either
3015  * case, all we need to do here is to mark the page as writable and update
3016  * any related book-keeping.
3017  */
3018 static inline void wp_page_reuse(struct vm_fault *vmf, struct folio *folio)
3019         __releases(vmf->ptl)
3020 {
3021         struct vm_area_struct *vma = vmf->vma;
3022         pte_t entry;
3023
3024         VM_BUG_ON(!(vmf->flags & FAULT_FLAG_WRITE));
3025
3026         if (folio) {
3027                 VM_BUG_ON(folio_test_anon(folio) &&
3028                           !PageAnonExclusive(vmf->page));
3029                 /*
3030                  * Clear the folio's cpupid information as the existing
3031                  * information potentially belongs to a now completely
3032                  * unrelated process.
3033                  */
3034                 folio_xchg_last_cpupid(folio, (1 << LAST_CPUPID_SHIFT) - 1);
3035         }
3036
3037         flush_cache_page(vma, vmf->address, pte_pfn(vmf->orig_pte));
3038         entry = pte_mkyoung(vmf->orig_pte);
3039         entry = maybe_mkwrite(pte_mkdirty(entry), vma);
3040         if (ptep_set_access_flags(vma, vmf->address, vmf->pte, entry, 1))
3041                 update_mmu_cache_range(vmf, vma, vmf->address, vmf->pte, 1);
3042         pte_unmap_unlock(vmf->pte, vmf->ptl);
3043         count_vm_event(PGREUSE);
3044 }
3045
3046 /*
3047  * We could add a bitflag somewhere, but for now, we know that all
3048  * vm_ops that have a ->map_pages have been audited and don't need
3049  * the mmap_lock to be held.
3050  */
3051 static inline vm_fault_t vmf_can_call_fault(const struct vm_fault *vmf)
3052 {
3053         struct vm_area_struct *vma = vmf->vma;
3054
3055         if (vma->vm_ops->map_pages || !(vmf->flags & FAULT_FLAG_VMA_LOCK))
3056                 return 0;
3057         vma_end_read(vma);
3058         return VM_FAULT_RETRY;
3059 }
3060
3061 static vm_fault_t vmf_anon_prepare(struct vm_fault *vmf)
3062 {
3063         struct vm_area_struct *vma = vmf->vma;
3064
3065         if (likely(vma->anon_vma))
3066                 return 0;
3067         if (vmf->flags & FAULT_FLAG_VMA_LOCK) {
3068                 vma_end_read(vma);
3069                 return VM_FAULT_RETRY;
3070         }
3071         if (__anon_vma_prepare(vma))
3072                 return VM_FAULT_OOM;
3073         return 0;
3074 }
3075
3076 /*
3077  * Handle the case of a page which we actually need to copy to a new page,
3078  * either due to COW or unsharing.
3079  *
3080  * Called with mmap_lock locked and the old page referenced, but
3081  * without the ptl held.
3082  *
3083  * High level logic flow:
3084  *
3085  * - Allocate a page, copy the content of the old page to the new one.
3086  * - Handle book keeping and accounting - cgroups, mmu-notifiers, etc.
3087  * - Take the PTL. If the pte changed, bail out and release the allocated page
3088  * - If the pte is still the way we remember it, update the page table and all
3089  *   relevant references. This includes dropping the reference the page-table
3090  *   held to the old page, as well as updating the rmap.
3091  * - In any case, unlock the PTL and drop the reference we took to the old page.
3092  */
3093 static vm_fault_t wp_page_copy(struct vm_fault *vmf)
3094 {
3095         const bool unshare = vmf->flags & FAULT_FLAG_UNSHARE;
3096         struct vm_area_struct *vma = vmf->vma;
3097         struct mm_struct *mm = vma->vm_mm;
3098         struct folio *old_folio = NULL;
3099         struct folio *new_folio = NULL;
3100         pte_t entry;
3101         int page_copied = 0;
3102         struct mmu_notifier_range range;
3103         vm_fault_t ret;
3104
3105         delayacct_wpcopy_start();
3106
3107         if (vmf->page)
3108                 old_folio = page_folio(vmf->page);
3109         ret = vmf_anon_prepare(vmf);
3110         if (unlikely(ret))
3111                 goto out;
3112
3113         if (is_zero_pfn(pte_pfn(vmf->orig_pte))) {
3114                 new_folio = vma_alloc_zeroed_movable_folio(vma, vmf->address);
3115                 if (!new_folio)
3116                         goto oom;
3117         } else {
3118                 int err;
3119                 new_folio = vma_alloc_folio(GFP_HIGHUSER_MOVABLE, 0, vma,
3120                                 vmf->address, false);
3121                 if (!new_folio)
3122                         goto oom;
3123
3124                 err = __wp_page_copy_user(&new_folio->page, vmf->page, vmf);
3125                 if (err) {
3126                         /*
3127                          * COW failed, if the fault was solved by other,
3128                          * it's fine. If not, userspace would re-fault on
3129                          * the same address and we will handle the fault
3130                          * from the second attempt.
3131                          * The -EHWPOISON case will not be retried.
3132                          */
3133                         folio_put(new_folio);
3134                         if (old_folio)
3135                                 folio_put(old_folio);
3136
3137                         delayacct_wpcopy_end();
3138                         return err == -EHWPOISON ? VM_FAULT_HWPOISON : 0;
3139                 }
3140                 kmsan_copy_page_meta(&new_folio->page, vmf->page);
3141         }
3142
3143         if (mem_cgroup_charge(new_folio, mm, GFP_KERNEL))
3144                 goto oom_free_new;
3145         folio_throttle_swaprate(new_folio, GFP_KERNEL);
3146
3147         __folio_mark_uptodate(new_folio);
3148
3149         mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, mm,
3150                                 vmf->address & PAGE_MASK,
3151                                 (vmf->address & PAGE_MASK) + PAGE_SIZE);
3152         mmu_notifier_invalidate_range_start(&range);
3153
3154         /*
3155          * Re-check the pte - we dropped the lock
3156          */
3157         vmf->pte = pte_offset_map_lock(mm, vmf->pmd, vmf->address, &vmf->ptl);
3158         if (likely(vmf->pte && pte_same(ptep_get(vmf->pte), vmf->orig_pte))) {
3159                 if (old_folio) {
3160                         if (!folio_test_anon(old_folio)) {
3161                                 dec_mm_counter(mm, mm_counter_file(&old_folio->page));
3162                                 inc_mm_counter(mm, MM_ANONPAGES);
3163                         }
3164                 } else {
3165                         ksm_might_unmap_zero_page(mm, vmf->orig_pte);
3166                         inc_mm_counter(mm, MM_ANONPAGES);
3167                 }
3168                 flush_cache_page(vma, vmf->address, pte_pfn(vmf->orig_pte));
3169                 entry = mk_pte(&new_folio->page, vma->vm_page_prot);
3170                 entry = pte_sw_mkyoung(entry);
3171                 if (unlikely(unshare)) {
3172                         if (pte_soft_dirty(vmf->orig_pte))
3173                                 entry = pte_mksoft_dirty(entry);
3174                         if (pte_uffd_wp(vmf->orig_pte))
3175                                 entry = pte_mkuffd_wp(entry);
3176                 } else {
3177                         entry = maybe_mkwrite(pte_mkdirty(entry), vma);
3178                 }
3179
3180                 /*
3181                  * Clear the pte entry and flush it first, before updating the
3182                  * pte with the new entry, to keep TLBs on different CPUs in
3183                  * sync. This code used to set the new PTE then flush TLBs, but
3184                  * that left a window where the new PTE could be loaded into
3185                  * some TLBs while the old PTE remains in others.
3186                  */
3187                 ptep_clear_flush(vma, vmf->address, vmf->pte);
3188                 folio_add_new_anon_rmap(new_folio, vma, vmf->address);
3189                 folio_add_lru_vma(new_folio, vma);
3190                 /*
3191                  * We call the notify macro here because, when using secondary
3192                  * mmu page tables (such as kvm shadow page tables), we want the
3193                  * new page to be mapped directly into the secondary page table.
3194                  */
3195                 BUG_ON(unshare && pte_write(entry));
3196                 set_pte_at_notify(mm, vmf->address, vmf->pte, entry);
3197                 update_mmu_cache_range(vmf, vma, vmf->address, vmf->pte, 1);
3198                 if (old_folio) {
3199                         /*
3200                          * Only after switching the pte to the new page may
3201                          * we remove the mapcount here. Otherwise another
3202                          * process may come and find the rmap count decremented
3203                          * before the pte is switched to the new page, and
3204                          * "reuse" the old page writing into it while our pte
3205                          * here still points into it and can be read by other
3206                          * threads.
3207                          *
3208                          * The critical issue is to order this
3209                          * page_remove_rmap with the ptp_clear_flush above.
3210                          * Those stores are ordered by (if nothing else,)
3211                          * the barrier present in the atomic_add_negative
3212                          * in page_remove_rmap.
3213                          *
3214                          * Then the TLB flush in ptep_clear_flush ensures that
3215                          * no process can access the old page before the
3216                          * decremented mapcount is visible. And the old page
3217                          * cannot be reused until after the decremented
3218                          * mapcount is visible. So transitively, TLBs to
3219                          * old page will be flushed before it can be reused.
3220                          */
3221                         page_remove_rmap(vmf->page, vma, false);
3222                 }
3223
3224                 /* Free the old page.. */
3225                 new_folio = old_folio;
3226                 page_copied = 1;
3227                 pte_unmap_unlock(vmf->pte, vmf->ptl);
3228         } else if (vmf->pte) {
3229                 update_mmu_tlb(vma, vmf->address, vmf->pte);
3230                 pte_unmap_unlock(vmf->pte, vmf->ptl);
3231         }
3232
3233         mmu_notifier_invalidate_range_end(&range);
3234
3235         if (new_folio)
3236                 folio_put(new_folio);
3237         if (old_folio) {
3238                 if (page_copied)
3239                         free_swap_cache(&old_folio->page);
3240                 folio_put(old_folio);
3241         }
3242
3243         delayacct_wpcopy_end();
3244         return 0;
3245 oom_free_new:
3246         folio_put(new_folio);
3247 oom:
3248         ret = VM_FAULT_OOM;
3249 out:
3250         if (old_folio)
3251                 folio_put(old_folio);
3252
3253         delayacct_wpcopy_end();
3254         return ret;
3255 }
3256
3257 /**
3258  * finish_mkwrite_fault - finish page fault for a shared mapping, making PTE
3259  *                        writeable once the page is prepared
3260  *
3261  * @vmf: structure describing the fault
3262  * @folio: the folio of vmf->page
3263  *
3264  * This function handles all that is needed to finish a write page fault in a
3265  * shared mapping due to PTE being read-only once the mapped page is prepared.
3266  * It handles locking of PTE and modifying it.
3267  *
3268  * The function expects the page to be locked or other protection against
3269  * concurrent faults / writeback (such as DAX radix tree locks).
3270  *
3271  * Return: %0 on success, %VM_FAULT_NOPAGE when PTE got changed before
3272  * we acquired PTE lock.
3273  */
3274 static vm_fault_t finish_mkwrite_fault(struct vm_fault *vmf, struct folio *folio)
3275 {
3276         WARN_ON_ONCE(!(vmf->vma->vm_flags & VM_SHARED));
3277         vmf->pte = pte_offset_map_lock(vmf->vma->vm_mm, vmf->pmd, vmf->address,
3278                                        &vmf->ptl);
3279         if (!vmf->pte)
3280                 return VM_FAULT_NOPAGE;
3281         /*
3282          * We might have raced with another page fault while we released the
3283          * pte_offset_map_lock.
3284          */
3285         if (!pte_same(ptep_get(vmf->pte), vmf->orig_pte)) {
3286                 update_mmu_tlb(vmf->vma, vmf->address, vmf->pte);
3287                 pte_unmap_unlock(vmf->pte, vmf->ptl);
3288                 return VM_FAULT_NOPAGE;
3289         }
3290         wp_page_reuse(vmf, folio);
3291         return 0;
3292 }
3293
3294 /*
3295  * Handle write page faults for VM_MIXEDMAP or VM_PFNMAP for a VM_SHARED
3296  * mapping
3297  */
3298 static vm_fault_t wp_pfn_shared(struct vm_fault *vmf)
3299 {
3300         struct vm_area_struct *vma = vmf->vma;
3301
3302         if (vma->vm_ops && vma->vm_ops->pfn_mkwrite) {
3303                 vm_fault_t ret;
3304
3305                 pte_unmap_unlock(vmf->pte, vmf->ptl);
3306                 ret = vmf_can_call_fault(vmf);
3307                 if (ret)
3308                         return ret;
3309
3310                 vmf->flags |= FAULT_FLAG_MKWRITE;
3311                 ret = vma->vm_ops->pfn_mkwrite(vmf);
3312                 if (ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE))
3313                         return ret;
3314                 return finish_mkwrite_fault(vmf, NULL);
3315         }
3316         wp_page_reuse(vmf, NULL);
3317         return 0;
3318 }
3319
3320 static vm_fault_t wp_page_shared(struct vm_fault *vmf, struct folio *folio)
3321         __releases(vmf->ptl)
3322 {
3323         struct vm_area_struct *vma = vmf->vma;
3324         vm_fault_t ret = 0;
3325
3326         folio_get(folio);
3327
3328         if (vma->vm_ops && vma->vm_ops->page_mkwrite) {
3329                 vm_fault_t tmp;
3330
3331                 pte_unmap_unlock(vmf->pte, vmf->ptl);
3332                 tmp = vmf_can_call_fault(vmf);
3333                 if (tmp) {
3334                         folio_put(folio);
3335                         return tmp;
3336                 }
3337
3338                 tmp = do_page_mkwrite(vmf, folio);
3339                 if (unlikely(!tmp || (tmp &
3340                                       (VM_FAULT_ERROR | VM_FAULT_NOPAGE)))) {
3341                         folio_put(folio);
3342                         return tmp;
3343                 }
3344                 tmp = finish_mkwrite_fault(vmf, folio);
3345                 if (unlikely(tmp & (VM_FAULT_ERROR | VM_FAULT_NOPAGE))) {
3346                         folio_unlock(folio);
3347                         folio_put(folio);
3348                         return tmp;
3349                 }
3350         } else {
3351                 wp_page_reuse(vmf, folio);
3352                 folio_lock(folio);
3353         }
3354         ret |= fault_dirty_shared_page(vmf);
3355         folio_put(folio);
3356
3357         return ret;
3358 }
3359
3360 static bool wp_can_reuse_anon_folio(struct folio *folio,
3361                                     struct vm_area_struct *vma)
3362 {
3363         /*
3364          * We have to verify under folio lock: these early checks are
3365          * just an optimization to avoid locking the folio and freeing
3366          * the swapcache if there is little hope that we can reuse.
3367          *
3368          * KSM doesn't necessarily raise the folio refcount.
3369          */
3370         if (folio_test_ksm(folio) || folio_ref_count(folio) > 3)
3371                 return false;
3372         if (!folio_test_lru(folio))
3373                 /*
3374                  * We cannot easily detect+handle references from
3375                  * remote LRU caches or references to LRU folios.
3376                  */
3377                 lru_add_drain();
3378         if (folio_ref_count(folio) > 1 + folio_test_swapcache(folio))
3379                 return false;
3380         if (!folio_trylock(folio))
3381                 return false;
3382         if (folio_test_swapcache(folio))
3383                 folio_free_swap(folio);
3384         if (folio_test_ksm(folio) || folio_ref_count(folio) != 1) {
3385                 folio_unlock(folio);
3386                 return false;
3387         }
3388         /*
3389          * Ok, we've got the only folio reference from our mapping
3390          * and the folio is locked, it's dark out, and we're wearing
3391          * sunglasses. Hit it.
3392          */
3393         folio_move_anon_rmap(folio, vma);
3394         folio_unlock(folio);
3395         return true;
3396 }
3397
3398 /*
3399  * This routine handles present pages, when
3400  * * users try to write to a shared page (FAULT_FLAG_WRITE)
3401  * * GUP wants to take a R/O pin on a possibly shared anonymous page
3402  *   (FAULT_FLAG_UNSHARE)
3403  *
3404  * It is done by copying the page to a new address and decrementing the
3405  * shared-page counter for the old page.
3406  *
3407  * Note that this routine assumes that the protection checks have been
3408  * done by the caller (the low-level page fault routine in most cases).
3409  * Thus, with FAULT_FLAG_WRITE, we can safely just mark it writable once we've
3410  * done any necessary COW.
3411  *
3412  * In case of FAULT_FLAG_WRITE, we also mark the page dirty at this point even
3413  * though the page will change only once the write actually happens. This
3414  * avoids a few races, and potentially makes it more efficient.
3415  *
3416  * We enter with non-exclusive mmap_lock (to exclude vma changes,
3417  * but allow concurrent faults), with pte both mapped and locked.
3418  * We return with mmap_lock still held, but pte unmapped and unlocked.
3419  */
3420 static vm_fault_t do_wp_page(struct vm_fault *vmf)
3421         __releases(vmf->ptl)
3422 {
3423         const bool unshare = vmf->flags & FAULT_FLAG_UNSHARE;
3424         struct vm_area_struct *vma = vmf->vma;
3425         struct folio *folio = NULL;
3426         pte_t pte;
3427
3428         if (likely(!unshare)) {
3429                 if (userfaultfd_pte_wp(vma, ptep_get(vmf->pte))) {
3430                         if (!userfaultfd_wp_async(vma)) {
3431                                 pte_unmap_unlock(vmf->pte, vmf->ptl);
3432                                 return handle_userfault(vmf, VM_UFFD_WP);
3433                         }
3434
3435                         /*
3436                          * Nothing needed (cache flush, TLB invalidations,
3437                          * etc.) because we're only removing the uffd-wp bit,
3438                          * which is completely invisible to the user.
3439                          */
3440                         pte = pte_clear_uffd_wp(ptep_get(vmf->pte));
3441
3442                         set_pte_at(vma->vm_mm, vmf->address, vmf->pte, pte);
3443                         /*
3444                          * Update this to be prepared for following up CoW
3445                          * handling
3446                          */
3447                         vmf->orig_pte = pte;
3448                 }
3449
3450                 /*
3451                  * Userfaultfd write-protect can defer flushes. Ensure the TLB
3452                  * is flushed in this case before copying.
3453                  */
3454                 if (unlikely(userfaultfd_wp(vmf->vma) &&
3455                              mm_tlb_flush_pending(vmf->vma->vm_mm)))
3456                         flush_tlb_page(vmf->vma, vmf->address);
3457         }
3458
3459         vmf->page = vm_normal_page(vma, vmf->address, vmf->orig_pte);
3460
3461         if (vmf->page)
3462                 folio = page_folio(vmf->page);
3463
3464         /*
3465          * Shared mapping: we are guaranteed to have VM_WRITE and
3466          * FAULT_FLAG_WRITE set at this point.
3467          */
3468         if (vma->vm_flags & (VM_SHARED | VM_MAYSHARE)) {
3469                 /*
3470                  * VM_MIXEDMAP !pfn_valid() case, or VM_SOFTDIRTY clear on a
3471                  * VM_PFNMAP VMA.
3472                  *
3473                  * We should not cow pages in a shared writeable mapping.
3474                  * Just mark the pages writable and/or call ops->pfn_mkwrite.
3475                  */
3476                 if (!vmf->page)
3477                         return wp_pfn_shared(vmf);
3478                 return wp_page_shared(vmf, folio);
3479         }
3480
3481         /*
3482          * Private mapping: create an exclusive anonymous page copy if reuse
3483          * is impossible. We might miss VM_WRITE for FOLL_FORCE handling.
3484          *
3485          * If we encounter a page that is marked exclusive, we must reuse
3486          * the page without further checks.
3487          */
3488         if (folio && folio_test_anon(folio) &&
3489             (PageAnonExclusive(vmf->page) || wp_can_reuse_anon_folio(folio, vma))) {
3490                 if (!PageAnonExclusive(vmf->page))
3491                         SetPageAnonExclusive(vmf->page);
3492                 if (unlikely(unshare)) {
3493                         pte_unmap_unlock(vmf->pte, vmf->ptl);
3494                         return 0;
3495                 }
3496                 wp_page_reuse(vmf, folio);
3497                 return 0;
3498         }
3499         /*
3500          * Ok, we need to copy. Oh, well..
3501          */
3502         if (folio)
3503                 folio_get(folio);
3504
3505         pte_unmap_unlock(vmf->pte, vmf->ptl);
3506 #ifdef CONFIG_KSM
3507         if (folio && folio_test_ksm(folio))
3508                 count_vm_event(COW_KSM);
3509 #endif
3510         return wp_page_copy(vmf);
3511 }
3512
3513 static void unmap_mapping_range_vma(struct vm_area_struct *vma,
3514                 unsigned long start_addr, unsigned long end_addr,
3515                 struct zap_details *details)
3516 {
3517         zap_page_range_single(vma, start_addr, end_addr - start_addr, details);
3518 }
3519
3520 static inline void unmap_mapping_range_tree(struct rb_root_cached *root,
3521                                             pgoff_t first_index,
3522                                             pgoff_t last_index,
3523                                             struct zap_details *details)
3524 {
3525         struct vm_area_struct *vma;
3526         pgoff_t vba, vea, zba, zea;
3527
3528         vma_interval_tree_foreach(vma, root, first_index, last_index) {
3529                 vba = vma->vm_pgoff;
3530                 vea = vba + vma_pages(vma) - 1;
3531                 zba = max(first_index, vba);
3532                 zea = min(last_index, vea);
3533
3534                 unmap_mapping_range_vma(vma,
3535                         ((zba - vba) << PAGE_SHIFT) + vma->vm_start,
3536                         ((zea - vba + 1) << PAGE_SHIFT) + vma->vm_start,
3537                                 details);
3538         }
3539 }
3540
3541 /**
3542  * unmap_mapping_folio() - Unmap single folio from processes.
3543  * @folio: The locked folio to be unmapped.
3544  *
3545  * Unmap this folio from any userspace process which still has it mmaped.
3546  * Typically, for efficiency, the range of nearby pages has already been
3547  * unmapped by unmap_mapping_pages() or unmap_mapping_range().  But once
3548  * truncation or invalidation holds the lock on a folio, it may find that
3549  * the page has been remapped again: and then uses unmap_mapping_folio()
3550  * to unmap it finally.
3551  */
3552 void unmap_mapping_folio(struct folio *folio)
3553 {
3554         struct address_space *mapping = folio->mapping;
3555         struct zap_details details = { };
3556         pgoff_t first_index;
3557         pgoff_t last_index;
3558
3559         VM_BUG_ON(!folio_test_locked(folio));
3560
3561         first_index = folio->index;
3562         last_index = folio_next_index(folio) - 1;
3563
3564         details.even_cows = false;
3565         details.single_folio = folio;
3566         details.zap_flags = ZAP_FLAG_DROP_MARKER;
3567
3568         i_mmap_lock_read(mapping);
3569         if (unlikely(!RB_EMPTY_ROOT(&mapping->i_mmap.rb_root)))
3570                 unmap_mapping_range_tree(&mapping->i_mmap, first_index,
3571                                          last_index, &details);
3572         i_mmap_unlock_read(mapping);
3573 }
3574
3575 /**
3576  * unmap_mapping_pages() - Unmap pages from processes.
3577  * @mapping: The address space containing pages to be unmapped.
3578  * @start: Index of first page to be unmapped.
3579  * @nr: Number of pages to be unmapped.  0 to unmap to end of file.
3580  * @even_cows: Whether to unmap even private COWed pages.
3581  *
3582  * Unmap the pages in this address space from any userspace process which
3583  * has them mmaped.  Generally, you want to remove COWed pages as well when
3584  * a file is being truncated, but not when invalidating pages from the page
3585  * cache.
3586  */
3587 void unmap_mapping_pages(struct address_space *mapping, pgoff_t start,
3588                 pgoff_t nr, bool even_cows)
3589 {
3590         struct zap_details details = { };
3591         pgoff_t first_index = start;
3592         pgoff_t last_index = start + nr - 1;
3593
3594         details.even_cows = even_cows;
3595         if (last_index < first_index)
3596                 last_index = ULONG_MAX;
3597
3598         i_mmap_lock_read(mapping);
3599         if (unlikely(!RB_EMPTY_ROOT(&mapping->i_mmap.rb_root)))
3600                 unmap_mapping_range_tree(&mapping->i_mmap, first_index,
3601                                          last_index, &details);
3602         i_mmap_unlock_read(mapping);
3603 }
3604 EXPORT_SYMBOL_GPL(unmap_mapping_pages);
3605
3606 /**
3607  * unmap_mapping_range - unmap the portion of all mmaps in the specified
3608  * address_space corresponding to the specified byte range in the underlying
3609  * file.
3610  *
3611  * @mapping: the address space containing mmaps to be unmapped.
3612  * @holebegin: byte in first page to unmap, relative to the start of
3613  * the underlying file.  This will be rounded down to a PAGE_SIZE
3614  * boundary.  Note that this is different from truncate_pagecache(), which
3615  * must keep the partial page.  In contrast, we must get rid of
3616  * partial pages.
3617  * @holelen: size of prospective hole in bytes.  This will be rounded
3618  * up to a PAGE_SIZE boundary.  A holelen of zero truncates to the
3619  * end of the file.
3620  * @even_cows: 1 when truncating a file, unmap even private COWed pages;
3621  * but 0 when invalidating pagecache, don't throw away private data.
3622  */
3623 void unmap_mapping_range(struct address_space *mapping,
3624                 loff_t const holebegin, loff_t const holelen, int even_cows)
3625 {
3626         pgoff_t hba = holebegin >> PAGE_SHIFT;
3627         pgoff_t hlen = (holelen + PAGE_SIZE - 1) >> PAGE_SHIFT;
3628
3629         /* Check for overflow. */
3630         if (sizeof(holelen) > sizeof(hlen)) {
3631                 long long holeend =
3632                         (holebegin + holelen + PAGE_SIZE - 1) >> PAGE_SHIFT;
3633                 if (holeend & ~(long long)ULONG_MAX)
3634                         hlen = ULONG_MAX - hba + 1;
3635         }
3636
3637         unmap_mapping_pages(mapping, hba, hlen, even_cows);
3638 }
3639 EXPORT_SYMBOL(unmap_mapping_range);
3640
3641 /*
3642  * Restore a potential device exclusive pte to a working pte entry
3643  */
3644 static vm_fault_t remove_device_exclusive_entry(struct vm_fault *vmf)
3645 {
3646         struct folio *folio = page_folio(vmf->page);
3647         struct vm_area_struct *vma = vmf->vma;
3648         struct mmu_notifier_range range;
3649         vm_fault_t ret;
3650
3651         /*
3652          * We need a reference to lock the folio because we don't hold
3653          * the PTL so a racing thread can remove the device-exclusive
3654          * entry and unmap it. If the folio is free the entry must
3655          * have been removed already. If it happens to have already
3656          * been re-allocated after being freed all we do is lock and
3657          * unlock it.
3658          */
3659         if (!folio_try_get(folio))
3660                 return 0;
3661
3662         ret = folio_lock_or_retry(folio, vmf);
3663         if (ret) {
3664                 folio_put(folio);
3665                 return ret;
3666         }
3667         mmu_notifier_range_init_owner(&range, MMU_NOTIFY_EXCLUSIVE, 0,
3668                                 vma->vm_mm, vmf->address & PAGE_MASK,
3669                                 (vmf->address & PAGE_MASK) + PAGE_SIZE, NULL);
3670         mmu_notifier_invalidate_range_start(&range);
3671
3672         vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd, vmf->address,
3673                                 &vmf->ptl);
3674         if (likely(vmf->pte && pte_same(ptep_get(vmf->pte), vmf->orig_pte)))
3675                 restore_exclusive_pte(vma, vmf->page, vmf->address, vmf->pte);
3676
3677         if (vmf->pte)
3678                 pte_unmap_unlock(vmf->pte, vmf->ptl);
3679         folio_unlock(folio);
3680         folio_put(folio);
3681
3682         mmu_notifier_invalidate_range_end(&range);
3683         return 0;
3684 }
3685
3686 static inline bool should_try_to_free_swap(struct folio *folio,
3687                                            struct vm_area_struct *vma,
3688                                            unsigned int fault_flags)
3689 {
3690         if (!folio_test_swapcache(folio))
3691                 return false;
3692         if (mem_cgroup_swap_full(folio) || (vma->vm_flags & VM_LOCKED) ||
3693             folio_test_mlocked(folio))
3694                 return true;
3695         /*
3696          * If we want to map a page that's in the swapcache writable, we
3697          * have to detect via the refcount if we're really the exclusive
3698          * user. Try freeing the swapcache to get rid of the swapcache
3699          * reference only in case it's likely that we'll be the exlusive user.
3700          */
3701         return (fault_flags & FAULT_FLAG_WRITE) && !folio_test_ksm(folio) &&
3702                 folio_ref_count(folio) == 2;
3703 }
3704
3705 static vm_fault_t pte_marker_clear(struct vm_fault *vmf)
3706 {
3707         vmf->pte = pte_offset_map_lock(vmf->vma->vm_mm, vmf->pmd,
3708                                        vmf->address, &vmf->ptl);
3709         if (!vmf->pte)
3710                 return 0;
3711         /*
3712          * Be careful so that we will only recover a special uffd-wp pte into a
3713          * none pte.  Otherwise it means the pte could have changed, so retry.
3714          *
3715          * This should also cover the case where e.g. the pte changed
3716          * quickly from a PTE_MARKER_UFFD_WP into PTE_MARKER_POISONED.
3717          * So is_pte_marker() check is not enough to safely drop the pte.
3718          */
3719         if (pte_same(vmf->orig_pte, ptep_get(vmf->pte)))
3720                 pte_clear(vmf->vma->vm_mm, vmf->address, vmf->pte);
3721         pte_unmap_unlock(vmf->pte, vmf->ptl);
3722         return 0;
3723 }
3724
3725 static vm_fault_t do_pte_missing(struct vm_fault *vmf)
3726 {
3727         if (vma_is_anonymous(vmf->vma))
3728                 return do_anonymous_page(vmf);
3729         else
3730                 return do_fault(vmf);
3731 }
3732
3733 /*
3734  * This is actually a page-missing access, but with uffd-wp special pte
3735  * installed.  It means this pte was wr-protected before being unmapped.
3736  */
3737 static vm_fault_t pte_marker_handle_uffd_wp(struct vm_fault *vmf)
3738 {
3739         /*
3740          * Just in case there're leftover special ptes even after the region
3741          * got unregistered - we can simply clear them.
3742          */
3743         if (unlikely(!userfaultfd_wp(vmf->vma)))
3744                 return pte_marker_clear(vmf);
3745
3746         return do_pte_missing(vmf);
3747 }
3748
3749 static vm_fault_t handle_pte_marker(struct vm_fault *vmf)
3750 {
3751         swp_entry_t entry = pte_to_swp_entry(vmf->orig_pte);
3752         unsigned long marker = pte_marker_get(entry);
3753
3754         /*
3755          * PTE markers should never be empty.  If anything weird happened,
3756          * the best thing to do is to kill the process along with its mm.
3757          */
3758         if (WARN_ON_ONCE(!marker))
3759                 return VM_FAULT_SIGBUS;
3760
3761         /* Higher priority than uffd-wp when data corrupted */
3762         if (marker & PTE_MARKER_POISONED)
3763                 return VM_FAULT_HWPOISON;
3764
3765         if (pte_marker_entry_uffd_wp(entry))
3766                 return pte_marker_handle_uffd_wp(vmf);
3767
3768         /* This is an unknown pte marker */
3769         return VM_FAULT_SIGBUS;
3770 }
3771
3772 /*
3773  * We enter with non-exclusive mmap_lock (to exclude vma changes,
3774  * but allow concurrent faults), and pte mapped but not yet locked.
3775  * We return with pte unmapped and unlocked.
3776  *
3777  * We return with the mmap_lock locked or unlocked in the same cases
3778  * as does filemap_fault().
3779  */
3780 vm_fault_t do_swap_page(struct vm_fault *vmf)
3781 {
3782         struct vm_area_struct *vma = vmf->vma;
3783         struct folio *swapcache, *folio = NULL;
3784         struct page *page;
3785         struct swap_info_struct *si = NULL;
3786         rmap_t rmap_flags = RMAP_NONE;
3787         bool exclusive = false;
3788         swp_entry_t entry;
3789         pte_t pte;
3790         vm_fault_t ret = 0;
3791         void *shadow = NULL;
3792
3793         if (!pte_unmap_same(vmf))
3794                 goto out;
3795
3796         entry = pte_to_swp_entry(vmf->orig_pte);
3797         if (unlikely(non_swap_entry(entry))) {
3798                 if (is_migration_entry(entry)) {
3799                         migration_entry_wait(vma->vm_mm, vmf->pmd,
3800                                              vmf->address);
3801                 } else if (is_device_exclusive_entry(entry)) {
3802                         vmf->page = pfn_swap_entry_to_page(entry);
3803                         ret = remove_device_exclusive_entry(vmf);
3804                 } else if (is_device_private_entry(entry)) {
3805                         if (vmf->flags & FAULT_FLAG_VMA_LOCK) {
3806                                 /*
3807                                  * migrate_to_ram is not yet ready to operate
3808                                  * under VMA lock.
3809                                  */
3810                                 vma_end_read(vma);
3811                                 ret = VM_FAULT_RETRY;
3812                                 goto out;
3813                         }
3814
3815                         vmf->page = pfn_swap_entry_to_page(entry);
3816                         vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd,
3817                                         vmf->address, &vmf->ptl);
3818                         if (unlikely(!vmf->pte ||
3819                                      !pte_same(ptep_get(vmf->pte),
3820                                                         vmf->orig_pte)))
3821                                 goto unlock;
3822
3823                         /*
3824                          * Get a page reference while we know the page can't be
3825                          * freed.
3826                          */
3827                         get_page(vmf->page);
3828                         pte_unmap_unlock(vmf->pte, vmf->ptl);
3829                         ret = vmf->page->pgmap->ops->migrate_to_ram(vmf);
3830                         put_page(vmf->page);
3831                 } else if (is_hwpoison_entry(entry)) {
3832                         ret = VM_FAULT_HWPOISON;
3833                 } else if (is_pte_marker_entry(entry)) {
3834                         ret = handle_pte_marker(vmf);
3835                 } else {
3836                         print_bad_pte(vma, vmf->address, vmf->orig_pte, NULL);
3837                         ret = VM_FAULT_SIGBUS;
3838                 }
3839                 goto out;
3840         }
3841
3842         /* Prevent swapoff from happening to us. */
3843         si = get_swap_device(entry);
3844         if (unlikely(!si))
3845                 goto out;
3846
3847         folio = swap_cache_get_folio(entry, vma, vmf->address);
3848         if (folio)
3849                 page = folio_file_page(folio, swp_offset(entry));
3850         swapcache = folio;
3851
3852         if (!folio) {
3853                 if (data_race(si->flags & SWP_SYNCHRONOUS_IO) &&
3854                     __swap_count(entry) == 1) {
3855                         /* skip swapcache */
3856                         folio = vma_alloc_folio(GFP_HIGHUSER_MOVABLE, 0,
3857                                                 vma, vmf->address, false);
3858                         page = &folio->page;
3859                         if (folio) {
3860                                 __folio_set_locked(folio);
3861                                 __folio_set_swapbacked(folio);
3862
3863                                 if (mem_cgroup_swapin_charge_folio(folio,
3864                                                         vma->vm_mm, GFP_KERNEL,
3865                                                         entry)) {
3866                                         ret = VM_FAULT_OOM;
3867                                         goto out_page;
3868                                 }
3869                                 mem_cgroup_swapin_uncharge_swap(entry);
3870
3871                                 shadow = get_shadow_from_swap_cache(entry);
3872                                 if (shadow)
3873                                         workingset_refault(folio, shadow);
3874
3875                                 folio_add_lru(folio);
3876
3877                                 /* To provide entry to swap_readpage() */
3878                                 folio->swap = entry;
3879                                 swap_readpage(page, true, NULL);
3880                                 folio->private = NULL;
3881                         }
3882                 } else {
3883                         page = swapin_readahead(entry, GFP_HIGHUSER_MOVABLE,
3884                                                 vmf);
3885                         if (page)
3886                                 folio = page_folio(page);
3887                         swapcache = folio;
3888                 }
3889
3890                 if (!folio) {
3891                         /*
3892                          * Back out if somebody else faulted in this pte
3893                          * while we released the pte lock.
3894                          */
3895                         vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd,
3896                                         vmf->address, &vmf->ptl);
3897                         if (likely(vmf->pte &&
3898                                    pte_same(ptep_get(vmf->pte), vmf->orig_pte)))
3899                                 ret = VM_FAULT_OOM;
3900                         goto unlock;
3901                 }
3902
3903                 /* Had to read the page from swap area: Major fault */
3904                 ret = VM_FAULT_MAJOR;
3905                 count_vm_event(PGMAJFAULT);
3906                 count_memcg_event_mm(vma->vm_mm, PGMAJFAULT);
3907         } else if (PageHWPoison(page)) {
3908                 /*
3909                  * hwpoisoned dirty swapcache pages are kept for killing
3910                  * owner processes (which may be unknown at hwpoison time)
3911                  */
3912                 ret = VM_FAULT_HWPOISON;
3913                 goto out_release;
3914         }
3915
3916         ret |= folio_lock_or_retry(folio, vmf);
3917         if (ret & VM_FAULT_RETRY)
3918                 goto out_release;
3919
3920         if (swapcache) {
3921                 /*
3922                  * Make sure folio_free_swap() or swapoff did not release the
3923                  * swapcache from under us.  The page pin, and pte_same test
3924                  * below, are not enough to exclude that.  Even if it is still
3925                  * swapcache, we need to check that the page's swap has not
3926                  * changed.
3927                  */
3928                 if (unlikely(!folio_test_swapcache(folio) ||
3929                              page_swap_entry(page).val != entry.val))
3930                         goto out_page;
3931
3932                 /*
3933                  * KSM sometimes has to copy on read faults, for example, if
3934                  * page->index of !PageKSM() pages would be nonlinear inside the
3935                  * anon VMA -- PageKSM() is lost on actual swapout.
3936                  */
3937                 page = ksm_might_need_to_copy(page, vma, vmf->address);
3938                 if (unlikely(!page)) {
3939                         ret = VM_FAULT_OOM;
3940                         goto out_page;
3941                 } else if (unlikely(PTR_ERR(page) == -EHWPOISON)) {
3942                         ret = VM_FAULT_HWPOISON;
3943                         goto out_page;
3944                 }
3945                 folio = page_folio(page);
3946
3947                 /*
3948                  * If we want to map a page that's in the swapcache writable, we
3949                  * have to detect via the refcount if we're really the exclusive
3950                  * owner. Try removing the extra reference from the local LRU
3951                  * caches if required.
3952                  */
3953                 if ((vmf->flags & FAULT_FLAG_WRITE) && folio == swapcache &&
3954                     !folio_test_ksm(folio) && !folio_test_lru(folio))
3955                         lru_add_drain();
3956         }
3957
3958         folio_throttle_swaprate(folio, GFP_KERNEL);
3959
3960         /*
3961          * Back out if somebody else already faulted in this pte.
3962          */
3963         vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd, vmf->address,
3964                         &vmf->ptl);
3965         if (unlikely(!vmf->pte || !pte_same(ptep_get(vmf->pte), vmf->orig_pte)))
3966                 goto out_nomap;
3967
3968         if (unlikely(!folio_test_uptodate(folio))) {
3969                 ret = VM_FAULT_SIGBUS;
3970                 goto out_nomap;
3971         }
3972
3973         /*
3974          * PG_anon_exclusive reuses PG_mappedtodisk for anon pages. A swap pte
3975          * must never point at an anonymous page in the swapcache that is
3976          * PG_anon_exclusive. Sanity check that this holds and especially, that
3977          * no filesystem set PG_mappedtodisk on a page in the swapcache. Sanity
3978          * check after taking the PT lock and making sure that nobody
3979          * concurrently faulted in this page and set PG_anon_exclusive.
3980          */
3981         BUG_ON(!folio_test_anon(folio) && folio_test_mappedtodisk(folio));
3982         BUG_ON(folio_test_anon(folio) && PageAnonExclusive(page));
3983
3984         /*
3985          * Check under PT lock (to protect against concurrent fork() sharing
3986          * the swap entry concurrently) for certainly exclusive pages.
3987          */
3988         if (!folio_test_ksm(folio)) {
3989                 exclusive = pte_swp_exclusive(vmf->orig_pte);
3990                 if (folio != swapcache) {
3991                         /*
3992                          * We have a fresh page that is not exposed to the
3993                          * swapcache -> certainly exclusive.
3994                          */
3995                         exclusive = true;
3996                 } else if (exclusive && folio_test_writeback(folio) &&
3997                           data_race(si->flags & SWP_STABLE_WRITES)) {
3998                         /*
3999                          * This is tricky: not all swap backends support
4000                          * concurrent page modifications while under writeback.
4001                          *
4002                          * So if we stumble over such a page in the swapcache
4003                          * we must not set the page exclusive, otherwise we can
4004                          * map it writable without further checks and modify it
4005                          * while still under writeback.
4006                          *
4007                          * For these problematic swap backends, simply drop the
4008                          * exclusive marker: this is perfectly fine as we start
4009                          * writeback only if we fully unmapped the page and
4010                          * there are no unexpected references on the page after
4011                          * unmapping succeeded. After fully unmapped, no
4012                          * further GUP references (FOLL_GET and FOLL_PIN) can
4013                          * appear, so dropping the exclusive marker and mapping
4014                          * it only R/O is fine.
4015                          */
4016                         exclusive = false;
4017                 }
4018         }
4019
4020         /*
4021          * Some architectures may have to restore extra metadata to the page
4022          * when reading from swap. This metadata may be indexed by swap entry
4023          * so this must be called before swap_free().
4024          */
4025         arch_swap_restore(entry, folio);
4026
4027         /*
4028          * Remove the swap entry and conditionally try to free up the swapcache.
4029          * We're already holding a reference on the page but haven't mapped it
4030          * yet.
4031          */
4032         swap_free(entry);
4033         if (should_try_to_free_swap(folio, vma, vmf->flags))
4034                 folio_free_swap(folio);
4035
4036         inc_mm_counter(vma->vm_mm, MM_ANONPAGES);
4037         dec_mm_counter(vma->vm_mm, MM_SWAPENTS);
4038         pte = mk_pte(page, vma->vm_page_prot);
4039
4040         /*
4041          * Same logic as in do_wp_page(); however, optimize for pages that are
4042          * certainly not shared either because we just allocated them without
4043          * exposing them to the swapcache or because the swap entry indicates
4044          * exclusivity.
4045          */
4046         if (!folio_test_ksm(folio) &&
4047             (exclusive || folio_ref_count(folio) == 1)) {
4048                 if (vmf->flags & FAULT_FLAG_WRITE) {
4049                         pte = maybe_mkwrite(pte_mkdirty(pte), vma);
4050                         vmf->flags &= ~FAULT_FLAG_WRITE;
4051                 }
4052                 rmap_flags |= RMAP_EXCLUSIVE;
4053         }
4054         flush_icache_page(vma, page);
4055         if (pte_swp_soft_dirty(vmf->orig_pte))
4056                 pte = pte_mksoft_dirty(pte);
4057         if (pte_swp_uffd_wp(vmf->orig_pte))
4058                 pte = pte_mkuffd_wp(pte);
4059         vmf->orig_pte = pte;
4060
4061         /* ksm created a completely new copy */
4062         if (unlikely(folio != swapcache && swapcache)) {
4063                 page_add_new_anon_rmap(page, vma, vmf->address);
4064                 folio_add_lru_vma(folio, vma);
4065         } else {
4066                 page_add_anon_rmap(page, vma, vmf->address, rmap_flags);
4067         }
4068
4069         VM_BUG_ON(!folio_test_anon(folio) ||
4070                         (pte_write(pte) && !PageAnonExclusive(page)));
4071         set_pte_at(vma->vm_mm, vmf->address, vmf->pte, pte);
4072         arch_do_swap_page(vma->vm_mm, vma, vmf->address, pte, vmf->orig_pte);
4073
4074         folio_unlock(folio);
4075         if (folio != swapcache && swapcache) {
4076                 /*
4077                  * Hold the lock to avoid the swap entry to be reused
4078                  * until we take the PT lock for the pte_same() check
4079                  * (to avoid false positives from pte_same). For
4080                  * further safety release the lock after the swap_free
4081                  * so that the swap count won't change under a
4082                  * parallel locked swapcache.
4083                  */
4084                 folio_unlock(swapcache);
4085                 folio_put(swapcache);
4086         }
4087
4088         if (vmf->flags & FAULT_FLAG_WRITE) {
4089                 ret |= do_wp_page(vmf);
4090                 if (ret & VM_FAULT_ERROR)
4091                         ret &= VM_FAULT_ERROR;
4092                 goto out;
4093         }
4094
4095         /* No need to invalidate - it was non-present before */
4096         update_mmu_cache_range(vmf, vma, vmf->address, vmf->pte, 1);
4097 unlock:
4098         if (vmf->pte)
4099                 pte_unmap_unlock(vmf->pte, vmf->ptl);
4100 out:
4101         if (si)
4102                 put_swap_device(si);
4103         return ret;
4104 out_nomap:
4105         if (vmf->pte)
4106                 pte_unmap_unlock(vmf->pte, vmf->ptl);
4107 out_page:
4108         folio_unlock(folio);
4109 out_release:
4110         folio_put(folio);
4111         if (folio != swapcache && swapcache) {
4112                 folio_unlock(swapcache);
4113                 folio_put(swapcache);
4114         }
4115         if (si)
4116                 put_swap_device(si);
4117         return ret;
4118 }
4119
4120 /*
4121  * We enter with non-exclusive mmap_lock (to exclude vma changes,
4122  * but allow concurrent faults), and pte mapped but not yet locked.
4123  * We return with mmap_lock still held, but pte unmapped and unlocked.
4124  */
4125 static vm_fault_t do_anonymous_page(struct vm_fault *vmf)
4126 {
4127         bool uffd_wp = vmf_orig_pte_uffd_wp(vmf);
4128         struct vm_area_struct *vma = vmf->vma;
4129         struct folio *folio;
4130         vm_fault_t ret = 0;
4131         pte_t entry;
4132
4133         /* File mapping without ->vm_ops ? */
4134         if (vma->vm_flags & VM_SHARED)
4135                 return VM_FAULT_SIGBUS;
4136
4137         /*
4138          * Use pte_alloc() instead of pte_alloc_map(), so that OOM can
4139          * be distinguished from a transient failure of pte_offset_map().
4140          */
4141         if (pte_alloc(vma->vm_mm, vmf->pmd))
4142                 return VM_FAULT_OOM;
4143
4144         /* Use the zero-page for reads */
4145         if (!(vmf->flags & FAULT_FLAG_WRITE) &&
4146                         !mm_forbids_zeropage(vma->vm_mm)) {
4147                 entry = pte_mkspecial(pfn_pte(my_zero_pfn(vmf->address),
4148                                                 vma->vm_page_prot));
4149                 vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd,
4150                                 vmf->address, &vmf->ptl);
4151                 if (!vmf->pte)
4152                         goto unlock;
4153                 if (vmf_pte_changed(vmf)) {
4154                         update_mmu_tlb(vma, vmf->address, vmf->pte);
4155                         goto unlock;
4156                 }
4157                 ret = check_stable_address_space(vma->vm_mm);
4158                 if (ret)
4159                         goto unlock;
4160                 /* Deliver the page fault to userland, check inside PT lock */
4161                 if (userfaultfd_missing(vma)) {
4162                         pte_unmap_unlock(vmf->pte, vmf->ptl);
4163                         return handle_userfault(vmf, VM_UFFD_MISSING);
4164                 }
4165                 goto setpte;
4166         }
4167
4168         /* Allocate our own private page. */
4169         if (unlikely(anon_vma_prepare(vma)))
4170                 goto oom;
4171         folio = vma_alloc_zeroed_movable_folio(vma, vmf->address);
4172         if (!folio)
4173                 goto oom;
4174
4175         if (mem_cgroup_charge(folio, vma->vm_mm, GFP_KERNEL))
4176                 goto oom_free_page;
4177         folio_throttle_swaprate(folio, GFP_KERNEL);
4178
4179         /*
4180          * The memory barrier inside __folio_mark_uptodate makes sure that
4181          * preceding stores to the page contents become visible before
4182          * the set_pte_at() write.
4183          */
4184         __folio_mark_uptodate(folio);
4185
4186         entry = mk_pte(&folio->page, vma->vm_page_prot);
4187         entry = pte_sw_mkyoung(entry);
4188         if (vma->vm_flags & VM_WRITE)
4189                 entry = pte_mkwrite(pte_mkdirty(entry), vma);
4190
4191         vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd, vmf->address,
4192                         &vmf->ptl);
4193         if (!vmf->pte)
4194                 goto release;
4195         if (vmf_pte_changed(vmf)) {
4196                 update_mmu_tlb(vma, vmf->address, vmf->pte);
4197                 goto release;
4198         }
4199
4200         ret = check_stable_address_space(vma->vm_mm);
4201         if (ret)
4202                 goto release;
4203
4204         /* Deliver the page fault to userland, check inside PT lock */
4205         if (userfaultfd_missing(vma)) {
4206                 pte_unmap_unlock(vmf->pte, vmf->ptl);
4207                 folio_put(folio);
4208                 return handle_userfault(vmf, VM_UFFD_MISSING);
4209         }
4210
4211         inc_mm_counter(vma->vm_mm, MM_ANONPAGES);
4212         folio_add_new_anon_rmap(folio, vma, vmf->address);
4213         folio_add_lru_vma(folio, vma);
4214 setpte:
4215         if (uffd_wp)
4216                 entry = pte_mkuffd_wp(entry);
4217         set_pte_at(vma->vm_mm, vmf->address, vmf->pte, entry);
4218
4219         /* No need to invalidate - it was non-present before */
4220         update_mmu_cache_range(vmf, vma, vmf->address, vmf->pte, 1);
4221 unlock:
4222         if (vmf->pte)
4223                 pte_unmap_unlock(vmf->pte, vmf->ptl);
4224         return ret;
4225 release:
4226         folio_put(folio);
4227         goto unlock;
4228 oom_free_page:
4229         folio_put(folio);
4230 oom:
4231         return VM_FAULT_OOM;
4232 }
4233
4234 /*
4235  * The mmap_lock must have been held on entry, and may have been
4236  * released depending on flags and vma->vm_ops->fault() return value.
4237  * See filemap_fault() and __lock_page_retry().
4238  */
4239 static vm_fault_t __do_fault(struct vm_fault *vmf)
4240 {
4241         struct vm_area_struct *vma = vmf->vma;
4242         vm_fault_t ret;
4243
4244         /*
4245          * Preallocate pte before we take page_lock because this might lead to
4246          * deadlocks for memcg reclaim which waits for pages under writeback:
4247          *                              lock_page(A)
4248          *                              SetPageWriteback(A)
4249          *                              unlock_page(A)
4250          * lock_page(B)
4251          *                              lock_page(B)
4252          * pte_alloc_one
4253          *   shrink_page_list
4254          *     wait_on_page_writeback(A)
4255          *                              SetPageWriteback(B)
4256          *                              unlock_page(B)
4257          *                              # flush A, B to clear the writeback
4258          */
4259         if (pmd_none(*vmf->pmd) && !vmf->prealloc_pte) {
4260                 vmf->prealloc_pte = pte_alloc_one(vma->vm_mm);
4261                 if (!vmf->prealloc_pte)
4262                         return VM_FAULT_OOM;
4263         }
4264
4265         ret = vma->vm_ops->fault(vmf);
4266         if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE | VM_FAULT_RETRY |
4267                             VM_FAULT_DONE_COW)))
4268                 return ret;
4269
4270         if (unlikely(PageHWPoison(vmf->page))) {
4271                 struct page *page = vmf->page;
4272                 vm_fault_t poisonret = VM_FAULT_HWPOISON;
4273                 if (ret & VM_FAULT_LOCKED) {
4274                         if (page_mapped(page))
4275                                 unmap_mapping_pages(page_mapping(page),
4276                                                     page->index, 1, false);
4277                         /* Retry if a clean page was removed from the cache. */
4278                         if (invalidate_inode_page(page))
4279                                 poisonret = VM_FAULT_NOPAGE;
4280                         unlock_page(page);
4281                 }
4282                 put_page(page);
4283                 vmf->page = NULL;
4284                 return poisonret;
4285         }
4286
4287         if (unlikely(!(ret & VM_FAULT_LOCKED)))
4288                 lock_page(vmf->page);
4289         else
4290                 VM_BUG_ON_PAGE(!PageLocked(vmf->page), vmf->page);
4291
4292         return ret;
4293 }
4294
4295 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
4296 static void deposit_prealloc_pte(struct vm_fault *vmf)
4297 {
4298         struct vm_area_struct *vma = vmf->vma;
4299
4300         pgtable_trans_huge_deposit(vma->vm_mm, vmf->pmd, vmf->prealloc_pte);
4301         /*
4302          * We are going to consume the prealloc table,
4303          * count that as nr_ptes.
4304          */
4305         mm_inc_nr_ptes(vma->vm_mm);
4306         vmf->prealloc_pte = NULL;
4307 }
4308
4309 vm_fault_t do_set_pmd(struct vm_fault *vmf, struct page *page)
4310 {
4311         struct vm_area_struct *vma = vmf->vma;
4312         bool write = vmf->flags & FAULT_FLAG_WRITE;
4313         unsigned long haddr = vmf->address & HPAGE_PMD_MASK;
4314         pmd_t entry;
4315         vm_fault_t ret = VM_FAULT_FALLBACK;
4316
4317         if (!transhuge_vma_suitable(vma, haddr))
4318                 return ret;
4319
4320         page = compound_head(page);
4321         if (compound_order(page) != HPAGE_PMD_ORDER)
4322                 return ret;
4323
4324         /*
4325          * Just backoff if any subpage of a THP is corrupted otherwise
4326          * the corrupted page may mapped by PMD silently to escape the
4327          * check.  This kind of THP just can be PTE mapped.  Access to
4328          * the corrupted subpage should trigger SIGBUS as expected.
4329          */
4330         if (unlikely(PageHasHWPoisoned(page)))
4331                 return ret;
4332
4333         /*
4334          * Archs like ppc64 need additional space to store information
4335          * related to pte entry. Use the preallocated table for that.
4336          */
4337         if (arch_needs_pgtable_deposit() && !vmf->prealloc_pte) {
4338                 vmf->prealloc_pte = pte_alloc_one(vma->vm_mm);
4339                 if (!vmf->prealloc_pte)
4340                         return VM_FAULT_OOM;
4341         }
4342
4343         vmf->ptl = pmd_lock(vma->vm_mm, vmf->pmd);
4344         if (unlikely(!pmd_none(*vmf->pmd)))
4345                 goto out;
4346
4347         flush_icache_pages(vma, page, HPAGE_PMD_NR);
4348
4349         entry = mk_huge_pmd(page, vma->vm_page_prot);
4350         if (write)
4351                 entry = maybe_pmd_mkwrite(pmd_mkdirty(entry), vma);
4352
4353         add_mm_counter(vma->vm_mm, mm_counter_file(page), HPAGE_PMD_NR);
4354         page_add_file_rmap(page, vma, true);
4355
4356         /*
4357          * deposit and withdraw with pmd lock held
4358          */
4359         if (arch_needs_pgtable_deposit())
4360                 deposit_prealloc_pte(vmf);
4361
4362         set_pmd_at(vma->vm_mm, haddr, vmf->pmd, entry);
4363
4364         update_mmu_cache_pmd(vma, haddr, vmf->pmd);
4365
4366         /* fault is handled */
4367         ret = 0;
4368         count_vm_event(THP_FILE_MAPPED);
4369 out:
4370         spin_unlock(vmf->ptl);
4371         return ret;
4372 }
4373 #else
4374 vm_fault_t do_set_pmd(struct vm_fault *vmf, struct page *page)
4375 {
4376         return VM_FAULT_FALLBACK;
4377 }
4378 #endif
4379
4380 /**
4381  * set_pte_range - Set a range of PTEs to point to pages in a folio.
4382  * @vmf: Fault decription.
4383  * @folio: The folio that contains @page.
4384  * @page: The first page to create a PTE for.
4385  * @nr: The number of PTEs to create.
4386  * @addr: The first address to create a PTE for.
4387  */
4388 void set_pte_range(struct vm_fault *vmf, struct folio *folio,
4389                 struct page *page, unsigned int nr, unsigned long addr)
4390 {
4391         struct vm_area_struct *vma = vmf->vma;
4392         bool uffd_wp = vmf_orig_pte_uffd_wp(vmf);
4393         bool write = vmf->flags & FAULT_FLAG_WRITE;
4394         bool prefault = in_range(vmf->address, addr, nr * PAGE_SIZE);
4395         pte_t entry;
4396
4397         flush_icache_pages(vma, page, nr);
4398         entry = mk_pte(page, vma->vm_page_prot);
4399
4400         if (prefault && arch_wants_old_prefaulted_pte())
4401                 entry = pte_mkold(entry);
4402         else
4403                 entry = pte_sw_mkyoung(entry);
4404
4405         if (write)
4406                 entry = maybe_mkwrite(pte_mkdirty(entry), vma);
4407         if (unlikely(uffd_wp))
4408                 entry = pte_mkuffd_wp(entry);
4409         /* copy-on-write page */
4410         if (write && !(vma->vm_flags & VM_SHARED)) {
4411                 add_mm_counter(vma->vm_mm, MM_ANONPAGES, nr);
4412                 VM_BUG_ON_FOLIO(nr != 1, folio);
4413                 folio_add_new_anon_rmap(folio, vma, addr);
4414                 folio_add_lru_vma(folio, vma);
4415         } else {
4416                 add_mm_counter(vma->vm_mm, mm_counter_file(page), nr);
4417                 folio_add_file_rmap_range(folio, page, nr, vma, false);
4418         }
4419         set_ptes(vma->vm_mm, addr, vmf->pte, entry, nr);
4420
4421         /* no need to invalidate: a not-present page won't be cached */
4422         update_mmu_cache_range(vmf, vma, addr, vmf->pte, nr);
4423 }
4424
4425 static bool vmf_pte_changed(struct vm_fault *vmf)
4426 {
4427         if (vmf->flags & FAULT_FLAG_ORIG_PTE_VALID)
4428                 return !pte_same(ptep_get(vmf->pte), vmf->orig_pte);
4429
4430         return !pte_none(ptep_get(vmf->pte));
4431 }
4432
4433 /**
4434  * finish_fault - finish page fault once we have prepared the page to fault
4435  *
4436  * @vmf: structure describing the fault
4437  *
4438  * This function handles all that is needed to finish a page fault once the
4439  * page to fault in is prepared. It handles locking of PTEs, inserts PTE for
4440  * given page, adds reverse page mapping, handles memcg charges and LRU
4441  * addition.
4442  *
4443  * The function expects the page to be locked and on success it consumes a
4444  * reference of a page being mapped (for the PTE which maps it).
4445  *
4446  * Return: %0 on success, %VM_FAULT_ code in case of error.
4447  */
4448 vm_fault_t finish_fault(struct vm_fault *vmf)
4449 {
4450         struct vm_area_struct *vma = vmf->vma;
4451         struct page *page;
4452         vm_fault_t ret;
4453
4454         /* Did we COW the page? */
4455         if ((vmf->flags & FAULT_FLAG_WRITE) && !(vma->vm_flags & VM_SHARED))
4456                 page = vmf->cow_page;
4457         else
4458                 page = vmf->page;
4459
4460         /*
4461          * check even for read faults because we might have lost our CoWed
4462          * page
4463          */
4464         if (!(vma->vm_flags & VM_SHARED)) {
4465                 ret = check_stable_address_space(vma->vm_mm);
4466                 if (ret)
4467                         return ret;
4468         }
4469
4470         if (pmd_none(*vmf->pmd)) {
4471                 if (PageTransCompound(page)) {
4472                         ret = do_set_pmd(vmf, page);
4473                         if (ret != VM_FAULT_FALLBACK)
4474                                 return ret;
4475                 }
4476
4477                 if (vmf->prealloc_pte)
4478                         pmd_install(vma->vm_mm, vmf->pmd, &vmf->prealloc_pte);
4479                 else if (unlikely(pte_alloc(vma->vm_mm, vmf->pmd)))
4480                         return VM_FAULT_OOM;
4481         }
4482
4483         vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd,
4484                                       vmf->address, &vmf->ptl);
4485         if (!vmf->pte)
4486                 return VM_FAULT_NOPAGE;
4487
4488         /* Re-check under ptl */
4489         if (likely(!vmf_pte_changed(vmf))) {
4490                 struct folio *folio = page_folio(page);
4491
4492                 set_pte_range(vmf, folio, page, 1, vmf->address);
4493                 ret = 0;
4494         } else {
4495                 update_mmu_tlb(vma, vmf->address, vmf->pte);
4496                 ret = VM_FAULT_NOPAGE;
4497         }
4498
4499         pte_unmap_unlock(vmf->pte, vmf->ptl);
4500         return ret;
4501 }
4502
4503 static unsigned long fault_around_pages __read_mostly =
4504         65536 >> PAGE_SHIFT;
4505
4506 #ifdef CONFIG_DEBUG_FS
4507 static int fault_around_bytes_get(void *data, u64 *val)
4508 {
4509         *val = fault_around_pages << PAGE_SHIFT;
4510         return 0;
4511 }
4512
4513 /*
4514  * fault_around_bytes must be rounded down to the nearest page order as it's
4515  * what do_fault_around() expects to see.
4516  */
4517 static int fault_around_bytes_set(void *data, u64 val)
4518 {
4519         if (val / PAGE_SIZE > PTRS_PER_PTE)
4520                 return -EINVAL;
4521
4522         /*
4523          * The minimum value is 1 page, however this results in no fault-around
4524          * at all. See should_fault_around().
4525          */
4526         fault_around_pages = max(rounddown_pow_of_two(val) >> PAGE_SHIFT, 1UL);
4527
4528         return 0;
4529 }
4530 DEFINE_DEBUGFS_ATTRIBUTE(fault_around_bytes_fops,
4531                 fault_around_bytes_get, fault_around_bytes_set, "%llu\n");
4532
4533 static int __init fault_around_debugfs(void)
4534 {
4535         debugfs_create_file_unsafe("fault_around_bytes", 0644, NULL, NULL,
4536                                    &fault_around_bytes_fops);
4537         return 0;
4538 }
4539 late_initcall(fault_around_debugfs);
4540 #endif
4541
4542 /*
4543  * do_fault_around() tries to map few pages around the fault address. The hope
4544  * is that the pages will be needed soon and this will lower the number of
4545  * faults to handle.
4546  *
4547  * It uses vm_ops->map_pages() to map the pages, which skips the page if it's
4548  * not ready to be mapped: not up-to-date, locked, etc.
4549  *
4550  * This function doesn't cross VMA or page table boundaries, in order to call
4551  * map_pages() and acquire a PTE lock only once.
4552  *
4553  * fault_around_pages defines how many pages we'll try to map.
4554  * do_fault_around() expects it to be set to a power of two less than or equal
4555  * to PTRS_PER_PTE.
4556  *
4557  * The virtual address of the area that we map is naturally aligned to
4558  * fault_around_pages * PAGE_SIZE rounded down to the machine page size
4559  * (and therefore to page order).  This way it's easier to guarantee
4560  * that we don't cross page table boundaries.
4561  */
4562 static vm_fault_t do_fault_around(struct vm_fault *vmf)
4563 {
4564         pgoff_t nr_pages = READ_ONCE(fault_around_pages);
4565         pgoff_t pte_off = pte_index(vmf->address);
4566         /* The page offset of vmf->address within the VMA. */
4567         pgoff_t vma_off = vmf->pgoff - vmf->vma->vm_pgoff;
4568         pgoff_t from_pte, to_pte;
4569         vm_fault_t ret;
4570
4571         /* The PTE offset of the start address, clamped to the VMA. */
4572         from_pte = max(ALIGN_DOWN(pte_off, nr_pages),
4573                        pte_off - min(pte_off, vma_off));
4574
4575         /* The PTE offset of the end address, clamped to the VMA and PTE. */
4576         to_pte = min3(from_pte + nr_pages, (pgoff_t)PTRS_PER_PTE,
4577                       pte_off + vma_pages(vmf->vma) - vma_off) - 1;
4578
4579         if (pmd_none(*vmf->pmd)) {
4580                 vmf->prealloc_pte = pte_alloc_one(vmf->vma->vm_mm);
4581                 if (!vmf->prealloc_pte)
4582                         return VM_FAULT_OOM;
4583         }
4584
4585         rcu_read_lock();
4586         ret = vmf->vma->vm_ops->map_pages(vmf,
4587                         vmf->pgoff + from_pte - pte_off,
4588                         vmf->pgoff + to_pte - pte_off);
4589         rcu_read_unlock();
4590
4591         return ret;
4592 }
4593
4594 /* Return true if we should do read fault-around, false otherwise */
4595 static inline bool should_fault_around(struct vm_fault *vmf)
4596 {
4597         /* No ->map_pages?  No way to fault around... */
4598         if (!vmf->vma->vm_ops->map_pages)
4599                 return false;
4600
4601         if (uffd_disable_fault_around(vmf->vma))
4602                 return false;
4603
4604         /* A single page implies no faulting 'around' at all. */
4605         return fault_around_pages > 1;
4606 }
4607
4608 static vm_fault_t do_read_fault(struct vm_fault *vmf)
4609 {
4610         vm_fault_t ret = 0;
4611         struct folio *folio;
4612
4613         /*
4614          * Let's call ->map_pages() first and use ->fault() as fallback
4615          * if page by the offset is not ready to be mapped (cold cache or
4616          * something).
4617          */
4618         if (should_fault_around(vmf)) {
4619                 ret = do_fault_around(vmf);
4620                 if (ret)
4621                         return ret;
4622         }
4623
4624         ret = vmf_can_call_fault(vmf);
4625         if (ret)
4626                 return ret;
4627
4628         ret = __do_fault(vmf);
4629         if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE | VM_FAULT_RETRY)))
4630                 return ret;
4631
4632         ret |= finish_fault(vmf);
4633         folio = page_folio(vmf->page);
4634         folio_unlock(folio);
4635         if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE | VM_FAULT_RETRY)))
4636                 folio_put(folio);
4637         return ret;
4638 }
4639
4640 static vm_fault_t do_cow_fault(struct vm_fault *vmf)
4641 {
4642         struct vm_area_struct *vma = vmf->vma;
4643         vm_fault_t ret;
4644
4645         ret = vmf_can_call_fault(vmf);
4646         if (!ret)
4647                 ret = vmf_anon_prepare(vmf);
4648         if (ret)
4649                 return ret;
4650
4651         vmf->cow_page = alloc_page_vma(GFP_HIGHUSER_MOVABLE, vma, vmf->address);
4652         if (!vmf->cow_page)
4653                 return VM_FAULT_OOM;
4654
4655         if (mem_cgroup_charge(page_folio(vmf->cow_page), vma->vm_mm,
4656                                 GFP_KERNEL)) {
4657                 put_page(vmf->cow_page);
4658                 return VM_FAULT_OOM;
4659         }
4660         folio_throttle_swaprate(page_folio(vmf->cow_page), GFP_KERNEL);
4661
4662         ret = __do_fault(vmf);
4663         if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE | VM_FAULT_RETRY)))
4664                 goto uncharge_out;
4665         if (ret & VM_FAULT_DONE_COW)
4666                 return ret;
4667
4668         copy_user_highpage(vmf->cow_page, vmf->page, vmf->address, vma);
4669         __SetPageUptodate(vmf->cow_page);
4670
4671         ret |= finish_fault(vmf);
4672         unlock_page(vmf->page);
4673         put_page(vmf->page);
4674         if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE | VM_FAULT_RETRY)))
4675                 goto uncharge_out;
4676         return ret;
4677 uncharge_out:
4678         put_page(vmf->cow_page);
4679         return ret;
4680 }
4681
4682 static vm_fault_t do_shared_fault(struct vm_fault *vmf)
4683 {
4684         struct vm_area_struct *vma = vmf->vma;
4685         vm_fault_t ret, tmp;
4686         struct folio *folio;
4687
4688         ret = vmf_can_call_fault(vmf);
4689         if (ret)
4690                 return ret;
4691
4692         ret = __do_fault(vmf);
4693         if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE | VM_FAULT_RETRY)))
4694                 return ret;
4695
4696         folio = page_folio(vmf->page);
4697
4698         /*
4699          * Check if the backing address space wants to know that the page is
4700          * about to become writable
4701          */
4702         if (vma->vm_ops->page_mkwrite) {
4703                 folio_unlock(folio);
4704                 tmp = do_page_mkwrite(vmf, folio);
4705                 if (unlikely(!tmp ||
4706                                 (tmp & (VM_FAULT_ERROR | VM_FAULT_NOPAGE)))) {
4707                         folio_put(folio);
4708                         return tmp;
4709                 }
4710         }
4711
4712         ret |= finish_fault(vmf);
4713         if (unlikely(ret & (VM_FAULT_ERROR | VM_FAULT_NOPAGE |
4714                                         VM_FAULT_RETRY))) {
4715                 folio_unlock(folio);
4716                 folio_put(folio);
4717                 return ret;
4718         }
4719
4720         ret |= fault_dirty_shared_page(vmf);
4721         return ret;
4722 }
4723
4724 /*
4725  * We enter with non-exclusive mmap_lock (to exclude vma changes,
4726  * but allow concurrent faults).
4727  * The mmap_lock may have been released depending on flags and our
4728  * return value.  See filemap_fault() and __folio_lock_or_retry().
4729  * If mmap_lock is released, vma may become invalid (for example
4730  * by other thread calling munmap()).
4731  */
4732 static vm_fault_t do_fault(struct vm_fault *vmf)
4733 {
4734         struct vm_area_struct *vma = vmf->vma;
4735         struct mm_struct *vm_mm = vma->vm_mm;
4736         vm_fault_t ret;
4737
4738         /*
4739          * The VMA was not fully populated on mmap() or missing VM_DONTEXPAND
4740          */
4741         if (!vma->vm_ops->fault) {
4742                 vmf->pte = pte_offset_map_lock(vmf->vma->vm_mm, vmf->pmd,
4743                                                vmf->address, &vmf->ptl);
4744                 if (unlikely(!vmf->pte))
4745                         ret = VM_FAULT_SIGBUS;
4746                 else {
4747                         /*
4748                          * Make sure this is not a temporary clearing of pte
4749                          * by holding ptl and checking again. A R/M/W update
4750                          * of pte involves: take ptl, clearing the pte so that
4751                          * we don't have concurrent modification by hardware
4752                          * followed by an update.
4753                          */
4754                         if (unlikely(pte_none(ptep_get(vmf->pte))))
4755                                 ret = VM_FAULT_SIGBUS;
4756                         else
4757                                 ret = VM_FAULT_NOPAGE;
4758
4759                         pte_unmap_unlock(vmf->pte, vmf->ptl);
4760                 }
4761         } else if (!(vmf->flags & FAULT_FLAG_WRITE))
4762                 ret = do_read_fault(vmf);
4763         else if (!(vma->vm_flags & VM_SHARED))
4764                 ret = do_cow_fault(vmf);
4765         else
4766                 ret = do_shared_fault(vmf);
4767
4768         /* preallocated pagetable is unused: free it */
4769         if (vmf->prealloc_pte) {
4770                 pte_free(vm_mm, vmf->prealloc_pte);
4771                 vmf->prealloc_pte = NULL;
4772         }
4773         return ret;
4774 }
4775
4776 int numa_migrate_prep(struct folio *folio, struct vm_area_struct *vma,
4777                       unsigned long addr, int page_nid, int *flags)
4778 {
4779         folio_get(folio);
4780
4781         /* Record the current PID acceesing VMA */
4782         vma_set_access_pid_bit(vma);
4783
4784         count_vm_numa_event(NUMA_HINT_FAULTS);
4785         if (page_nid == numa_node_id()) {
4786                 count_vm_numa_event(NUMA_HINT_FAULTS_LOCAL);
4787                 *flags |= TNF_FAULT_LOCAL;
4788         }
4789
4790         return mpol_misplaced(folio, vma, addr);
4791 }
4792
4793 static vm_fault_t do_numa_page(struct vm_fault *vmf)
4794 {
4795         struct vm_area_struct *vma = vmf->vma;
4796         struct folio *folio = NULL;
4797         int nid = NUMA_NO_NODE;
4798         bool writable = false;
4799         int last_cpupid;
4800         int target_nid;
4801         pte_t pte, old_pte;
4802         int flags = 0;
4803
4804         /*
4805          * The "pte" at this point cannot be used safely without
4806          * validation through pte_unmap_same(). It's of NUMA type but
4807          * the pfn may be screwed if the read is non atomic.
4808          */
4809         spin_lock(vmf->ptl);
4810         if (unlikely(!pte_same(ptep_get(vmf->pte), vmf->orig_pte))) {
4811                 pte_unmap_unlock(vmf->pte, vmf->ptl);
4812                 goto out;
4813         }
4814
4815         /* Get the normal PTE  */
4816         old_pte = ptep_get(vmf->pte);
4817         pte = pte_modify(old_pte, vma->vm_page_prot);
4818
4819         /*
4820          * Detect now whether the PTE could be writable; this information
4821          * is only valid while holding the PT lock.
4822          */
4823         writable = pte_write(pte);
4824         if (!writable && vma_wants_manual_pte_write_upgrade(vma) &&
4825             can_change_pte_writable(vma, vmf->address, pte))
4826                 writable = true;
4827
4828         folio = vm_normal_folio(vma, vmf->address, pte);
4829         if (!folio || folio_is_zone_device(folio))
4830                 goto out_map;
4831
4832         /* TODO: handle PTE-mapped THP */
4833         if (folio_test_large(folio))
4834                 goto out_map;
4835
4836         /*
4837          * Avoid grouping on RO pages in general. RO pages shouldn't hurt as
4838          * much anyway since they can be in shared cache state. This misses
4839          * the case where a mapping is writable but the process never writes
4840          * to it but pte_write gets cleared during protection updates and
4841          * pte_dirty has unpredictable behaviour between PTE scan updates,
4842          * background writeback, dirty balancing and application behaviour.
4843          */
4844         if (!writable)
4845                 flags |= TNF_NO_GROUP;
4846
4847         /*
4848          * Flag if the folio is shared between multiple address spaces. This
4849          * is later used when determining whether to group tasks together
4850          */
4851         if (folio_estimated_sharers(folio) > 1 && (vma->vm_flags & VM_SHARED))
4852                 flags |= TNF_SHARED;
4853
4854         nid = folio_nid(folio);
4855         /*
4856          * For memory tiering mode, cpupid of slow memory page is used
4857          * to record page access time.  So use default value.
4858          */
4859         if ((sysctl_numa_balancing_mode & NUMA_BALANCING_MEMORY_TIERING) &&
4860             !node_is_toptier(nid))
4861                 last_cpupid = (-1 & LAST_CPUPID_MASK);
4862         else
4863                 last_cpupid = folio_last_cpupid(folio);
4864         target_nid = numa_migrate_prep(folio, vma, vmf->address, nid, &flags);
4865         if (target_nid == NUMA_NO_NODE) {
4866                 folio_put(folio);
4867                 goto out_map;
4868         }
4869         pte_unmap_unlock(vmf->pte, vmf->ptl);
4870         writable = false;
4871
4872         /* Migrate to the requested node */
4873         if (migrate_misplaced_folio(folio, vma, target_nid)) {
4874                 nid = target_nid;
4875                 flags |= TNF_MIGRATED;
4876         } else {
4877                 flags |= TNF_MIGRATE_FAIL;
4878                 vmf->pte = pte_offset_map_lock(vma->vm_mm, vmf->pmd,
4879                                                vmf->address, &vmf->ptl);
4880                 if (unlikely(!vmf->pte))
4881                         goto out;
4882                 if (unlikely(!pte_same(ptep_get(vmf->pte), vmf->orig_pte))) {
4883                         pte_unmap_unlock(vmf->pte, vmf->ptl);
4884                         goto out;
4885                 }
4886                 goto out_map;
4887         }
4888
4889 out:
4890         if (nid != NUMA_NO_NODE)
4891                 task_numa_fault(last_cpupid, nid, 1, flags);
4892         return 0;
4893 out_map:
4894         /*
4895          * Make it present again, depending on how arch implements
4896          * non-accessible ptes, some can allow access by kernel mode.
4897          */
4898         old_pte = ptep_modify_prot_start(vma, vmf->address, vmf->pte);
4899         pte = pte_modify(old_pte, vma->vm_page_prot);
4900         pte = pte_mkyoung(pte);
4901         if (writable)
4902                 pte = pte_mkwrite(pte, vma);
4903         ptep_modify_prot_commit(vma, vmf->address, vmf->pte, old_pte, pte);
4904         update_mmu_cache_range(vmf, vma, vmf->address, vmf->pte, 1);
4905         pte_unmap_unlock(vmf->pte, vmf->ptl);
4906         goto out;
4907 }
4908
4909 static inline vm_fault_t create_huge_pmd(struct vm_fault *vmf)
4910 {
4911         struct vm_area_struct *vma = vmf->vma;
4912         if (vma_is_anonymous(vma))
4913                 return do_huge_pmd_anonymous_page(vmf);
4914         if (vma->vm_ops->huge_fault)
4915                 return vma->vm_ops->huge_fault(vmf, PMD_ORDER);
4916         return VM_FAULT_FALLBACK;
4917 }
4918
4919 /* `inline' is required to avoid gcc 4.1.2 build error */
4920 static inline vm_fault_t wp_huge_pmd(struct vm_fault *vmf)
4921 {
4922         struct vm_area_struct *vma = vmf->vma;
4923         const bool unshare = vmf->flags & FAULT_FLAG_UNSHARE;
4924         vm_fault_t ret;
4925
4926         if (vma_is_anonymous(vma)) {
4927                 if (likely(!unshare) &&
4928                     userfaultfd_huge_pmd_wp(vma, vmf->orig_pmd)) {
4929                         if (userfaultfd_wp_async(vmf->vma))
4930                                 goto split;
4931                         return handle_userfault(vmf, VM_UFFD_WP);
4932                 }
4933                 return do_huge_pmd_wp_page(vmf);
4934         }
4935
4936         if (vma->vm_flags & (VM_SHARED | VM_MAYSHARE)) {
4937                 if (vma->vm_ops->huge_fault) {
4938                         ret = vma->vm_ops->huge_fault(vmf, PMD_ORDER);
4939                         if (!(ret & VM_FAULT_FALLBACK))
4940                                 return ret;
4941                 }
4942         }
4943
4944 split:
4945         /* COW or write-notify handled on pte level: split pmd. */
4946         __split_huge_pmd(vma, vmf->pmd, vmf->address, false, NULL);
4947
4948         return VM_FAULT_FALLBACK;
4949 }
4950
4951 static vm_fault_t create_huge_pud(struct vm_fault *vmf)
4952 {
4953 #if defined(CONFIG_TRANSPARENT_HUGEPAGE) &&                     \
4954         defined(CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD)
4955         struct vm_area_struct *vma = vmf->vma;
4956         /* No support for anonymous transparent PUD pages yet */
4957         if (vma_is_anonymous(vma))
4958                 return VM_FAULT_FALLBACK;
4959         if (vma->vm_ops->huge_fault)
4960                 return vma->vm_ops->huge_fault(vmf, PUD_ORDER);
4961 #endif /* CONFIG_TRANSPARENT_HUGEPAGE */
4962         return VM_FAULT_FALLBACK;
4963 }
4964
4965 static vm_fault_t wp_huge_pud(struct vm_fault *vmf, pud_t orig_pud)
4966 {
4967 #if defined(CONFIG_TRANSPARENT_HUGEPAGE) &&                     \
4968         defined(CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD)
4969         struct vm_area_struct *vma = vmf->vma;
4970         vm_fault_t ret;
4971
4972         /* No support for anonymous transparent PUD pages yet */
4973         if (vma_is_anonymous(vma))
4974                 goto split;
4975         if (vma->vm_flags & (VM_SHARED | VM_MAYSHARE)) {
4976                 if (vma->vm_ops->huge_fault) {
4977                         ret = vma->vm_ops->huge_fault(vmf, PUD_ORDER);
4978                         if (!(ret & VM_FAULT_FALLBACK))
4979                                 return ret;
4980                 }
4981         }
4982 split:
4983         /* COW or write-notify not handled on PUD level: split pud.*/
4984         __split_huge_pud(vma, vmf->pud, vmf->address);
4985 #endif /* CONFIG_TRANSPARENT_HUGEPAGE && CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD */
4986         return VM_FAULT_FALLBACK;
4987 }
4988
4989 /*
4990  * These routines also need to handle stuff like marking pages dirty
4991  * and/or accessed for architectures that don't do it in hardware (most
4992  * RISC architectures).  The early dirtying is also good on the i386.
4993  *
4994  * There is also a hook called "update_mmu_cache()" that architectures
4995  * with external mmu caches can use to update those (ie the Sparc or
4996  * PowerPC hashed page tables that act as extended TLBs).
4997  *
4998  * We enter with non-exclusive mmap_lock (to exclude vma changes, but allow
4999  * concurrent faults).
5000  *
5001  * The mmap_lock may have been released depending on flags and our return value.
5002  * See filemap_fault() and __folio_lock_or_retry().
5003  */
5004 static vm_fault_t handle_pte_fault(struct vm_fault *vmf)
5005 {
5006         pte_t entry;
5007
5008         if (unlikely(pmd_none(*vmf->pmd))) {
5009                 /*
5010                  * Leave __pte_alloc() until later: because vm_ops->fault may
5011                  * want to allocate huge page, and if we expose page table
5012                  * for an instant, it will be difficult to retract from
5013                  * concurrent faults and from rmap lookups.
5014                  */
5015                 vmf->pte = NULL;
5016                 vmf->flags &= ~FAULT_FLAG_ORIG_PTE_VALID;
5017         } else {
5018                 /*
5019                  * A regular pmd is established and it can't morph into a huge
5020                  * pmd by anon khugepaged, since that takes mmap_lock in write
5021                  * mode; but shmem or file collapse to THP could still morph
5022                  * it into a huge pmd: just retry later if so.
5023                  */
5024                 vmf->pte = pte_offset_map_nolock(vmf->vma->vm_mm, vmf->pmd,
5025                                                  vmf->address, &vmf->ptl);
5026                 if (unlikely(!vmf->pte))
5027                         return 0;
5028                 vmf->orig_pte = ptep_get_lockless(vmf->pte);
5029                 vmf->flags |= FAULT_FLAG_ORIG_PTE_VALID;
5030
5031                 if (pte_none(vmf->orig_pte)) {
5032                         pte_unmap(vmf->pte);
5033                         vmf->pte = NULL;
5034                 }
5035         }
5036
5037         if (!vmf->pte)
5038                 return do_pte_missing(vmf);
5039
5040         if (!pte_present(vmf->orig_pte))
5041                 return do_swap_page(vmf);
5042
5043         if (pte_protnone(vmf->orig_pte) && vma_is_accessible(vmf->vma))
5044                 return do_numa_page(vmf);
5045
5046         spin_lock(vmf->ptl);
5047         entry = vmf->orig_pte;
5048         if (unlikely(!pte_same(ptep_get(vmf->pte), entry))) {
5049                 update_mmu_tlb(vmf->vma, vmf->address, vmf->pte);
5050                 goto unlock;
5051         }
5052         if (vmf->flags & (FAULT_FLAG_WRITE|FAULT_FLAG_UNSHARE)) {
5053                 if (!pte_write(entry))
5054                         return do_wp_page(vmf);
5055                 else if (likely(vmf->flags & FAULT_FLAG_WRITE))
5056                         entry = pte_mkdirty(entry);
5057         }
5058         entry = pte_mkyoung(entry);
5059         if (ptep_set_access_flags(vmf->vma, vmf->address, vmf->pte, entry,
5060                                 vmf->flags & FAULT_FLAG_WRITE)) {
5061                 update_mmu_cache_range(vmf, vmf->vma, vmf->address,
5062                                 vmf->pte, 1);
5063         } else {
5064                 /* Skip spurious TLB flush for retried page fault */
5065                 if (vmf->flags & FAULT_FLAG_TRIED)
5066                         goto unlock;
5067                 /*
5068                  * This is needed only for protection faults but the arch code
5069                  * is not yet telling us if this is a protection fault or not.
5070                  * This still avoids useless tlb flushes for .text page faults
5071                  * with threads.
5072                  */
5073                 if (vmf->flags & FAULT_FLAG_WRITE)
5074                         flush_tlb_fix_spurious_fault(vmf->vma, vmf->address,
5075                                                      vmf->pte);
5076         }
5077 unlock:
5078         pte_unmap_unlock(vmf->pte, vmf->ptl);
5079         return 0;
5080 }
5081
5082 /*
5083  * On entry, we hold either the VMA lock or the mmap_lock
5084  * (FAULT_FLAG_VMA_LOCK tells you which).  If VM_FAULT_RETRY is set in
5085  * the result, the mmap_lock is not held on exit.  See filemap_fault()
5086  * and __folio_lock_or_retry().
5087  */
5088 static vm_fault_t __handle_mm_fault(struct vm_area_struct *vma,
5089                 unsigned long address, unsigned int flags)
5090 {
5091         struct vm_fault vmf = {
5092                 .vma = vma,
5093                 .address = address & PAGE_MASK,
5094                 .real_address = address,
5095                 .flags = flags,
5096                 .pgoff = linear_page_index(vma, address),
5097                 .gfp_mask = __get_fault_gfp_mask(vma),
5098         };
5099         struct mm_struct *mm = vma->vm_mm;
5100         unsigned long vm_flags = vma->vm_flags;
5101         pgd_t *pgd;
5102         p4d_t *p4d;
5103         vm_fault_t ret;
5104
5105         pgd = pgd_offset(mm, address);
5106         p4d = p4d_alloc(mm, pgd, address);
5107         if (!p4d)
5108                 return VM_FAULT_OOM;
5109
5110         vmf.pud = pud_alloc(mm, p4d, address);
5111         if (!vmf.pud)
5112                 return VM_FAULT_OOM;
5113 retry_pud:
5114         if (pud_none(*vmf.pud) &&
5115             hugepage_vma_check(vma, vm_flags, false, true, true)) {
5116                 ret = create_huge_pud(&vmf);
5117                 if (!(ret & VM_FAULT_FALLBACK))
5118                         return ret;
5119         } else {
5120                 pud_t orig_pud = *vmf.pud;
5121
5122                 barrier();
5123                 if (pud_trans_huge(orig_pud) || pud_devmap(orig_pud)) {
5124
5125                         /*
5126                          * TODO once we support anonymous PUDs: NUMA case and
5127                          * FAULT_FLAG_UNSHARE handling.
5128                          */
5129                         if ((flags & FAULT_FLAG_WRITE) && !pud_write(orig_pud)) {
5130                                 ret = wp_huge_pud(&vmf, orig_pud);
5131                                 if (!(ret & VM_FAULT_FALLBACK))
5132                                         return ret;
5133                         } else {
5134                                 huge_pud_set_accessed(&vmf, orig_pud);
5135                                 return 0;
5136                         }
5137                 }
5138         }
5139
5140         vmf.pmd = pmd_alloc(mm, vmf.pud, address);
5141         if (!vmf.pmd)
5142                 return VM_FAULT_OOM;
5143
5144         /* Huge pud page fault raced with pmd_alloc? */
5145         if (pud_trans_unstable(vmf.pud))
5146                 goto retry_pud;
5147
5148         if (pmd_none(*vmf.pmd) &&
5149             hugepage_vma_check(vma, vm_flags, false, true, true)) {
5150                 ret = create_huge_pmd(&vmf);
5151                 if (!(ret & VM_FAULT_FALLBACK))
5152                         return ret;
5153         } else {
5154                 vmf.orig_pmd = pmdp_get_lockless(vmf.pmd);
5155
5156                 if (unlikely(is_swap_pmd(vmf.orig_pmd))) {
5157                         VM_BUG_ON(thp_migration_supported() &&
5158                                           !is_pmd_migration_entry(vmf.orig_pmd));
5159                         if (is_pmd_migration_entry(vmf.orig_pmd))
5160                                 pmd_migration_entry_wait(mm, vmf.pmd);
5161                         return 0;
5162                 }
5163                 if (pmd_trans_huge(vmf.orig_pmd) || pmd_devmap(vmf.orig_pmd)) {
5164                         if (pmd_protnone(vmf.orig_pmd) && vma_is_accessible(vma))
5165                                 return do_huge_pmd_numa_page(&vmf);
5166
5167                         if ((flags & (FAULT_FLAG_WRITE|FAULT_FLAG_UNSHARE)) &&
5168                             !pmd_write(vmf.orig_pmd)) {
5169                                 ret = wp_huge_pmd(&vmf);
5170                                 if (!(ret & VM_FAULT_FALLBACK))
5171                                         return ret;
5172                         } else {
5173                                 huge_pmd_set_accessed(&vmf);
5174                                 return 0;
5175                         }
5176                 }
5177         }
5178
5179         return handle_pte_fault(&vmf);
5180 }
5181
5182 /**
5183  * mm_account_fault - Do page fault accounting
5184  * @mm: mm from which memcg should be extracted. It can be NULL.
5185  * @regs: the pt_regs struct pointer.  When set to NULL, will skip accounting
5186  *        of perf event counters, but we'll still do the per-task accounting to
5187  *        the task who triggered this page fault.
5188  * @address: the faulted address.
5189  * @flags: the fault flags.
5190  * @ret: the fault retcode.
5191  *
5192  * This will take care of most of the page fault accounting.  Meanwhile, it
5193  * will also include the PERF_COUNT_SW_PAGE_FAULTS_[MAJ|MIN] perf counter
5194  * updates.  However, note that the handling of PERF_COUNT_SW_PAGE_FAULTS should
5195  * still be in per-arch page fault handlers at the entry of page fault.
5196  */
5197 static inline void mm_account_fault(struct mm_struct *mm, struct pt_regs *regs,
5198                                     unsigned long address, unsigned int flags,
5199                                     vm_fault_t ret)
5200 {
5201         bool major;
5202
5203         /* Incomplete faults will be accounted upon completion. */
5204         if (ret & VM_FAULT_RETRY)
5205                 return;
5206
5207         /*
5208          * To preserve the behavior of older kernels, PGFAULT counters record
5209          * both successful and failed faults, as opposed to perf counters,
5210          * which ignore failed cases.
5211          */
5212         count_vm_event(PGFAULT);
5213         count_memcg_event_mm(mm, PGFAULT);
5214
5215         /*
5216          * Do not account for unsuccessful faults (e.g. when the address wasn't
5217          * valid).  That includes arch_vma_access_permitted() failing before
5218          * reaching here. So this is not a "this many hardware page faults"
5219          * counter.  We should use the hw profiling for that.
5220          */
5221         if (ret & VM_FAULT_ERROR)
5222                 return;
5223
5224         /*
5225          * We define the fault as a major fault when the final successful fault
5226          * is VM_FAULT_MAJOR, or if it retried (which implies that we couldn't
5227          * handle it immediately previously).
5228          */
5229         major = (ret & VM_FAULT_MAJOR) || (flags & FAULT_FLAG_TRIED);
5230
5231         if (major)
5232                 current->maj_flt++;
5233         else
5234                 current->min_flt++;
5235
5236         /*
5237          * If the fault is done for GUP, regs will be NULL.  We only do the
5238          * accounting for the per thread fault counters who triggered the
5239          * fault, and we skip the perf event updates.
5240          */
5241         if (!regs)
5242                 return;
5243
5244         if (major)
5245                 perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MAJ, 1, regs, address);
5246         else
5247                 perf_sw_event(PERF_COUNT_SW_PAGE_FAULTS_MIN, 1, regs, address);
5248 }
5249
5250 #ifdef CONFIG_LRU_GEN
5251 static void lru_gen_enter_fault(struct vm_area_struct *vma)
5252 {
5253         /* the LRU algorithm only applies to accesses with recency */
5254         current->in_lru_fault = vma_has_recency(vma);
5255 }
5256
5257 static void lru_gen_exit_fault(void)
5258 {
5259         current->in_lru_fault = false;
5260 }
5261 #else
5262 static void lru_gen_enter_fault(struct vm_area_struct *vma)
5263 {
5264 }
5265
5266 static void lru_gen_exit_fault(void)
5267 {
5268 }
5269 #endif /* CONFIG_LRU_GEN */
5270
5271 static vm_fault_t sanitize_fault_flags(struct vm_area_struct *vma,
5272                                        unsigned int *flags)
5273 {
5274         if (unlikely(*flags & FAULT_FLAG_UNSHARE)) {
5275                 if (WARN_ON_ONCE(*flags & FAULT_FLAG_WRITE))
5276                         return VM_FAULT_SIGSEGV;
5277                 /*
5278                  * FAULT_FLAG_UNSHARE only applies to COW mappings. Let's
5279                  * just treat it like an ordinary read-fault otherwise.
5280                  */
5281                 if (!is_cow_mapping(vma->vm_flags))
5282                         *flags &= ~FAULT_FLAG_UNSHARE;
5283         } else if (*flags & FAULT_FLAG_WRITE) {
5284                 /* Write faults on read-only mappings are impossible ... */
5285                 if (WARN_ON_ONCE(!(vma->vm_flags & VM_MAYWRITE)))
5286                         return VM_FAULT_SIGSEGV;
5287                 /* ... and FOLL_FORCE only applies to COW mappings. */
5288                 if (WARN_ON_ONCE(!(vma->vm_flags & VM_WRITE) &&
5289                                  !is_cow_mapping(vma->vm_flags)))
5290                         return VM_FAULT_SIGSEGV;
5291         }
5292 #ifdef CONFIG_PER_VMA_LOCK
5293         /*
5294          * Per-VMA locks can't be used with FAULT_FLAG_RETRY_NOWAIT because of
5295          * the assumption that lock is dropped on VM_FAULT_RETRY.
5296          */
5297         if (WARN_ON_ONCE((*flags &
5298                         (FAULT_FLAG_VMA_LOCK | FAULT_FLAG_RETRY_NOWAIT)) ==
5299                         (FAULT_FLAG_VMA_LOCK | FAULT_FLAG_RETRY_NOWAIT)))
5300                 return VM_FAULT_SIGSEGV;
5301 #endif
5302
5303         return 0;
5304 }
5305
5306 /*
5307  * By the time we get here, we already hold the mm semaphore
5308  *
5309  * The mmap_lock may have been released depending on flags and our
5310  * return value.  See filemap_fault() and __folio_lock_or_retry().
5311  */
5312 vm_fault_t handle_mm_fault(struct vm_area_struct *vma, unsigned long address,
5313                            unsigned int flags, struct pt_regs *regs)
5314 {
5315         /* If the fault handler drops the mmap_lock, vma may be freed */
5316         struct mm_struct *mm = vma->vm_mm;
5317         vm_fault_t ret;
5318
5319         __set_current_state(TASK_RUNNING);
5320
5321         ret = sanitize_fault_flags(vma, &flags);
5322         if (ret)
5323                 goto out;
5324
5325         if (!arch_vma_access_permitted(vma, flags & FAULT_FLAG_WRITE,
5326                                             flags & FAULT_FLAG_INSTRUCTION,
5327                                             flags & FAULT_FLAG_REMOTE)) {
5328                 ret = VM_FAULT_SIGSEGV;
5329                 goto out;
5330         }
5331
5332         /*
5333          * Enable the memcg OOM handling for faults triggered in user
5334          * space.  Kernel faults are handled more gracefully.
5335          */
5336         if (flags & FAULT_FLAG_USER)
5337                 mem_cgroup_enter_user_fault();
5338
5339         lru_gen_enter_fault(vma);
5340
5341         if (unlikely(is_vm_hugetlb_page(vma)))
5342                 ret = hugetlb_fault(vma->vm_mm, vma, address, flags);
5343         else
5344                 ret = __handle_mm_fault(vma, address, flags);
5345
5346         lru_gen_exit_fault();
5347
5348         if (flags & FAULT_FLAG_USER) {
5349                 mem_cgroup_exit_user_fault();
5350                 /*
5351                  * The task may have entered a memcg OOM situation but
5352                  * if the allocation error was handled gracefully (no
5353                  * VM_FAULT_OOM), there is no need to kill anything.
5354                  * Just clean up the OOM state peacefully.
5355                  */
5356                 if (task_in_memcg_oom(current) && !(ret & VM_FAULT_OOM))
5357                         mem_cgroup_oom_synchronize(false);
5358         }
5359 out:
5360         mm_account_fault(mm, regs, address, flags, ret);
5361
5362         return ret;
5363 }
5364 EXPORT_SYMBOL_GPL(handle_mm_fault);
5365
5366 #ifdef CONFIG_LOCK_MM_AND_FIND_VMA
5367 #include <linux/extable.h>
5368
5369 static inline bool get_mmap_lock_carefully(struct mm_struct *mm, struct pt_regs *regs)
5370 {
5371         if (likely(mmap_read_trylock(mm)))
5372                 return true;
5373
5374         if (regs && !user_mode(regs)) {
5375                 unsigned long ip = instruction_pointer(regs);
5376                 if (!search_exception_tables(ip))
5377                         return false;
5378         }
5379
5380         return !mmap_read_lock_killable(mm);
5381 }
5382
5383 static inline bool mmap_upgrade_trylock(struct mm_struct *mm)
5384 {
5385         /*
5386          * We don't have this operation yet.
5387          *
5388          * It should be easy enough to do: it's basically a
5389          *    atomic_long_try_cmpxchg_acquire()
5390          * from RWSEM_READER_BIAS -> RWSEM_WRITER_LOCKED, but
5391          * it also needs the proper lockdep magic etc.
5392          */
5393         return false;
5394 }
5395
5396 static inline bool upgrade_mmap_lock_carefully(struct mm_struct *mm, struct pt_regs *regs)
5397 {
5398         mmap_read_unlock(mm);
5399         if (regs && !user_mode(regs)) {
5400                 unsigned long ip = instruction_pointer(regs);
5401                 if (!search_exception_tables(ip))
5402                         return false;
5403         }
5404         return !mmap_write_lock_killable(mm);
5405 }
5406
5407 /*
5408  * Helper for page fault handling.
5409  *
5410  * This is kind of equivalend to "mmap_read_lock()" followed
5411  * by "find_extend_vma()", except it's a lot more careful about
5412  * the locking (and will drop the lock on failure).
5413  *
5414  * For example, if we have a kernel bug that causes a page
5415  * fault, we don't want to just use mmap_read_lock() to get
5416  * the mm lock, because that would deadlock if the bug were
5417  * to happen while we're holding the mm lock for writing.
5418  *
5419  * So this checks the exception tables on kernel faults in
5420  * order to only do this all for instructions that are actually
5421  * expected to fault.
5422  *
5423  * We can also actually take the mm lock for writing if we
5424  * need to extend the vma, which helps the VM layer a lot.
5425  */
5426 struct vm_area_struct *lock_mm_and_find_vma(struct mm_struct *mm,
5427                         unsigned long addr, struct pt_regs *regs)
5428 {
5429         struct vm_area_struct *vma;
5430
5431         if (!get_mmap_lock_carefully(mm, regs))
5432                 return NULL;
5433
5434         vma = find_vma(mm, addr);
5435         if (likely(vma && (vma->vm_start <= addr)))
5436                 return vma;
5437
5438         /*
5439          * Well, dang. We might still be successful, but only
5440          * if we can extend a vma to do so.
5441          */
5442         if (!vma || !(vma->vm_flags & VM_GROWSDOWN)) {
5443                 mmap_read_unlock(mm);
5444                 return NULL;
5445         }
5446
5447         /*
5448          * We can try to upgrade the mmap lock atomically,
5449          * in which case we can continue to use the vma
5450          * we already looked up.
5451          *
5452          * Otherwise we'll have to drop the mmap lock and
5453          * re-take it, and also look up the vma again,
5454          * re-checking it.
5455          */
5456         if (!mmap_upgrade_trylock(mm)) {
5457                 if (!upgrade_mmap_lock_carefully(mm, regs))
5458                         return NULL;
5459
5460                 vma = find_vma(mm, addr);
5461                 if (!vma)
5462                         goto fail;
5463                 if (vma->vm_start <= addr)
5464                         goto success;
5465                 if (!(vma->vm_flags & VM_GROWSDOWN))
5466                         goto fail;
5467         }
5468
5469         if (expand_stack_locked(vma, addr))
5470                 goto fail;
5471
5472 success:
5473         mmap_write_downgrade(mm);
5474         return vma;
5475
5476 fail:
5477         mmap_write_unlock(mm);
5478         return NULL;
5479 }
5480 #endif
5481
5482 #ifdef CONFIG_PER_VMA_LOCK
5483 /*
5484  * Lookup and lock a VMA under RCU protection. Returned VMA is guaranteed to be
5485  * stable and not isolated. If the VMA is not found or is being modified the
5486  * function returns NULL.
5487  */
5488 struct vm_area_struct *lock_vma_under_rcu(struct mm_struct *mm,
5489                                           unsigned long address)
5490 {
5491         MA_STATE(mas, &mm->mm_mt, address, address);
5492         struct vm_area_struct *vma;
5493
5494         rcu_read_lock();
5495 retry:
5496         vma = mas_walk(&mas);
5497         if (!vma)
5498                 goto inval;
5499
5500         if (!vma_start_read(vma))
5501                 goto inval;
5502
5503         /*
5504          * find_mergeable_anon_vma uses adjacent vmas which are not locked.
5505          * This check must happen after vma_start_read(); otherwise, a
5506          * concurrent mremap() with MREMAP_DONTUNMAP could dissociate the VMA
5507          * from its anon_vma.
5508          */
5509         if (unlikely(vma_is_anonymous(vma) && !vma->anon_vma))
5510                 goto inval_end_read;
5511
5512         /* Check since vm_start/vm_end might change before we lock the VMA */
5513         if (unlikely(address < vma->vm_start || address >= vma->vm_end))
5514                 goto inval_end_read;
5515
5516         /* Check if the VMA got isolated after we found it */
5517         if (vma->detached) {
5518                 vma_end_read(vma);
5519                 count_vm_vma_lock_event(VMA_LOCK_MISS);
5520                 /* The area was replaced with another one */
5521                 goto retry;
5522         }
5523
5524         rcu_read_unlock();
5525         return vma;
5526
5527 inval_end_read:
5528         vma_end_read(vma);
5529 inval:
5530         rcu_read_unlock();
5531         count_vm_vma_lock_event(VMA_LOCK_ABORT);
5532         return NULL;
5533 }
5534 #endif /* CONFIG_PER_VMA_LOCK */
5535
5536 #ifndef __PAGETABLE_P4D_FOLDED
5537 /*
5538  * Allocate p4d page table.
5539  * We've already handled the fast-path in-line.
5540  */
5541 int __p4d_alloc(struct mm_struct *mm, pgd_t *pgd, unsigned long address)
5542 {
5543         p4d_t *new = p4d_alloc_one(mm, address);
5544         if (!new)
5545                 return -ENOMEM;
5546
5547         spin_lock(&mm->page_table_lock);
5548         if (pgd_present(*pgd)) {        /* Another has populated it */
5549                 p4d_free(mm, new);
5550         } else {
5551                 smp_wmb(); /* See comment in pmd_install() */
5552                 pgd_populate(mm, pgd, new);
5553         }
5554         spin_unlock(&mm->page_table_lock);
5555         return 0;
5556 }
5557 #endif /* __PAGETABLE_P4D_FOLDED */
5558
5559 #ifndef __PAGETABLE_PUD_FOLDED
5560 /*
5561  * Allocate page upper directory.
5562  * We've already handled the fast-path in-line.
5563  */
5564 int __pud_alloc(struct mm_struct *mm, p4d_t *p4d, unsigned long address)
5565 {
5566         pud_t *new = pud_alloc_one(mm, address);
5567         if (!new)
5568                 return -ENOMEM;
5569
5570         spin_lock(&mm->page_table_lock);
5571         if (!p4d_present(*p4d)) {
5572                 mm_inc_nr_puds(mm);
5573                 smp_wmb(); /* See comment in pmd_install() */
5574                 p4d_populate(mm, p4d, new);
5575         } else  /* Another has populated it */
5576                 pud_free(mm, new);
5577         spin_unlock(&mm->page_table_lock);
5578         return 0;
5579 }
5580 #endif /* __PAGETABLE_PUD_FOLDED */
5581
5582 #ifndef __PAGETABLE_PMD_FOLDED
5583 /*
5584  * Allocate page middle directory.
5585  * We've already handled the fast-path in-line.
5586  */
5587 int __pmd_alloc(struct mm_struct *mm, pud_t *pud, unsigned long address)
5588 {
5589         spinlock_t *ptl;
5590         pmd_t *new = pmd_alloc_one(mm, address);
5591         if (!new)
5592                 return -ENOMEM;
5593
5594         ptl = pud_lock(mm, pud);
5595         if (!pud_present(*pud)) {
5596                 mm_inc_nr_pmds(mm);
5597                 smp_wmb(); /* See comment in pmd_install() */
5598                 pud_populate(mm, pud, new);
5599         } else {        /* Another has populated it */
5600                 pmd_free(mm, new);
5601         }
5602         spin_unlock(ptl);
5603         return 0;
5604 }
5605 #endif /* __PAGETABLE_PMD_FOLDED */
5606
5607 /**
5608  * follow_pte - look up PTE at a user virtual address
5609  * @mm: the mm_struct of the target address space
5610  * @address: user virtual address
5611  * @ptepp: location to store found PTE
5612  * @ptlp: location to store the lock for the PTE
5613  *
5614  * On a successful return, the pointer to the PTE is stored in @ptepp;
5615  * the corresponding lock is taken and its location is stored in @ptlp.
5616  * The contents of the PTE are only stable until @ptlp is released;
5617  * any further use, if any, must be protected against invalidation
5618  * with MMU notifiers.
5619  *
5620  * Only IO mappings and raw PFN mappings are allowed.  The mmap semaphore
5621  * should be taken for read.
5622  *
5623  * KVM uses this function.  While it is arguably less bad than ``follow_pfn``,
5624  * it is not a good general-purpose API.
5625  *
5626  * Return: zero on success, -ve otherwise.
5627  */
5628 int follow_pte(struct mm_struct *mm, unsigned long address,
5629                pte_t **ptepp, spinlock_t **ptlp)
5630 {
5631         pgd_t *pgd;
5632         p4d_t *p4d;
5633         pud_t *pud;
5634         pmd_t *pmd;
5635         pte_t *ptep;
5636
5637         pgd = pgd_offset(mm, address);
5638         if (pgd_none(*pgd) || unlikely(pgd_bad(*pgd)))
5639                 goto out;
5640
5641         p4d = p4d_offset(pgd, address);
5642         if (p4d_none(*p4d) || unlikely(p4d_bad(*p4d)))
5643                 goto out;
5644
5645         pud = pud_offset(p4d, address);
5646         if (pud_none(*pud) || unlikely(pud_bad(*pud)))
5647                 goto out;
5648
5649         pmd = pmd_offset(pud, address);
5650         VM_BUG_ON(pmd_trans_huge(*pmd));
5651
5652         ptep = pte_offset_map_lock(mm, pmd, address, ptlp);
5653         if (!ptep)
5654                 goto out;
5655         if (!pte_present(ptep_get(ptep)))
5656                 goto unlock;
5657         *ptepp = ptep;
5658         return 0;
5659 unlock:
5660         pte_unmap_unlock(ptep, *ptlp);
5661 out:
5662         return -EINVAL;
5663 }
5664 EXPORT_SYMBOL_GPL(follow_pte);
5665
5666 /**
5667  * follow_pfn - look up PFN at a user virtual address
5668  * @vma: memory mapping
5669  * @address: user virtual address
5670  * @pfn: location to store found PFN
5671  *
5672  * Only IO mappings and raw PFN mappings are allowed.
5673  *
5674  * This function does not allow the caller to read the permissions
5675  * of the PTE.  Do not use it.
5676  *
5677  * Return: zero and the pfn at @pfn on success, -ve otherwise.
5678  */
5679 int follow_pfn(struct vm_area_struct *vma, unsigned long address,
5680         unsigned long *pfn)
5681 {
5682         int ret = -EINVAL;
5683         spinlock_t *ptl;
5684         pte_t *ptep;
5685
5686         if (!(vma->vm_flags & (VM_IO | VM_PFNMAP)))
5687                 return ret;
5688
5689         ret = follow_pte(vma->vm_mm, address, &ptep, &ptl);
5690         if (ret)
5691                 return ret;
5692         *pfn = pte_pfn(ptep_get(ptep));
5693         pte_unmap_unlock(ptep, ptl);
5694         return 0;
5695 }
5696 EXPORT_SYMBOL(follow_pfn);
5697
5698 #ifdef CONFIG_HAVE_IOREMAP_PROT
5699 int follow_phys(struct vm_area_struct *vma,
5700                 unsigned long address, unsigned int flags,
5701                 unsigned long *prot, resource_size_t *phys)
5702 {
5703         int ret = -EINVAL;
5704         pte_t *ptep, pte;
5705         spinlock_t *ptl;
5706
5707         if (!(vma->vm_flags & (VM_IO | VM_PFNMAP)))
5708                 goto out;
5709
5710         if (follow_pte(vma->vm_mm, address, &ptep, &ptl))
5711                 goto out;
5712         pte = ptep_get(ptep);
5713
5714         if ((flags & FOLL_WRITE) && !pte_write(pte))
5715                 goto unlock;
5716
5717         *prot = pgprot_val(pte_pgprot(pte));
5718         *phys = (resource_size_t)pte_pfn(pte) << PAGE_SHIFT;
5719
5720         ret = 0;
5721 unlock:
5722         pte_unmap_unlock(ptep, ptl);
5723 out:
5724         return ret;
5725 }
5726
5727 /**
5728  * generic_access_phys - generic implementation for iomem mmap access
5729  * @vma: the vma to access
5730  * @addr: userspace address, not relative offset within @vma
5731  * @buf: buffer to read/write
5732  * @len: length of transfer
5733  * @write: set to FOLL_WRITE when writing, otherwise reading
5734  *
5735  * This is a generic implementation for &vm_operations_struct.access for an
5736  * iomem mapping. This callback is used by access_process_vm() when the @vma is
5737  * not page based.
5738  */
5739 int generic_access_phys(struct vm_area_struct *vma, unsigned long addr,
5740                         void *buf, int len, int write)
5741 {
5742         resource_size_t phys_addr;
5743         unsigned long prot = 0;
5744         void __iomem *maddr;
5745         pte_t *ptep, pte;
5746         spinlock_t *ptl;
5747         int offset = offset_in_page(addr);
5748         int ret = -EINVAL;
5749
5750         if (!(vma->vm_flags & (VM_IO | VM_PFNMAP)))
5751                 return -EINVAL;
5752
5753 retry:
5754         if (follow_pte(vma->vm_mm, addr, &ptep, &ptl))
5755                 return -EINVAL;
5756         pte = ptep_get(ptep);
5757         pte_unmap_unlock(ptep, ptl);
5758
5759         prot = pgprot_val(pte_pgprot(pte));
5760         phys_addr = (resource_size_t)pte_pfn(pte) << PAGE_SHIFT;
5761
5762         if ((write & FOLL_WRITE) && !pte_write(pte))
5763                 return -EINVAL;
5764
5765         maddr = ioremap_prot(phys_addr, PAGE_ALIGN(len + offset), prot);
5766         if (!maddr)
5767                 return -ENOMEM;
5768
5769         if (follow_pte(vma->vm_mm, addr, &ptep, &ptl))
5770                 goto out_unmap;
5771
5772         if (!pte_same(pte, ptep_get(ptep))) {
5773                 pte_unmap_unlock(ptep, ptl);
5774                 iounmap(maddr);
5775
5776                 goto retry;
5777         }
5778
5779         if (write)
5780                 memcpy_toio(maddr + offset, buf, len);
5781         else
5782                 memcpy_fromio(buf, maddr + offset, len);
5783         ret = len;
5784         pte_unmap_unlock(ptep, ptl);
5785 out_unmap:
5786         iounmap(maddr);
5787
5788         return ret;
5789 }
5790 EXPORT_SYMBOL_GPL(generic_access_phys);
5791 #endif
5792
5793 /*
5794  * Access another process' address space as given in mm.
5795  */
5796 static int __access_remote_vm(struct mm_struct *mm, unsigned long addr,
5797                               void *buf, int len, unsigned int gup_flags)
5798 {
5799         void *old_buf = buf;
5800         int write = gup_flags & FOLL_WRITE;
5801
5802         if (mmap_read_lock_killable(mm))
5803                 return 0;
5804
5805         /* Untag the address before looking up the VMA */
5806         addr = untagged_addr_remote(mm, addr);
5807
5808         /* Avoid triggering the temporary warning in __get_user_pages */
5809         if (!vma_lookup(mm, addr) && !expand_stack(mm, addr))
5810                 return 0;
5811
5812         /* ignore errors, just check how much was successfully transferred */
5813         while (len) {
5814                 int bytes, offset;
5815                 void *maddr;
5816                 struct vm_area_struct *vma = NULL;
5817                 struct page *page = get_user_page_vma_remote(mm, addr,
5818                                                              gup_flags, &vma);
5819
5820                 if (IS_ERR(page)) {
5821                         /* We might need to expand the stack to access it */
5822                         vma = vma_lookup(mm, addr);
5823                         if (!vma) {
5824                                 vma = expand_stack(mm, addr);
5825
5826                                 /* mmap_lock was dropped on failure */
5827                                 if (!vma)
5828                                         return buf - old_buf;
5829
5830                                 /* Try again if stack expansion worked */
5831                                 continue;
5832                         }
5833
5834                         /*
5835                          * Check if this is a VM_IO | VM_PFNMAP VMA, which
5836                          * we can access using slightly different code.
5837                          */
5838                         bytes = 0;
5839 #ifdef CONFIG_HAVE_IOREMAP_PROT
5840                         if (vma->vm_ops && vma->vm_ops->access)
5841                                 bytes = vma->vm_ops->access(vma, addr, buf,
5842                                                             len, write);
5843 #endif
5844                         if (bytes <= 0)
5845                                 break;
5846                 } else {
5847                         bytes = len;
5848                         offset = addr & (PAGE_SIZE-1);
5849                         if (bytes > PAGE_SIZE-offset)
5850                                 bytes = PAGE_SIZE-offset;
5851
5852                         maddr = kmap(page);
5853                         if (write) {
5854                                 copy_to_user_page(vma, page, addr,
5855                                                   maddr + offset, buf, bytes);
5856                                 set_page_dirty_lock(page);
5857                         } else {
5858                                 copy_from_user_page(vma, page, addr,
5859                                                     buf, maddr + offset, bytes);
5860                         }
5861                         kunmap(page);
5862                         put_page(page);
5863                 }
5864                 len -= bytes;
5865                 buf += bytes;
5866                 addr += bytes;
5867         }
5868         mmap_read_unlock(mm);
5869
5870         return buf - old_buf;
5871 }
5872
5873 /**
5874  * access_remote_vm - access another process' address space
5875  * @mm:         the mm_struct of the target address space
5876  * @addr:       start address to access
5877  * @buf:        source or destination buffer
5878  * @len:        number of bytes to transfer
5879  * @gup_flags:  flags modifying lookup behaviour
5880  *
5881  * The caller must hold a reference on @mm.
5882  *
5883  * Return: number of bytes copied from source to destination.
5884  */
5885 int access_remote_vm(struct mm_struct *mm, unsigned long addr,
5886                 void *buf, int len, unsigned int gup_flags)
5887 {
5888         return __access_remote_vm(mm, addr, buf, len, gup_flags);
5889 }
5890
5891 /*
5892  * Access another process' address space.
5893  * Source/target buffer must be kernel space,
5894  * Do not walk the page table directly, use get_user_pages
5895  */
5896 int access_process_vm(struct task_struct *tsk, unsigned long addr,
5897                 void *buf, int len, unsigned int gup_flags)
5898 {
5899         struct mm_struct *mm;
5900         int ret;
5901
5902         mm = get_task_mm(tsk);
5903         if (!mm)
5904                 return 0;
5905
5906         ret = __access_remote_vm(mm, addr, buf, len, gup_flags);
5907
5908         mmput(mm);
5909
5910         return ret;
5911 }
5912 EXPORT_SYMBOL_GPL(access_process_vm);
5913
5914 /*
5915  * Print the name of a VMA.
5916  */
5917 void print_vma_addr(char *prefix, unsigned long ip)
5918 {
5919         struct mm_struct *mm = current->mm;
5920         struct vm_area_struct *vma;
5921
5922         /*
5923          * we might be running from an atomic context so we cannot sleep
5924          */
5925         if (!mmap_read_trylock(mm))
5926                 return;
5927
5928         vma = find_vma(mm, ip);
5929         if (vma && vma->vm_file) {
5930                 struct file *f = vma->vm_file;
5931                 char *buf = (char *)__get_free_page(GFP_NOWAIT);
5932                 if (buf) {
5933                         char *p;
5934
5935                         p = file_path(f, buf, PAGE_SIZE);
5936                         if (IS_ERR(p))
5937                                 p = "?";
5938                         printk("%s%s[%lx+%lx]", prefix, kbasename(p),
5939                                         vma->vm_start,
5940                                         vma->vm_end - vma->vm_start);
5941                         free_page((unsigned long)buf);
5942                 }
5943         }
5944         mmap_read_unlock(mm);
5945 }
5946
5947 #if defined(CONFIG_PROVE_LOCKING) || defined(CONFIG_DEBUG_ATOMIC_SLEEP)
5948 void __might_fault(const char *file, int line)
5949 {
5950         if (pagefault_disabled())
5951                 return;
5952         __might_sleep(file, line);
5953 #if defined(CONFIG_DEBUG_ATOMIC_SLEEP)
5954         if (current->mm)
5955                 might_lock_read(&current->mm->mmap_lock);
5956 #endif
5957 }
5958 EXPORT_SYMBOL(__might_fault);
5959 #endif
5960
5961 #if defined(CONFIG_TRANSPARENT_HUGEPAGE) || defined(CONFIG_HUGETLBFS)
5962 /*
5963  * Process all subpages of the specified huge page with the specified
5964  * operation.  The target subpage will be processed last to keep its
5965  * cache lines hot.
5966  */
5967 static inline int process_huge_page(
5968         unsigned long addr_hint, unsigned int pages_per_huge_page,
5969         int (*process_subpage)(unsigned long addr, int idx, void *arg),
5970         void *arg)
5971 {
5972         int i, n, base, l, ret;
5973         unsigned long addr = addr_hint &
5974                 ~(((unsigned long)pages_per_huge_page << PAGE_SHIFT) - 1);
5975
5976         /* Process target subpage last to keep its cache lines hot */
5977         might_sleep();
5978         n = (addr_hint - addr) / PAGE_SIZE;
5979         if (2 * n <= pages_per_huge_page) {
5980                 /* If target subpage in first half of huge page */
5981                 base = 0;
5982                 l = n;
5983                 /* Process subpages at the end of huge page */
5984                 for (i = pages_per_huge_page - 1; i >= 2 * n; i--) {
5985                         cond_resched();
5986                         ret = process_subpage(addr + i * PAGE_SIZE, i, arg);
5987                         if (ret)
5988                                 return ret;
5989                 }
5990         } else {
5991                 /* If target subpage in second half of huge page */
5992                 base = pages_per_huge_page - 2 * (pages_per_huge_page - n);
5993                 l = pages_per_huge_page - n;
5994                 /* Process subpages at the begin of huge page */
5995                 for (i = 0; i < base; i++) {
5996                         cond_resched();
5997                         ret = process_subpage(addr + i * PAGE_SIZE, i, arg);
5998                         if (ret)
5999                                 return ret;
6000                 }
6001         }
6002         /*
6003          * Process remaining subpages in left-right-left-right pattern
6004          * towards the target subpage
6005          */
6006         for (i = 0; i < l; i++) {
6007                 int left_idx = base + i;
6008                 int right_idx = base + 2 * l - 1 - i;
6009
6010                 cond_resched();
6011                 ret = process_subpage(addr + left_idx * PAGE_SIZE, left_idx, arg);
6012                 if (ret)
6013                         return ret;
6014                 cond_resched();
6015                 ret = process_subpage(addr + right_idx * PAGE_SIZE, right_idx, arg);
6016                 if (ret)
6017                         return ret;
6018         }
6019         return 0;
6020 }
6021
6022 static void clear_gigantic_page(struct page *page,
6023                                 unsigned long addr,
6024                                 unsigned int pages_per_huge_page)
6025 {
6026         int i;
6027         struct page *p;
6028
6029         might_sleep();
6030         for (i = 0; i < pages_per_huge_page; i++) {
6031                 p = nth_page(page, i);
6032                 cond_resched();
6033                 clear_user_highpage(p, addr + i * PAGE_SIZE);
6034         }
6035 }
6036
6037 static int clear_subpage(unsigned long addr, int idx, void *arg)
6038 {
6039         struct page *page = arg;
6040
6041         clear_user_highpage(page + idx, addr);
6042         return 0;
6043 }
6044
6045 void clear_huge_page(struct page *page,
6046                      unsigned long addr_hint, unsigned int pages_per_huge_page)
6047 {
6048         unsigned long addr = addr_hint &
6049                 ~(((unsigned long)pages_per_huge_page << PAGE_SHIFT) - 1);
6050
6051         if (unlikely(pages_per_huge_page > MAX_ORDER_NR_PAGES)) {
6052                 clear_gigantic_page(page, addr, pages_per_huge_page);
6053                 return;
6054         }
6055
6056         process_huge_page(addr_hint, pages_per_huge_page, clear_subpage, page);
6057 }
6058
6059 static int copy_user_gigantic_page(struct folio *dst, struct folio *src,
6060                                      unsigned long addr,
6061                                      struct vm_area_struct *vma,
6062                                      unsigned int pages_per_huge_page)
6063 {
6064         int i;
6065         struct page *dst_page;
6066         struct page *src_page;
6067
6068         for (i = 0; i < pages_per_huge_page; i++) {
6069                 dst_page = folio_page(dst, i);
6070                 src_page = folio_page(src, i);
6071
6072                 cond_resched();
6073                 if (copy_mc_user_highpage(dst_page, src_page,
6074                                           addr + i*PAGE_SIZE, vma)) {
6075                         memory_failure_queue(page_to_pfn(src_page), 0);
6076                         return -EHWPOISON;
6077                 }
6078         }
6079         return 0;
6080 }
6081
6082 struct copy_subpage_arg {
6083         struct page *dst;
6084         struct page *src;
6085         struct vm_area_struct *vma;
6086 };
6087
6088 static int copy_subpage(unsigned long addr, int idx, void *arg)
6089 {
6090         struct copy_subpage_arg *copy_arg = arg;
6091
6092         if (copy_mc_user_highpage(copy_arg->dst + idx, copy_arg->src + idx,
6093                                   addr, copy_arg->vma)) {
6094                 memory_failure_queue(page_to_pfn(copy_arg->src + idx), 0);
6095                 return -EHWPOISON;
6096         }
6097         return 0;
6098 }
6099
6100 int copy_user_large_folio(struct folio *dst, struct folio *src,
6101                           unsigned long addr_hint, struct vm_area_struct *vma)
6102 {
6103         unsigned int pages_per_huge_page = folio_nr_pages(dst);
6104         unsigned long addr = addr_hint &
6105                 ~(((unsigned long)pages_per_huge_page << PAGE_SHIFT) - 1);
6106         struct copy_subpage_arg arg = {
6107                 .dst = &dst->page,
6108                 .src = &src->page,
6109                 .vma = vma,
6110         };
6111
6112         if (unlikely(pages_per_huge_page > MAX_ORDER_NR_PAGES))
6113                 return copy_user_gigantic_page(dst, src, addr, vma,
6114                                                pages_per_huge_page);
6115
6116         return process_huge_page(addr_hint, pages_per_huge_page, copy_subpage, &arg);
6117 }
6118
6119 long copy_folio_from_user(struct folio *dst_folio,
6120                            const void __user *usr_src,
6121                            bool allow_pagefault)
6122 {
6123         void *kaddr;
6124         unsigned long i, rc = 0;
6125         unsigned int nr_pages = folio_nr_pages(dst_folio);
6126         unsigned long ret_val = nr_pages * PAGE_SIZE;
6127         struct page *subpage;
6128
6129         for (i = 0; i < nr_pages; i++) {
6130                 subpage = folio_page(dst_folio, i);
6131                 kaddr = kmap_local_page(subpage);
6132                 if (!allow_pagefault)
6133                         pagefault_disable();
6134                 rc = copy_from_user(kaddr, usr_src + i * PAGE_SIZE, PAGE_SIZE);
6135                 if (!allow_pagefault)
6136                         pagefault_enable();
6137                 kunmap_local(kaddr);
6138
6139                 ret_val -= (PAGE_SIZE - rc);
6140                 if (rc)
6141                         break;
6142
6143                 flush_dcache_page(subpage);
6144
6145                 cond_resched();
6146         }
6147         return ret_val;
6148 }
6149 #endif /* CONFIG_TRANSPARENT_HUGEPAGE || CONFIG_HUGETLBFS */
6150
6151 #if USE_SPLIT_PTE_PTLOCKS && ALLOC_SPLIT_PTLOCKS
6152
6153 static struct kmem_cache *page_ptl_cachep;
6154
6155 void __init ptlock_cache_init(void)
6156 {
6157         page_ptl_cachep = kmem_cache_create("page->ptl", sizeof(spinlock_t), 0,
6158                         SLAB_PANIC, NULL);
6159 }
6160
6161 bool ptlock_alloc(struct ptdesc *ptdesc)
6162 {
6163         spinlock_t *ptl;
6164
6165         ptl = kmem_cache_alloc(page_ptl_cachep, GFP_KERNEL);
6166         if (!ptl)
6167                 return false;
6168         ptdesc->ptl = ptl;
6169         return true;
6170 }
6171
6172 void ptlock_free(struct ptdesc *ptdesc)
6173 {
6174         kmem_cache_free(page_ptl_cachep, ptdesc->ptl);
6175 }
6176 #endif