]> Git Repo - linux.git/blob - mm/rmap.c
Merge tag 'for-linus' of https://github.com/openrisc/linux
[linux.git] / mm / rmap.c
1 /*
2  * mm/rmap.c - physical to virtual reverse mappings
3  *
4  * Copyright 2001, Rik van Riel <[email protected]>
5  * Released under the General Public License (GPL).
6  *
7  * Simple, low overhead reverse mapping scheme.
8  * Please try to keep this thing as modular as possible.
9  *
10  * Provides methods for unmapping each kind of mapped page:
11  * the anon methods track anonymous pages, and
12  * the file methods track pages belonging to an inode.
13  *
14  * Original design by Rik van Riel <[email protected]> 2001
15  * File methods by Dave McCracken <[email protected]> 2003, 2004
16  * Anonymous methods by Andrea Arcangeli <[email protected]> 2004
17  * Contributions by Hugh Dickins 2003, 2004
18  */
19
20 /*
21  * Lock ordering in mm:
22  *
23  * inode->i_rwsem       (while writing or truncating, not reading or faulting)
24  *   mm->mmap_lock
25  *     mapping->invalidate_lock (in filemap_fault)
26  *       folio_lock
27  *         hugetlbfs_i_mmap_rwsem_key (in huge_pmd_share, see hugetlbfs below)
28  *           vma_start_write
29  *             mapping->i_mmap_rwsem
30  *               anon_vma->rwsem
31  *                 mm->page_table_lock or pte_lock
32  *                   swap_lock (in swap_duplicate, swap_info_get)
33  *                     mmlist_lock (in mmput, drain_mmlist and others)
34  *                     mapping->private_lock (in block_dirty_folio)
35  *                       folio_lock_memcg move_lock (in block_dirty_folio)
36  *                         i_pages lock (widely used)
37  *                           lruvec->lru_lock (in folio_lruvec_lock_irq)
38  *                     inode->i_lock (in set_page_dirty's __mark_inode_dirty)
39  *                     bdi.wb->list_lock (in set_page_dirty's __mark_inode_dirty)
40  *                       sb_lock (within inode_lock in fs/fs-writeback.c)
41  *                       i_pages lock (widely used, in set_page_dirty,
42  *                                 in arch-dependent flush_dcache_mmap_lock,
43  *                                 within bdi.wb->list_lock in __sync_single_inode)
44  *
45  * anon_vma->rwsem,mapping->i_mmap_rwsem   (memory_failure, collect_procs_anon)
46  *   ->tasklist_lock
47  *     pte map lock
48  *
49  * hugetlbfs PageHuge() take locks in this order:
50  *   hugetlb_fault_mutex (hugetlbfs specific page fault mutex)
51  *     vma_lock (hugetlb specific lock for pmd_sharing)
52  *       mapping->i_mmap_rwsem (also used for hugetlb pmd sharing)
53  *         folio_lock
54  */
55
56 #include <linux/mm.h>
57 #include <linux/sched/mm.h>
58 #include <linux/sched/task.h>
59 #include <linux/pagemap.h>
60 #include <linux/swap.h>
61 #include <linux/swapops.h>
62 #include <linux/slab.h>
63 #include <linux/init.h>
64 #include <linux/ksm.h>
65 #include <linux/rmap.h>
66 #include <linux/rcupdate.h>
67 #include <linux/export.h>
68 #include <linux/memcontrol.h>
69 #include <linux/mmu_notifier.h>
70 #include <linux/migrate.h>
71 #include <linux/hugetlb.h>
72 #include <linux/huge_mm.h>
73 #include <linux/backing-dev.h>
74 #include <linux/page_idle.h>
75 #include <linux/memremap.h>
76 #include <linux/userfaultfd_k.h>
77 #include <linux/mm_inline.h>
78 #include <linux/oom.h>
79
80 #include <asm/tlbflush.h>
81
82 #define CREATE_TRACE_POINTS
83 #include <trace/events/tlb.h>
84 #include <trace/events/migrate.h>
85
86 #include "internal.h"
87
88 static struct kmem_cache *anon_vma_cachep;
89 static struct kmem_cache *anon_vma_chain_cachep;
90
91 static inline struct anon_vma *anon_vma_alloc(void)
92 {
93         struct anon_vma *anon_vma;
94
95         anon_vma = kmem_cache_alloc(anon_vma_cachep, GFP_KERNEL);
96         if (anon_vma) {
97                 atomic_set(&anon_vma->refcount, 1);
98                 anon_vma->num_children = 0;
99                 anon_vma->num_active_vmas = 0;
100                 anon_vma->parent = anon_vma;
101                 /*
102                  * Initialise the anon_vma root to point to itself. If called
103                  * from fork, the root will be reset to the parents anon_vma.
104                  */
105                 anon_vma->root = anon_vma;
106         }
107
108         return anon_vma;
109 }
110
111 static inline void anon_vma_free(struct anon_vma *anon_vma)
112 {
113         VM_BUG_ON(atomic_read(&anon_vma->refcount));
114
115         /*
116          * Synchronize against folio_lock_anon_vma_read() such that
117          * we can safely hold the lock without the anon_vma getting
118          * freed.
119          *
120          * Relies on the full mb implied by the atomic_dec_and_test() from
121          * put_anon_vma() against the acquire barrier implied by
122          * down_read_trylock() from folio_lock_anon_vma_read(). This orders:
123          *
124          * folio_lock_anon_vma_read()   VS      put_anon_vma()
125          *   down_read_trylock()                  atomic_dec_and_test()
126          *   LOCK                                 MB
127          *   atomic_read()                        rwsem_is_locked()
128          *
129          * LOCK should suffice since the actual taking of the lock must
130          * happen _before_ what follows.
131          */
132         might_sleep();
133         if (rwsem_is_locked(&anon_vma->root->rwsem)) {
134                 anon_vma_lock_write(anon_vma);
135                 anon_vma_unlock_write(anon_vma);
136         }
137
138         kmem_cache_free(anon_vma_cachep, anon_vma);
139 }
140
141 static inline struct anon_vma_chain *anon_vma_chain_alloc(gfp_t gfp)
142 {
143         return kmem_cache_alloc(anon_vma_chain_cachep, gfp);
144 }
145
146 static void anon_vma_chain_free(struct anon_vma_chain *anon_vma_chain)
147 {
148         kmem_cache_free(anon_vma_chain_cachep, anon_vma_chain);
149 }
150
151 static void anon_vma_chain_link(struct vm_area_struct *vma,
152                                 struct anon_vma_chain *avc,
153                                 struct anon_vma *anon_vma)
154 {
155         avc->vma = vma;
156         avc->anon_vma = anon_vma;
157         list_add(&avc->same_vma, &vma->anon_vma_chain);
158         anon_vma_interval_tree_insert(avc, &anon_vma->rb_root);
159 }
160
161 /**
162  * __anon_vma_prepare - attach an anon_vma to a memory region
163  * @vma: the memory region in question
164  *
165  * This makes sure the memory mapping described by 'vma' has
166  * an 'anon_vma' attached to it, so that we can associate the
167  * anonymous pages mapped into it with that anon_vma.
168  *
169  * The common case will be that we already have one, which
170  * is handled inline by anon_vma_prepare(). But if
171  * not we either need to find an adjacent mapping that we
172  * can re-use the anon_vma from (very common when the only
173  * reason for splitting a vma has been mprotect()), or we
174  * allocate a new one.
175  *
176  * Anon-vma allocations are very subtle, because we may have
177  * optimistically looked up an anon_vma in folio_lock_anon_vma_read()
178  * and that may actually touch the rwsem even in the newly
179  * allocated vma (it depends on RCU to make sure that the
180  * anon_vma isn't actually destroyed).
181  *
182  * As a result, we need to do proper anon_vma locking even
183  * for the new allocation. At the same time, we do not want
184  * to do any locking for the common case of already having
185  * an anon_vma.
186  */
187 int __anon_vma_prepare(struct vm_area_struct *vma)
188 {
189         struct mm_struct *mm = vma->vm_mm;
190         struct anon_vma *anon_vma, *allocated;
191         struct anon_vma_chain *avc;
192
193         mmap_assert_locked(mm);
194         might_sleep();
195
196         avc = anon_vma_chain_alloc(GFP_KERNEL);
197         if (!avc)
198                 goto out_enomem;
199
200         anon_vma = find_mergeable_anon_vma(vma);
201         allocated = NULL;
202         if (!anon_vma) {
203                 anon_vma = anon_vma_alloc();
204                 if (unlikely(!anon_vma))
205                         goto out_enomem_free_avc;
206                 anon_vma->num_children++; /* self-parent link for new root */
207                 allocated = anon_vma;
208         }
209
210         anon_vma_lock_write(anon_vma);
211         /* page_table_lock to protect against threads */
212         spin_lock(&mm->page_table_lock);
213         if (likely(!vma->anon_vma)) {
214                 vma->anon_vma = anon_vma;
215                 anon_vma_chain_link(vma, avc, anon_vma);
216                 anon_vma->num_active_vmas++;
217                 allocated = NULL;
218                 avc = NULL;
219         }
220         spin_unlock(&mm->page_table_lock);
221         anon_vma_unlock_write(anon_vma);
222
223         if (unlikely(allocated))
224                 put_anon_vma(allocated);
225         if (unlikely(avc))
226                 anon_vma_chain_free(avc);
227
228         return 0;
229
230  out_enomem_free_avc:
231         anon_vma_chain_free(avc);
232  out_enomem:
233         return -ENOMEM;
234 }
235
236 /*
237  * This is a useful helper function for locking the anon_vma root as
238  * we traverse the vma->anon_vma_chain, looping over anon_vma's that
239  * have the same vma.
240  *
241  * Such anon_vma's should have the same root, so you'd expect to see
242  * just a single mutex_lock for the whole traversal.
243  */
244 static inline struct anon_vma *lock_anon_vma_root(struct anon_vma *root, struct anon_vma *anon_vma)
245 {
246         struct anon_vma *new_root = anon_vma->root;
247         if (new_root != root) {
248                 if (WARN_ON_ONCE(root))
249                         up_write(&root->rwsem);
250                 root = new_root;
251                 down_write(&root->rwsem);
252         }
253         return root;
254 }
255
256 static inline void unlock_anon_vma_root(struct anon_vma *root)
257 {
258         if (root)
259                 up_write(&root->rwsem);
260 }
261
262 /*
263  * Attach the anon_vmas from src to dst.
264  * Returns 0 on success, -ENOMEM on failure.
265  *
266  * anon_vma_clone() is called by vma_expand(), vma_merge(), __split_vma(),
267  * copy_vma() and anon_vma_fork(). The first four want an exact copy of src,
268  * while the last one, anon_vma_fork(), may try to reuse an existing anon_vma to
269  * prevent endless growth of anon_vma. Since dst->anon_vma is set to NULL before
270  * call, we can identify this case by checking (!dst->anon_vma &&
271  * src->anon_vma).
272  *
273  * If (!dst->anon_vma && src->anon_vma) is true, this function tries to find
274  * and reuse existing anon_vma which has no vmas and only one child anon_vma.
275  * This prevents degradation of anon_vma hierarchy to endless linear chain in
276  * case of constantly forking task. On the other hand, an anon_vma with more
277  * than one child isn't reused even if there was no alive vma, thus rmap
278  * walker has a good chance of avoiding scanning the whole hierarchy when it
279  * searches where page is mapped.
280  */
281 int anon_vma_clone(struct vm_area_struct *dst, struct vm_area_struct *src)
282 {
283         struct anon_vma_chain *avc, *pavc;
284         struct anon_vma *root = NULL;
285
286         list_for_each_entry_reverse(pavc, &src->anon_vma_chain, same_vma) {
287                 struct anon_vma *anon_vma;
288
289                 avc = anon_vma_chain_alloc(GFP_NOWAIT | __GFP_NOWARN);
290                 if (unlikely(!avc)) {
291                         unlock_anon_vma_root(root);
292                         root = NULL;
293                         avc = anon_vma_chain_alloc(GFP_KERNEL);
294                         if (!avc)
295                                 goto enomem_failure;
296                 }
297                 anon_vma = pavc->anon_vma;
298                 root = lock_anon_vma_root(root, anon_vma);
299                 anon_vma_chain_link(dst, avc, anon_vma);
300
301                 /*
302                  * Reuse existing anon_vma if it has no vma and only one
303                  * anon_vma child.
304                  *
305                  * Root anon_vma is never reused:
306                  * it has self-parent reference and at least one child.
307                  */
308                 if (!dst->anon_vma && src->anon_vma &&
309                     anon_vma->num_children < 2 &&
310                     anon_vma->num_active_vmas == 0)
311                         dst->anon_vma = anon_vma;
312         }
313         if (dst->anon_vma)
314                 dst->anon_vma->num_active_vmas++;
315         unlock_anon_vma_root(root);
316         return 0;
317
318  enomem_failure:
319         /*
320          * dst->anon_vma is dropped here otherwise its num_active_vmas can
321          * be incorrectly decremented in unlink_anon_vmas().
322          * We can safely do this because callers of anon_vma_clone() don't care
323          * about dst->anon_vma if anon_vma_clone() failed.
324          */
325         dst->anon_vma = NULL;
326         unlink_anon_vmas(dst);
327         return -ENOMEM;
328 }
329
330 /*
331  * Attach vma to its own anon_vma, as well as to the anon_vmas that
332  * the corresponding VMA in the parent process is attached to.
333  * Returns 0 on success, non-zero on failure.
334  */
335 int anon_vma_fork(struct vm_area_struct *vma, struct vm_area_struct *pvma)
336 {
337         struct anon_vma_chain *avc;
338         struct anon_vma *anon_vma;
339         int error;
340
341         /* Don't bother if the parent process has no anon_vma here. */
342         if (!pvma->anon_vma)
343                 return 0;
344
345         /* Drop inherited anon_vma, we'll reuse existing or allocate new. */
346         vma->anon_vma = NULL;
347
348         /*
349          * First, attach the new VMA to the parent VMA's anon_vmas,
350          * so rmap can find non-COWed pages in child processes.
351          */
352         error = anon_vma_clone(vma, pvma);
353         if (error)
354                 return error;
355
356         /* An existing anon_vma has been reused, all done then. */
357         if (vma->anon_vma)
358                 return 0;
359
360         /* Then add our own anon_vma. */
361         anon_vma = anon_vma_alloc();
362         if (!anon_vma)
363                 goto out_error;
364         anon_vma->num_active_vmas++;
365         avc = anon_vma_chain_alloc(GFP_KERNEL);
366         if (!avc)
367                 goto out_error_free_anon_vma;
368
369         /*
370          * The root anon_vma's rwsem is the lock actually used when we
371          * lock any of the anon_vmas in this anon_vma tree.
372          */
373         anon_vma->root = pvma->anon_vma->root;
374         anon_vma->parent = pvma->anon_vma;
375         /*
376          * With refcounts, an anon_vma can stay around longer than the
377          * process it belongs to. The root anon_vma needs to be pinned until
378          * this anon_vma is freed, because the lock lives in the root.
379          */
380         get_anon_vma(anon_vma->root);
381         /* Mark this anon_vma as the one where our new (COWed) pages go. */
382         vma->anon_vma = anon_vma;
383         anon_vma_lock_write(anon_vma);
384         anon_vma_chain_link(vma, avc, anon_vma);
385         anon_vma->parent->num_children++;
386         anon_vma_unlock_write(anon_vma);
387
388         return 0;
389
390  out_error_free_anon_vma:
391         put_anon_vma(anon_vma);
392  out_error:
393         unlink_anon_vmas(vma);
394         return -ENOMEM;
395 }
396
397 void unlink_anon_vmas(struct vm_area_struct *vma)
398 {
399         struct anon_vma_chain *avc, *next;
400         struct anon_vma *root = NULL;
401
402         /*
403          * Unlink each anon_vma chained to the VMA.  This list is ordered
404          * from newest to oldest, ensuring the root anon_vma gets freed last.
405          */
406         list_for_each_entry_safe(avc, next, &vma->anon_vma_chain, same_vma) {
407                 struct anon_vma *anon_vma = avc->anon_vma;
408
409                 root = lock_anon_vma_root(root, anon_vma);
410                 anon_vma_interval_tree_remove(avc, &anon_vma->rb_root);
411
412                 /*
413                  * Leave empty anon_vmas on the list - we'll need
414                  * to free them outside the lock.
415                  */
416                 if (RB_EMPTY_ROOT(&anon_vma->rb_root.rb_root)) {
417                         anon_vma->parent->num_children--;
418                         continue;
419                 }
420
421                 list_del(&avc->same_vma);
422                 anon_vma_chain_free(avc);
423         }
424         if (vma->anon_vma) {
425                 vma->anon_vma->num_active_vmas--;
426
427                 /*
428                  * vma would still be needed after unlink, and anon_vma will be prepared
429                  * when handle fault.
430                  */
431                 vma->anon_vma = NULL;
432         }
433         unlock_anon_vma_root(root);
434
435         /*
436          * Iterate the list once more, it now only contains empty and unlinked
437          * anon_vmas, destroy them. Could not do before due to __put_anon_vma()
438          * needing to write-acquire the anon_vma->root->rwsem.
439          */
440         list_for_each_entry_safe(avc, next, &vma->anon_vma_chain, same_vma) {
441                 struct anon_vma *anon_vma = avc->anon_vma;
442
443                 VM_WARN_ON(anon_vma->num_children);
444                 VM_WARN_ON(anon_vma->num_active_vmas);
445                 put_anon_vma(anon_vma);
446
447                 list_del(&avc->same_vma);
448                 anon_vma_chain_free(avc);
449         }
450 }
451
452 static void anon_vma_ctor(void *data)
453 {
454         struct anon_vma *anon_vma = data;
455
456         init_rwsem(&anon_vma->rwsem);
457         atomic_set(&anon_vma->refcount, 0);
458         anon_vma->rb_root = RB_ROOT_CACHED;
459 }
460
461 void __init anon_vma_init(void)
462 {
463         anon_vma_cachep = kmem_cache_create("anon_vma", sizeof(struct anon_vma),
464                         0, SLAB_TYPESAFE_BY_RCU|SLAB_PANIC|SLAB_ACCOUNT,
465                         anon_vma_ctor);
466         anon_vma_chain_cachep = KMEM_CACHE(anon_vma_chain,
467                         SLAB_PANIC|SLAB_ACCOUNT);
468 }
469
470 /*
471  * Getting a lock on a stable anon_vma from a page off the LRU is tricky!
472  *
473  * Since there is no serialization what so ever against folio_remove_rmap_*()
474  * the best this function can do is return a refcount increased anon_vma
475  * that might have been relevant to this page.
476  *
477  * The page might have been remapped to a different anon_vma or the anon_vma
478  * returned may already be freed (and even reused).
479  *
480  * In case it was remapped to a different anon_vma, the new anon_vma will be a
481  * child of the old anon_vma, and the anon_vma lifetime rules will therefore
482  * ensure that any anon_vma obtained from the page will still be valid for as
483  * long as we observe page_mapped() [ hence all those page_mapped() tests ].
484  *
485  * All users of this function must be very careful when walking the anon_vma
486  * chain and verify that the page in question is indeed mapped in it
487  * [ something equivalent to page_mapped_in_vma() ].
488  *
489  * Since anon_vma's slab is SLAB_TYPESAFE_BY_RCU and we know from
490  * folio_remove_rmap_*() that the anon_vma pointer from page->mapping is valid
491  * if there is a mapcount, we can dereference the anon_vma after observing
492  * those.
493  *
494  * NOTE: the caller should normally hold folio lock when calling this.  If
495  * not, the caller needs to double check the anon_vma didn't change after
496  * taking the anon_vma lock for either read or write (UFFDIO_MOVE can modify it
497  * concurrently without folio lock protection). See folio_lock_anon_vma_read()
498  * which has already covered that, and comment above remap_pages().
499  */
500 struct anon_vma *folio_get_anon_vma(struct folio *folio)
501 {
502         struct anon_vma *anon_vma = NULL;
503         unsigned long anon_mapping;
504
505         rcu_read_lock();
506         anon_mapping = (unsigned long)READ_ONCE(folio->mapping);
507         if ((anon_mapping & PAGE_MAPPING_FLAGS) != PAGE_MAPPING_ANON)
508                 goto out;
509         if (!folio_mapped(folio))
510                 goto out;
511
512         anon_vma = (struct anon_vma *) (anon_mapping - PAGE_MAPPING_ANON);
513         if (!atomic_inc_not_zero(&anon_vma->refcount)) {
514                 anon_vma = NULL;
515                 goto out;
516         }
517
518         /*
519          * If this folio is still mapped, then its anon_vma cannot have been
520          * freed.  But if it has been unmapped, we have no security against the
521          * anon_vma structure being freed and reused (for another anon_vma:
522          * SLAB_TYPESAFE_BY_RCU guarantees that - so the atomic_inc_not_zero()
523          * above cannot corrupt).
524          */
525         if (!folio_mapped(folio)) {
526                 rcu_read_unlock();
527                 put_anon_vma(anon_vma);
528                 return NULL;
529         }
530 out:
531         rcu_read_unlock();
532
533         return anon_vma;
534 }
535
536 /*
537  * Similar to folio_get_anon_vma() except it locks the anon_vma.
538  *
539  * Its a little more complex as it tries to keep the fast path to a single
540  * atomic op -- the trylock. If we fail the trylock, we fall back to getting a
541  * reference like with folio_get_anon_vma() and then block on the mutex
542  * on !rwc->try_lock case.
543  */
544 struct anon_vma *folio_lock_anon_vma_read(struct folio *folio,
545                                           struct rmap_walk_control *rwc)
546 {
547         struct anon_vma *anon_vma = NULL;
548         struct anon_vma *root_anon_vma;
549         unsigned long anon_mapping;
550
551 retry:
552         rcu_read_lock();
553         anon_mapping = (unsigned long)READ_ONCE(folio->mapping);
554         if ((anon_mapping & PAGE_MAPPING_FLAGS) != PAGE_MAPPING_ANON)
555                 goto out;
556         if (!folio_mapped(folio))
557                 goto out;
558
559         anon_vma = (struct anon_vma *) (anon_mapping - PAGE_MAPPING_ANON);
560         root_anon_vma = READ_ONCE(anon_vma->root);
561         if (down_read_trylock(&root_anon_vma->rwsem)) {
562                 /*
563                  * folio_move_anon_rmap() might have changed the anon_vma as we
564                  * might not hold the folio lock here.
565                  */
566                 if (unlikely((unsigned long)READ_ONCE(folio->mapping) !=
567                              anon_mapping)) {
568                         up_read(&root_anon_vma->rwsem);
569                         rcu_read_unlock();
570                         goto retry;
571                 }
572
573                 /*
574                  * If the folio is still mapped, then this anon_vma is still
575                  * its anon_vma, and holding the mutex ensures that it will
576                  * not go away, see anon_vma_free().
577                  */
578                 if (!folio_mapped(folio)) {
579                         up_read(&root_anon_vma->rwsem);
580                         anon_vma = NULL;
581                 }
582                 goto out;
583         }
584
585         if (rwc && rwc->try_lock) {
586                 anon_vma = NULL;
587                 rwc->contended = true;
588                 goto out;
589         }
590
591         /* trylock failed, we got to sleep */
592         if (!atomic_inc_not_zero(&anon_vma->refcount)) {
593                 anon_vma = NULL;
594                 goto out;
595         }
596
597         if (!folio_mapped(folio)) {
598                 rcu_read_unlock();
599                 put_anon_vma(anon_vma);
600                 return NULL;
601         }
602
603         /* we pinned the anon_vma, its safe to sleep */
604         rcu_read_unlock();
605         anon_vma_lock_read(anon_vma);
606
607         /*
608          * folio_move_anon_rmap() might have changed the anon_vma as we might
609          * not hold the folio lock here.
610          */
611         if (unlikely((unsigned long)READ_ONCE(folio->mapping) !=
612                      anon_mapping)) {
613                 anon_vma_unlock_read(anon_vma);
614                 put_anon_vma(anon_vma);
615                 anon_vma = NULL;
616                 goto retry;
617         }
618
619         if (atomic_dec_and_test(&anon_vma->refcount)) {
620                 /*
621                  * Oops, we held the last refcount, release the lock
622                  * and bail -- can't simply use put_anon_vma() because
623                  * we'll deadlock on the anon_vma_lock_write() recursion.
624                  */
625                 anon_vma_unlock_read(anon_vma);
626                 __put_anon_vma(anon_vma);
627                 anon_vma = NULL;
628         }
629
630         return anon_vma;
631
632 out:
633         rcu_read_unlock();
634         return anon_vma;
635 }
636
637 #ifdef CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH
638 /*
639  * Flush TLB entries for recently unmapped pages from remote CPUs. It is
640  * important if a PTE was dirty when it was unmapped that it's flushed
641  * before any IO is initiated on the page to prevent lost writes. Similarly,
642  * it must be flushed before freeing to prevent data leakage.
643  */
644 void try_to_unmap_flush(void)
645 {
646         struct tlbflush_unmap_batch *tlb_ubc = &current->tlb_ubc;
647
648         if (!tlb_ubc->flush_required)
649                 return;
650
651         arch_tlbbatch_flush(&tlb_ubc->arch);
652         tlb_ubc->flush_required = false;
653         tlb_ubc->writable = false;
654 }
655
656 /* Flush iff there are potentially writable TLB entries that can race with IO */
657 void try_to_unmap_flush_dirty(void)
658 {
659         struct tlbflush_unmap_batch *tlb_ubc = &current->tlb_ubc;
660
661         if (tlb_ubc->writable)
662                 try_to_unmap_flush();
663 }
664
665 /*
666  * Bits 0-14 of mm->tlb_flush_batched record pending generations.
667  * Bits 16-30 of mm->tlb_flush_batched bit record flushed generations.
668  */
669 #define TLB_FLUSH_BATCH_FLUSHED_SHIFT   16
670 #define TLB_FLUSH_BATCH_PENDING_MASK                    \
671         ((1 << (TLB_FLUSH_BATCH_FLUSHED_SHIFT - 1)) - 1)
672 #define TLB_FLUSH_BATCH_PENDING_LARGE                   \
673         (TLB_FLUSH_BATCH_PENDING_MASK / 2)
674
675 static void set_tlb_ubc_flush_pending(struct mm_struct *mm, pte_t pteval,
676                                       unsigned long uaddr)
677 {
678         struct tlbflush_unmap_batch *tlb_ubc = &current->tlb_ubc;
679         int batch;
680         bool writable = pte_dirty(pteval);
681
682         if (!pte_accessible(mm, pteval))
683                 return;
684
685         arch_tlbbatch_add_pending(&tlb_ubc->arch, mm, uaddr);
686         tlb_ubc->flush_required = true;
687
688         /*
689          * Ensure compiler does not re-order the setting of tlb_flush_batched
690          * before the PTE is cleared.
691          */
692         barrier();
693         batch = atomic_read(&mm->tlb_flush_batched);
694 retry:
695         if ((batch & TLB_FLUSH_BATCH_PENDING_MASK) > TLB_FLUSH_BATCH_PENDING_LARGE) {
696                 /*
697                  * Prevent `pending' from catching up with `flushed' because of
698                  * overflow.  Reset `pending' and `flushed' to be 1 and 0 if
699                  * `pending' becomes large.
700                  */
701                 if (!atomic_try_cmpxchg(&mm->tlb_flush_batched, &batch, 1))
702                         goto retry;
703         } else {
704                 atomic_inc(&mm->tlb_flush_batched);
705         }
706
707         /*
708          * If the PTE was dirty then it's best to assume it's writable. The
709          * caller must use try_to_unmap_flush_dirty() or try_to_unmap_flush()
710          * before the page is queued for IO.
711          */
712         if (writable)
713                 tlb_ubc->writable = true;
714 }
715
716 /*
717  * Returns true if the TLB flush should be deferred to the end of a batch of
718  * unmap operations to reduce IPIs.
719  */
720 static bool should_defer_flush(struct mm_struct *mm, enum ttu_flags flags)
721 {
722         if (!(flags & TTU_BATCH_FLUSH))
723                 return false;
724
725         return arch_tlbbatch_should_defer(mm);
726 }
727
728 /*
729  * Reclaim unmaps pages under the PTL but do not flush the TLB prior to
730  * releasing the PTL if TLB flushes are batched. It's possible for a parallel
731  * operation such as mprotect or munmap to race between reclaim unmapping
732  * the page and flushing the page. If this race occurs, it potentially allows
733  * access to data via a stale TLB entry. Tracking all mm's that have TLB
734  * batching in flight would be expensive during reclaim so instead track
735  * whether TLB batching occurred in the past and if so then do a flush here
736  * if required. This will cost one additional flush per reclaim cycle paid
737  * by the first operation at risk such as mprotect and mumap.
738  *
739  * This must be called under the PTL so that an access to tlb_flush_batched
740  * that is potentially a "reclaim vs mprotect/munmap/etc" race will synchronise
741  * via the PTL.
742  */
743 void flush_tlb_batched_pending(struct mm_struct *mm)
744 {
745         int batch = atomic_read(&mm->tlb_flush_batched);
746         int pending = batch & TLB_FLUSH_BATCH_PENDING_MASK;
747         int flushed = batch >> TLB_FLUSH_BATCH_FLUSHED_SHIFT;
748
749         if (pending != flushed) {
750                 arch_flush_tlb_batched_pending(mm);
751                 /*
752                  * If the new TLB flushing is pending during flushing, leave
753                  * mm->tlb_flush_batched as is, to avoid losing flushing.
754                  */
755                 atomic_cmpxchg(&mm->tlb_flush_batched, batch,
756                                pending | (pending << TLB_FLUSH_BATCH_FLUSHED_SHIFT));
757         }
758 }
759 #else
760 static void set_tlb_ubc_flush_pending(struct mm_struct *mm, pte_t pteval,
761                                       unsigned long uaddr)
762 {
763 }
764
765 static bool should_defer_flush(struct mm_struct *mm, enum ttu_flags flags)
766 {
767         return false;
768 }
769 #endif /* CONFIG_ARCH_WANT_BATCHED_UNMAP_TLB_FLUSH */
770
771 /*
772  * At what user virtual address is page expected in vma?
773  * Caller should check the page is actually part of the vma.
774  */
775 unsigned long page_address_in_vma(struct page *page, struct vm_area_struct *vma)
776 {
777         struct folio *folio = page_folio(page);
778         pgoff_t pgoff;
779
780         if (folio_test_anon(folio)) {
781                 struct anon_vma *page__anon_vma = folio_anon_vma(folio);
782                 /*
783                  * Note: swapoff's unuse_vma() is more efficient with this
784                  * check, and needs it to match anon_vma when KSM is active.
785                  */
786                 if (!vma->anon_vma || !page__anon_vma ||
787                     vma->anon_vma->root != page__anon_vma->root)
788                         return -EFAULT;
789         } else if (!vma->vm_file) {
790                 return -EFAULT;
791         } else if (vma->vm_file->f_mapping != folio->mapping) {
792                 return -EFAULT;
793         }
794
795         /* The !page__anon_vma above handles KSM folios */
796         pgoff = folio->index + folio_page_idx(folio, page);
797         return vma_address(vma, pgoff, 1);
798 }
799
800 /*
801  * Returns the actual pmd_t* where we expect 'address' to be mapped from, or
802  * NULL if it doesn't exist.  No guarantees / checks on what the pmd_t*
803  * represents.
804  */
805 pmd_t *mm_find_pmd(struct mm_struct *mm, unsigned long address)
806 {
807         pgd_t *pgd;
808         p4d_t *p4d;
809         pud_t *pud;
810         pmd_t *pmd = NULL;
811
812         pgd = pgd_offset(mm, address);
813         if (!pgd_present(*pgd))
814                 goto out;
815
816         p4d = p4d_offset(pgd, address);
817         if (!p4d_present(*p4d))
818                 goto out;
819
820         pud = pud_offset(p4d, address);
821         if (!pud_present(*pud))
822                 goto out;
823
824         pmd = pmd_offset(pud, address);
825 out:
826         return pmd;
827 }
828
829 struct folio_referenced_arg {
830         int mapcount;
831         int referenced;
832         unsigned long vm_flags;
833         struct mem_cgroup *memcg;
834 };
835
836 /*
837  * arg: folio_referenced_arg will be passed
838  */
839 static bool folio_referenced_one(struct folio *folio,
840                 struct vm_area_struct *vma, unsigned long address, void *arg)
841 {
842         struct folio_referenced_arg *pra = arg;
843         DEFINE_FOLIO_VMA_WALK(pvmw, folio, vma, address, 0);
844         int referenced = 0;
845         unsigned long start = address, ptes = 0;
846
847         while (page_vma_mapped_walk(&pvmw)) {
848                 address = pvmw.address;
849
850                 if (vma->vm_flags & VM_LOCKED) {
851                         if (!folio_test_large(folio) || !pvmw.pte) {
852                                 /* Restore the mlock which got missed */
853                                 mlock_vma_folio(folio, vma);
854                                 page_vma_mapped_walk_done(&pvmw);
855                                 pra->vm_flags |= VM_LOCKED;
856                                 return false; /* To break the loop */
857                         }
858                         /*
859                          * For large folio fully mapped to VMA, will
860                          * be handled after the pvmw loop.
861                          *
862                          * For large folio cross VMA boundaries, it's
863                          * expected to be picked  by page reclaim. But
864                          * should skip reference of pages which are in
865                          * the range of VM_LOCKED vma. As page reclaim
866                          * should just count the reference of pages out
867                          * the range of VM_LOCKED vma.
868                          */
869                         ptes++;
870                         pra->mapcount--;
871                         continue;
872                 }
873
874                 /*
875                  * Skip the non-shared swapbacked folio mapped solely by
876                  * the exiting or OOM-reaped process. This avoids redundant
877                  * swap-out followed by an immediate unmap.
878                  */
879                 if ((!atomic_read(&vma->vm_mm->mm_users) ||
880                     check_stable_address_space(vma->vm_mm)) &&
881                     folio_test_anon(folio) && folio_test_swapbacked(folio) &&
882                     !folio_likely_mapped_shared(folio)) {
883                         pra->referenced = -1;
884                         page_vma_mapped_walk_done(&pvmw);
885                         return false;
886                 }
887
888                 if (lru_gen_enabled() && pvmw.pte) {
889                         if (lru_gen_look_around(&pvmw))
890                                 referenced++;
891                 } else if (pvmw.pte) {
892                         if (ptep_clear_flush_young_notify(vma, address,
893                                                 pvmw.pte))
894                                 referenced++;
895                 } else if (IS_ENABLED(CONFIG_TRANSPARENT_HUGEPAGE)) {
896                         if (pmdp_clear_flush_young_notify(vma, address,
897                                                 pvmw.pmd))
898                                 referenced++;
899                 } else {
900                         /* unexpected pmd-mapped folio? */
901                         WARN_ON_ONCE(1);
902                 }
903
904                 pra->mapcount--;
905         }
906
907         if ((vma->vm_flags & VM_LOCKED) &&
908                         folio_test_large(folio) &&
909                         folio_within_vma(folio, vma)) {
910                 unsigned long s_align, e_align;
911
912                 s_align = ALIGN_DOWN(start, PMD_SIZE);
913                 e_align = ALIGN_DOWN(start + folio_size(folio) - 1, PMD_SIZE);
914
915                 /* folio doesn't cross page table boundary and fully mapped */
916                 if ((s_align == e_align) && (ptes == folio_nr_pages(folio))) {
917                         /* Restore the mlock which got missed */
918                         mlock_vma_folio(folio, vma);
919                         pra->vm_flags |= VM_LOCKED;
920                         return false; /* To break the loop */
921                 }
922         }
923
924         if (referenced)
925                 folio_clear_idle(folio);
926         if (folio_test_clear_young(folio))
927                 referenced++;
928
929         if (referenced) {
930                 pra->referenced++;
931                 pra->vm_flags |= vma->vm_flags & ~VM_LOCKED;
932         }
933
934         if (!pra->mapcount)
935                 return false; /* To break the loop */
936
937         return true;
938 }
939
940 static bool invalid_folio_referenced_vma(struct vm_area_struct *vma, void *arg)
941 {
942         struct folio_referenced_arg *pra = arg;
943         struct mem_cgroup *memcg = pra->memcg;
944
945         /*
946          * Ignore references from this mapping if it has no recency. If the
947          * folio has been used in another mapping, we will catch it; if this
948          * other mapping is already gone, the unmap path will have set the
949          * referenced flag or activated the folio in zap_pte_range().
950          */
951         if (!vma_has_recency(vma))
952                 return true;
953
954         /*
955          * If we are reclaiming on behalf of a cgroup, skip counting on behalf
956          * of references from different cgroups.
957          */
958         if (memcg && !mm_match_cgroup(vma->vm_mm, memcg))
959                 return true;
960
961         return false;
962 }
963
964 /**
965  * folio_referenced() - Test if the folio was referenced.
966  * @folio: The folio to test.
967  * @is_locked: Caller holds lock on the folio.
968  * @memcg: target memory cgroup
969  * @vm_flags: A combination of all the vma->vm_flags which referenced the folio.
970  *
971  * Quick test_and_clear_referenced for all mappings of a folio,
972  *
973  * Return: The number of mappings which referenced the folio. Return -1 if
974  * the function bailed out due to rmap lock contention.
975  */
976 int folio_referenced(struct folio *folio, int is_locked,
977                      struct mem_cgroup *memcg, unsigned long *vm_flags)
978 {
979         bool we_locked = false;
980         struct folio_referenced_arg pra = {
981                 .mapcount = folio_mapcount(folio),
982                 .memcg = memcg,
983         };
984         struct rmap_walk_control rwc = {
985                 .rmap_one = folio_referenced_one,
986                 .arg = (void *)&pra,
987                 .anon_lock = folio_lock_anon_vma_read,
988                 .try_lock = true,
989                 .invalid_vma = invalid_folio_referenced_vma,
990         };
991
992         *vm_flags = 0;
993         if (!pra.mapcount)
994                 return 0;
995
996         if (!folio_raw_mapping(folio))
997                 return 0;
998
999         if (!is_locked && (!folio_test_anon(folio) || folio_test_ksm(folio))) {
1000                 we_locked = folio_trylock(folio);
1001                 if (!we_locked)
1002                         return 1;
1003         }
1004
1005         rmap_walk(folio, &rwc);
1006         *vm_flags = pra.vm_flags;
1007
1008         if (we_locked)
1009                 folio_unlock(folio);
1010
1011         return rwc.contended ? -1 : pra.referenced;
1012 }
1013
1014 static int page_vma_mkclean_one(struct page_vma_mapped_walk *pvmw)
1015 {
1016         int cleaned = 0;
1017         struct vm_area_struct *vma = pvmw->vma;
1018         struct mmu_notifier_range range;
1019         unsigned long address = pvmw->address;
1020
1021         /*
1022          * We have to assume the worse case ie pmd for invalidation. Note that
1023          * the folio can not be freed from this function.
1024          */
1025         mmu_notifier_range_init(&range, MMU_NOTIFY_PROTECTION_PAGE, 0,
1026                                 vma->vm_mm, address, vma_address_end(pvmw));
1027         mmu_notifier_invalidate_range_start(&range);
1028
1029         while (page_vma_mapped_walk(pvmw)) {
1030                 int ret = 0;
1031
1032                 address = pvmw->address;
1033                 if (pvmw->pte) {
1034                         pte_t *pte = pvmw->pte;
1035                         pte_t entry = ptep_get(pte);
1036
1037                         if (!pte_dirty(entry) && !pte_write(entry))
1038                                 continue;
1039
1040                         flush_cache_page(vma, address, pte_pfn(entry));
1041                         entry = ptep_clear_flush(vma, address, pte);
1042                         entry = pte_wrprotect(entry);
1043                         entry = pte_mkclean(entry);
1044                         set_pte_at(vma->vm_mm, address, pte, entry);
1045                         ret = 1;
1046                 } else {
1047 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
1048                         pmd_t *pmd = pvmw->pmd;
1049                         pmd_t entry;
1050
1051                         if (!pmd_dirty(*pmd) && !pmd_write(*pmd))
1052                                 continue;
1053
1054                         flush_cache_range(vma, address,
1055                                           address + HPAGE_PMD_SIZE);
1056                         entry = pmdp_invalidate(vma, address, pmd);
1057                         entry = pmd_wrprotect(entry);
1058                         entry = pmd_mkclean(entry);
1059                         set_pmd_at(vma->vm_mm, address, pmd, entry);
1060                         ret = 1;
1061 #else
1062                         /* unexpected pmd-mapped folio? */
1063                         WARN_ON_ONCE(1);
1064 #endif
1065                 }
1066
1067                 if (ret)
1068                         cleaned++;
1069         }
1070
1071         mmu_notifier_invalidate_range_end(&range);
1072
1073         return cleaned;
1074 }
1075
1076 static bool page_mkclean_one(struct folio *folio, struct vm_area_struct *vma,
1077                              unsigned long address, void *arg)
1078 {
1079         DEFINE_FOLIO_VMA_WALK(pvmw, folio, vma, address, PVMW_SYNC);
1080         int *cleaned = arg;
1081
1082         *cleaned += page_vma_mkclean_one(&pvmw);
1083
1084         return true;
1085 }
1086
1087 static bool invalid_mkclean_vma(struct vm_area_struct *vma, void *arg)
1088 {
1089         if (vma->vm_flags & VM_SHARED)
1090                 return false;
1091
1092         return true;
1093 }
1094
1095 int folio_mkclean(struct folio *folio)
1096 {
1097         int cleaned = 0;
1098         struct address_space *mapping;
1099         struct rmap_walk_control rwc = {
1100                 .arg = (void *)&cleaned,
1101                 .rmap_one = page_mkclean_one,
1102                 .invalid_vma = invalid_mkclean_vma,
1103         };
1104
1105         BUG_ON(!folio_test_locked(folio));
1106
1107         if (!folio_mapped(folio))
1108                 return 0;
1109
1110         mapping = folio_mapping(folio);
1111         if (!mapping)
1112                 return 0;
1113
1114         rmap_walk(folio, &rwc);
1115
1116         return cleaned;
1117 }
1118 EXPORT_SYMBOL_GPL(folio_mkclean);
1119
1120 /**
1121  * pfn_mkclean_range - Cleans the PTEs (including PMDs) mapped with range of
1122  *                     [@pfn, @pfn + @nr_pages) at the specific offset (@pgoff)
1123  *                     within the @vma of shared mappings. And since clean PTEs
1124  *                     should also be readonly, write protects them too.
1125  * @pfn: start pfn.
1126  * @nr_pages: number of physically contiguous pages srarting with @pfn.
1127  * @pgoff: page offset that the @pfn mapped with.
1128  * @vma: vma that @pfn mapped within.
1129  *
1130  * Returns the number of cleaned PTEs (including PMDs).
1131  */
1132 int pfn_mkclean_range(unsigned long pfn, unsigned long nr_pages, pgoff_t pgoff,
1133                       struct vm_area_struct *vma)
1134 {
1135         struct page_vma_mapped_walk pvmw = {
1136                 .pfn            = pfn,
1137                 .nr_pages       = nr_pages,
1138                 .pgoff          = pgoff,
1139                 .vma            = vma,
1140                 .flags          = PVMW_SYNC,
1141         };
1142
1143         if (invalid_mkclean_vma(vma, NULL))
1144                 return 0;
1145
1146         pvmw.address = vma_address(vma, pgoff, nr_pages);
1147         VM_BUG_ON_VMA(pvmw.address == -EFAULT, vma);
1148
1149         return page_vma_mkclean_one(&pvmw);
1150 }
1151
1152 static __always_inline unsigned int __folio_add_rmap(struct folio *folio,
1153                 struct page *page, int nr_pages, enum rmap_level level,
1154                 int *nr_pmdmapped)
1155 {
1156         atomic_t *mapped = &folio->_nr_pages_mapped;
1157         const int orig_nr_pages = nr_pages;
1158         int first = 0, nr = 0;
1159
1160         __folio_rmap_sanity_checks(folio, page, nr_pages, level);
1161
1162         switch (level) {
1163         case RMAP_LEVEL_PTE:
1164                 if (!folio_test_large(folio)) {
1165                         nr = atomic_inc_and_test(&folio->_mapcount);
1166                         break;
1167                 }
1168
1169                 do {
1170                         first += atomic_inc_and_test(&page->_mapcount);
1171                 } while (page++, --nr_pages > 0);
1172
1173                 if (first &&
1174                     atomic_add_return_relaxed(first, mapped) < ENTIRELY_MAPPED)
1175                         nr = first;
1176
1177                 atomic_add(orig_nr_pages, &folio->_large_mapcount);
1178                 break;
1179         case RMAP_LEVEL_PMD:
1180                 first = atomic_inc_and_test(&folio->_entire_mapcount);
1181                 if (first) {
1182                         nr = atomic_add_return_relaxed(ENTIRELY_MAPPED, mapped);
1183                         if (likely(nr < ENTIRELY_MAPPED + ENTIRELY_MAPPED)) {
1184                                 *nr_pmdmapped = folio_nr_pages(folio);
1185                                 nr = *nr_pmdmapped - (nr & FOLIO_PAGES_MAPPED);
1186                                 /* Raced ahead of a remove and another add? */
1187                                 if (unlikely(nr < 0))
1188                                         nr = 0;
1189                         } else {
1190                                 /* Raced ahead of a remove of ENTIRELY_MAPPED */
1191                                 nr = 0;
1192                         }
1193                 }
1194                 atomic_inc(&folio->_large_mapcount);
1195                 break;
1196         }
1197         return nr;
1198 }
1199
1200 /**
1201  * folio_move_anon_rmap - move a folio to our anon_vma
1202  * @folio:      The folio to move to our anon_vma
1203  * @vma:        The vma the folio belongs to
1204  *
1205  * When a folio belongs exclusively to one process after a COW event,
1206  * that folio can be moved into the anon_vma that belongs to just that
1207  * process, so the rmap code will not search the parent or sibling processes.
1208  */
1209 void folio_move_anon_rmap(struct folio *folio, struct vm_area_struct *vma)
1210 {
1211         void *anon_vma = vma->anon_vma;
1212
1213         VM_BUG_ON_FOLIO(!folio_test_locked(folio), folio);
1214         VM_BUG_ON_VMA(!anon_vma, vma);
1215
1216         anon_vma += PAGE_MAPPING_ANON;
1217         /*
1218          * Ensure that anon_vma and the PAGE_MAPPING_ANON bit are written
1219          * simultaneously, so a concurrent reader (eg folio_referenced()'s
1220          * folio_test_anon()) will not see one without the other.
1221          */
1222         WRITE_ONCE(folio->mapping, anon_vma);
1223 }
1224
1225 /**
1226  * __folio_set_anon - set up a new anonymous rmap for a folio
1227  * @folio:      The folio to set up the new anonymous rmap for.
1228  * @vma:        VM area to add the folio to.
1229  * @address:    User virtual address of the mapping
1230  * @exclusive:  Whether the folio is exclusive to the process.
1231  */
1232 static void __folio_set_anon(struct folio *folio, struct vm_area_struct *vma,
1233                              unsigned long address, bool exclusive)
1234 {
1235         struct anon_vma *anon_vma = vma->anon_vma;
1236
1237         BUG_ON(!anon_vma);
1238
1239         /*
1240          * If the folio isn't exclusive to this vma, we must use the _oldest_
1241          * possible anon_vma for the folio mapping!
1242          */
1243         if (!exclusive)
1244                 anon_vma = anon_vma->root;
1245
1246         /*
1247          * page_idle does a lockless/optimistic rmap scan on folio->mapping.
1248          * Make sure the compiler doesn't split the stores of anon_vma and
1249          * the PAGE_MAPPING_ANON type identifier, otherwise the rmap code
1250          * could mistake the mapping for a struct address_space and crash.
1251          */
1252         anon_vma = (void *) anon_vma + PAGE_MAPPING_ANON;
1253         WRITE_ONCE(folio->mapping, (struct address_space *) anon_vma);
1254         folio->index = linear_page_index(vma, address);
1255 }
1256
1257 /**
1258  * __page_check_anon_rmap - sanity check anonymous rmap addition
1259  * @folio:      The folio containing @page.
1260  * @page:       the page to check the mapping of
1261  * @vma:        the vm area in which the mapping is added
1262  * @address:    the user virtual address mapped
1263  */
1264 static void __page_check_anon_rmap(struct folio *folio, struct page *page,
1265         struct vm_area_struct *vma, unsigned long address)
1266 {
1267         /*
1268          * The page's anon-rmap details (mapping and index) are guaranteed to
1269          * be set up correctly at this point.
1270          *
1271          * We have exclusion against folio_add_anon_rmap_*() because the caller
1272          * always holds the page locked.
1273          *
1274          * We have exclusion against folio_add_new_anon_rmap because those pages
1275          * are initially only visible via the pagetables, and the pte is locked
1276          * over the call to folio_add_new_anon_rmap.
1277          */
1278         VM_BUG_ON_FOLIO(folio_anon_vma(folio)->root != vma->anon_vma->root,
1279                         folio);
1280         VM_BUG_ON_PAGE(page_to_pgoff(page) != linear_page_index(vma, address),
1281                        page);
1282 }
1283
1284 static void __folio_mod_stat(struct folio *folio, int nr, int nr_pmdmapped)
1285 {
1286         int idx;
1287
1288         if (nr) {
1289                 idx = folio_test_anon(folio) ? NR_ANON_MAPPED : NR_FILE_MAPPED;
1290                 __lruvec_stat_mod_folio(folio, idx, nr);
1291         }
1292         if (nr_pmdmapped) {
1293                 if (folio_test_anon(folio)) {
1294                         idx = NR_ANON_THPS;
1295                         __lruvec_stat_mod_folio(folio, idx, nr_pmdmapped);
1296                 } else {
1297                         /* NR_*_PMDMAPPED are not maintained per-memcg */
1298                         idx = folio_test_swapbacked(folio) ?
1299                                 NR_SHMEM_PMDMAPPED : NR_FILE_PMDMAPPED;
1300                         __mod_node_page_state(folio_pgdat(folio), idx,
1301                                               nr_pmdmapped);
1302                 }
1303         }
1304 }
1305
1306 static __always_inline void __folio_add_anon_rmap(struct folio *folio,
1307                 struct page *page, int nr_pages, struct vm_area_struct *vma,
1308                 unsigned long address, rmap_t flags, enum rmap_level level)
1309 {
1310         int i, nr, nr_pmdmapped = 0;
1311
1312         VM_WARN_ON_FOLIO(!folio_test_anon(folio), folio);
1313
1314         nr = __folio_add_rmap(folio, page, nr_pages, level, &nr_pmdmapped);
1315
1316         if (likely(!folio_test_ksm(folio)))
1317                 __page_check_anon_rmap(folio, page, vma, address);
1318
1319         __folio_mod_stat(folio, nr, nr_pmdmapped);
1320
1321         if (flags & RMAP_EXCLUSIVE) {
1322                 switch (level) {
1323                 case RMAP_LEVEL_PTE:
1324                         for (i = 0; i < nr_pages; i++)
1325                                 SetPageAnonExclusive(page + i);
1326                         break;
1327                 case RMAP_LEVEL_PMD:
1328                         SetPageAnonExclusive(page);
1329                         break;
1330                 }
1331         }
1332         for (i = 0; i < nr_pages; i++) {
1333                 struct page *cur_page = page + i;
1334
1335                 /* While PTE-mapping a THP we have a PMD and a PTE mapping. */
1336                 VM_WARN_ON_FOLIO((atomic_read(&cur_page->_mapcount) > 0 ||
1337                                   (folio_test_large(folio) &&
1338                                    folio_entire_mapcount(folio) > 1)) &&
1339                                  PageAnonExclusive(cur_page), folio);
1340         }
1341
1342         /*
1343          * For large folio, only mlock it if it's fully mapped to VMA. It's
1344          * not easy to check whether the large folio is fully mapped to VMA
1345          * here. Only mlock normal 4K folio and leave page reclaim to handle
1346          * large folio.
1347          */
1348         if (!folio_test_large(folio))
1349                 mlock_vma_folio(folio, vma);
1350 }
1351
1352 /**
1353  * folio_add_anon_rmap_ptes - add PTE mappings to a page range of an anon folio
1354  * @folio:      The folio to add the mappings to
1355  * @page:       The first page to add
1356  * @nr_pages:   The number of pages which will be mapped
1357  * @vma:        The vm area in which the mappings are added
1358  * @address:    The user virtual address of the first page to map
1359  * @flags:      The rmap flags
1360  *
1361  * The page range of folio is defined by [first_page, first_page + nr_pages)
1362  *
1363  * The caller needs to hold the page table lock, and the page must be locked in
1364  * the anon_vma case: to serialize mapping,index checking after setting,
1365  * and to ensure that an anon folio is not being upgraded racily to a KSM folio
1366  * (but KSM folios are never downgraded).
1367  */
1368 void folio_add_anon_rmap_ptes(struct folio *folio, struct page *page,
1369                 int nr_pages, struct vm_area_struct *vma, unsigned long address,
1370                 rmap_t flags)
1371 {
1372         __folio_add_anon_rmap(folio, page, nr_pages, vma, address, flags,
1373                               RMAP_LEVEL_PTE);
1374 }
1375
1376 /**
1377  * folio_add_anon_rmap_pmd - add a PMD mapping to a page range of an anon folio
1378  * @folio:      The folio to add the mapping to
1379  * @page:       The first page to add
1380  * @vma:        The vm area in which the mapping is added
1381  * @address:    The user virtual address of the first page to map
1382  * @flags:      The rmap flags
1383  *
1384  * The page range of folio is defined by [first_page, first_page + HPAGE_PMD_NR)
1385  *
1386  * The caller needs to hold the page table lock, and the page must be locked in
1387  * the anon_vma case: to serialize mapping,index checking after setting.
1388  */
1389 void folio_add_anon_rmap_pmd(struct folio *folio, struct page *page,
1390                 struct vm_area_struct *vma, unsigned long address, rmap_t flags)
1391 {
1392 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
1393         __folio_add_anon_rmap(folio, page, HPAGE_PMD_NR, vma, address, flags,
1394                               RMAP_LEVEL_PMD);
1395 #else
1396         WARN_ON_ONCE(true);
1397 #endif
1398 }
1399
1400 /**
1401  * folio_add_new_anon_rmap - Add mapping to a new anonymous folio.
1402  * @folio:      The folio to add the mapping to.
1403  * @vma:        the vm area in which the mapping is added
1404  * @address:    the user virtual address mapped
1405  * @flags:      The rmap flags
1406  *
1407  * Like folio_add_anon_rmap_*() but must only be called on *new* folios.
1408  * This means the inc-and-test can be bypassed.
1409  * The folio doesn't necessarily need to be locked while it's exclusive
1410  * unless two threads map it concurrently. However, the folio must be
1411  * locked if it's shared.
1412  *
1413  * If the folio is pmd-mappable, it is accounted as a THP.
1414  */
1415 void folio_add_new_anon_rmap(struct folio *folio, struct vm_area_struct *vma,
1416                 unsigned long address, rmap_t flags)
1417 {
1418         const int nr = folio_nr_pages(folio);
1419         const bool exclusive = flags & RMAP_EXCLUSIVE;
1420         int nr_pmdmapped = 0;
1421
1422         VM_WARN_ON_FOLIO(folio_test_hugetlb(folio), folio);
1423         VM_WARN_ON_FOLIO(!exclusive && !folio_test_locked(folio), folio);
1424         VM_BUG_ON_VMA(address < vma->vm_start ||
1425                         address + (nr << PAGE_SHIFT) > vma->vm_end, vma);
1426
1427         /*
1428          * VM_DROPPABLE mappings don't swap; instead they're just dropped when
1429          * under memory pressure.
1430          */
1431         if (!folio_test_swapbacked(folio) && !(vma->vm_flags & VM_DROPPABLE))
1432                 __folio_set_swapbacked(folio);
1433         __folio_set_anon(folio, vma, address, exclusive);
1434
1435         if (likely(!folio_test_large(folio))) {
1436                 /* increment count (starts at -1) */
1437                 atomic_set(&folio->_mapcount, 0);
1438                 if (exclusive)
1439                         SetPageAnonExclusive(&folio->page);
1440         } else if (!folio_test_pmd_mappable(folio)) {
1441                 int i;
1442
1443                 for (i = 0; i < nr; i++) {
1444                         struct page *page = folio_page(folio, i);
1445
1446                         /* increment count (starts at -1) */
1447                         atomic_set(&page->_mapcount, 0);
1448                         if (exclusive)
1449                                 SetPageAnonExclusive(page);
1450                 }
1451
1452                 /* increment count (starts at -1) */
1453                 atomic_set(&folio->_large_mapcount, nr - 1);
1454                 atomic_set(&folio->_nr_pages_mapped, nr);
1455         } else {
1456                 /* increment count (starts at -1) */
1457                 atomic_set(&folio->_entire_mapcount, 0);
1458                 /* increment count (starts at -1) */
1459                 atomic_set(&folio->_large_mapcount, 0);
1460                 atomic_set(&folio->_nr_pages_mapped, ENTIRELY_MAPPED);
1461                 if (exclusive)
1462                         SetPageAnonExclusive(&folio->page);
1463                 nr_pmdmapped = nr;
1464         }
1465
1466         __folio_mod_stat(folio, nr, nr_pmdmapped);
1467         mod_mthp_stat(folio_order(folio), MTHP_STAT_NR_ANON, 1);
1468 }
1469
1470 static __always_inline void __folio_add_file_rmap(struct folio *folio,
1471                 struct page *page, int nr_pages, struct vm_area_struct *vma,
1472                 enum rmap_level level)
1473 {
1474         int nr, nr_pmdmapped = 0;
1475
1476         VM_WARN_ON_FOLIO(folio_test_anon(folio), folio);
1477
1478         nr = __folio_add_rmap(folio, page, nr_pages, level, &nr_pmdmapped);
1479         __folio_mod_stat(folio, nr, nr_pmdmapped);
1480
1481         /* See comments in folio_add_anon_rmap_*() */
1482         if (!folio_test_large(folio))
1483                 mlock_vma_folio(folio, vma);
1484 }
1485
1486 /**
1487  * folio_add_file_rmap_ptes - add PTE mappings to a page range of a folio
1488  * @folio:      The folio to add the mappings to
1489  * @page:       The first page to add
1490  * @nr_pages:   The number of pages that will be mapped using PTEs
1491  * @vma:        The vm area in which the mappings are added
1492  *
1493  * The page range of the folio is defined by [page, page + nr_pages)
1494  *
1495  * The caller needs to hold the page table lock.
1496  */
1497 void folio_add_file_rmap_ptes(struct folio *folio, struct page *page,
1498                 int nr_pages, struct vm_area_struct *vma)
1499 {
1500         __folio_add_file_rmap(folio, page, nr_pages, vma, RMAP_LEVEL_PTE);
1501 }
1502
1503 /**
1504  * folio_add_file_rmap_pmd - add a PMD mapping to a page range of a folio
1505  * @folio:      The folio to add the mapping to
1506  * @page:       The first page to add
1507  * @vma:        The vm area in which the mapping is added
1508  *
1509  * The page range of the folio is defined by [page, page + HPAGE_PMD_NR)
1510  *
1511  * The caller needs to hold the page table lock.
1512  */
1513 void folio_add_file_rmap_pmd(struct folio *folio, struct page *page,
1514                 struct vm_area_struct *vma)
1515 {
1516 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
1517         __folio_add_file_rmap(folio, page, HPAGE_PMD_NR, vma, RMAP_LEVEL_PMD);
1518 #else
1519         WARN_ON_ONCE(true);
1520 #endif
1521 }
1522
1523 static __always_inline void __folio_remove_rmap(struct folio *folio,
1524                 struct page *page, int nr_pages, struct vm_area_struct *vma,
1525                 enum rmap_level level)
1526 {
1527         atomic_t *mapped = &folio->_nr_pages_mapped;
1528         int last = 0, nr = 0, nr_pmdmapped = 0;
1529         bool partially_mapped = false;
1530
1531         __folio_rmap_sanity_checks(folio, page, nr_pages, level);
1532
1533         switch (level) {
1534         case RMAP_LEVEL_PTE:
1535                 if (!folio_test_large(folio)) {
1536                         nr = atomic_add_negative(-1, &folio->_mapcount);
1537                         break;
1538                 }
1539
1540                 atomic_sub(nr_pages, &folio->_large_mapcount);
1541                 do {
1542                         last += atomic_add_negative(-1, &page->_mapcount);
1543                 } while (page++, --nr_pages > 0);
1544
1545                 if (last &&
1546                     atomic_sub_return_relaxed(last, mapped) < ENTIRELY_MAPPED)
1547                         nr = last;
1548
1549                 partially_mapped = nr && atomic_read(mapped);
1550                 break;
1551         case RMAP_LEVEL_PMD:
1552                 atomic_dec(&folio->_large_mapcount);
1553                 last = atomic_add_negative(-1, &folio->_entire_mapcount);
1554                 if (last) {
1555                         nr = atomic_sub_return_relaxed(ENTIRELY_MAPPED, mapped);
1556                         if (likely(nr < ENTIRELY_MAPPED)) {
1557                                 nr_pmdmapped = folio_nr_pages(folio);
1558                                 nr = nr_pmdmapped - (nr & FOLIO_PAGES_MAPPED);
1559                                 /* Raced ahead of another remove and an add? */
1560                                 if (unlikely(nr < 0))
1561                                         nr = 0;
1562                         } else {
1563                                 /* An add of ENTIRELY_MAPPED raced ahead */
1564                                 nr = 0;
1565                         }
1566                 }
1567
1568                 partially_mapped = nr && nr < nr_pmdmapped;
1569                 break;
1570         }
1571
1572         /*
1573          * Queue anon large folio for deferred split if at least one page of
1574          * the folio is unmapped and at least one page is still mapped.
1575          *
1576          * Check partially_mapped first to ensure it is a large folio.
1577          */
1578         if (partially_mapped && folio_test_anon(folio) &&
1579             !folio_test_partially_mapped(folio))
1580                 deferred_split_folio(folio, true);
1581
1582         __folio_mod_stat(folio, -nr, -nr_pmdmapped);
1583
1584         /*
1585          * It would be tidy to reset folio_test_anon mapping when fully
1586          * unmapped, but that might overwrite a racing folio_add_anon_rmap_*()
1587          * which increments mapcount after us but sets mapping before us:
1588          * so leave the reset to free_pages_prepare, and remember that
1589          * it's only reliable while mapped.
1590          */
1591
1592         munlock_vma_folio(folio, vma);
1593 }
1594
1595 /**
1596  * folio_remove_rmap_ptes - remove PTE mappings from a page range of a folio
1597  * @folio:      The folio to remove the mappings from
1598  * @page:       The first page to remove
1599  * @nr_pages:   The number of pages that will be removed from the mapping
1600  * @vma:        The vm area from which the mappings are removed
1601  *
1602  * The page range of the folio is defined by [page, page + nr_pages)
1603  *
1604  * The caller needs to hold the page table lock.
1605  */
1606 void folio_remove_rmap_ptes(struct folio *folio, struct page *page,
1607                 int nr_pages, struct vm_area_struct *vma)
1608 {
1609         __folio_remove_rmap(folio, page, nr_pages, vma, RMAP_LEVEL_PTE);
1610 }
1611
1612 /**
1613  * folio_remove_rmap_pmd - remove a PMD mapping from a page range of a folio
1614  * @folio:      The folio to remove the mapping from
1615  * @page:       The first page to remove
1616  * @vma:        The vm area from which the mapping is removed
1617  *
1618  * The page range of the folio is defined by [page, page + HPAGE_PMD_NR)
1619  *
1620  * The caller needs to hold the page table lock.
1621  */
1622 void folio_remove_rmap_pmd(struct folio *folio, struct page *page,
1623                 struct vm_area_struct *vma)
1624 {
1625 #ifdef CONFIG_TRANSPARENT_HUGEPAGE
1626         __folio_remove_rmap(folio, page, HPAGE_PMD_NR, vma, RMAP_LEVEL_PMD);
1627 #else
1628         WARN_ON_ONCE(true);
1629 #endif
1630 }
1631
1632 /*
1633  * @arg: enum ttu_flags will be passed to this argument
1634  */
1635 static bool try_to_unmap_one(struct folio *folio, struct vm_area_struct *vma,
1636                      unsigned long address, void *arg)
1637 {
1638         struct mm_struct *mm = vma->vm_mm;
1639         DEFINE_FOLIO_VMA_WALK(pvmw, folio, vma, address, 0);
1640         pte_t pteval;
1641         struct page *subpage;
1642         bool anon_exclusive, ret = true;
1643         struct mmu_notifier_range range;
1644         enum ttu_flags flags = (enum ttu_flags)(long)arg;
1645         unsigned long pfn;
1646         unsigned long hsz = 0;
1647
1648         /*
1649          * When racing against e.g. zap_pte_range() on another cpu,
1650          * in between its ptep_get_and_clear_full() and folio_remove_rmap_*(),
1651          * try_to_unmap() may return before page_mapped() has become false,
1652          * if page table locking is skipped: use TTU_SYNC to wait for that.
1653          */
1654         if (flags & TTU_SYNC)
1655                 pvmw.flags = PVMW_SYNC;
1656
1657         /*
1658          * For THP, we have to assume the worse case ie pmd for invalidation.
1659          * For hugetlb, it could be much worse if we need to do pud
1660          * invalidation in the case of pmd sharing.
1661          *
1662          * Note that the folio can not be freed in this function as call of
1663          * try_to_unmap() must hold a reference on the folio.
1664          */
1665         range.end = vma_address_end(&pvmw);
1666         mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma->vm_mm,
1667                                 address, range.end);
1668         if (folio_test_hugetlb(folio)) {
1669                 /*
1670                  * If sharing is possible, start and end will be adjusted
1671                  * accordingly.
1672                  */
1673                 adjust_range_if_pmd_sharing_possible(vma, &range.start,
1674                                                      &range.end);
1675
1676                 /* We need the huge page size for set_huge_pte_at() */
1677                 hsz = huge_page_size(hstate_vma(vma));
1678         }
1679         mmu_notifier_invalidate_range_start(&range);
1680
1681         while (page_vma_mapped_walk(&pvmw)) {
1682                 /*
1683                  * If the folio is in an mlock()d vma, we must not swap it out.
1684                  */
1685                 if (!(flags & TTU_IGNORE_MLOCK) &&
1686                     (vma->vm_flags & VM_LOCKED)) {
1687                         /* Restore the mlock which got missed */
1688                         if (!folio_test_large(folio))
1689                                 mlock_vma_folio(folio, vma);
1690                         goto walk_abort;
1691                 }
1692
1693                 if (!pvmw.pte) {
1694                         if (unmap_huge_pmd_locked(vma, pvmw.address, pvmw.pmd,
1695                                                   folio))
1696                                 goto walk_done;
1697
1698                         if (flags & TTU_SPLIT_HUGE_PMD) {
1699                                 /*
1700                                  * We temporarily have to drop the PTL and
1701                                  * restart so we can process the PTE-mapped THP.
1702                                  */
1703                                 split_huge_pmd_locked(vma, pvmw.address,
1704                                                       pvmw.pmd, false, folio);
1705                                 flags &= ~TTU_SPLIT_HUGE_PMD;
1706                                 page_vma_mapped_walk_restart(&pvmw);
1707                                 continue;
1708                         }
1709                 }
1710
1711                 /* Unexpected PMD-mapped THP? */
1712                 VM_BUG_ON_FOLIO(!pvmw.pte, folio);
1713
1714                 pfn = pte_pfn(ptep_get(pvmw.pte));
1715                 subpage = folio_page(folio, pfn - folio_pfn(folio));
1716                 address = pvmw.address;
1717                 anon_exclusive = folio_test_anon(folio) &&
1718                                  PageAnonExclusive(subpage);
1719
1720                 if (folio_test_hugetlb(folio)) {
1721                         bool anon = folio_test_anon(folio);
1722
1723                         /*
1724                          * The try_to_unmap() is only passed a hugetlb page
1725                          * in the case where the hugetlb page is poisoned.
1726                          */
1727                         VM_BUG_ON_PAGE(!PageHWPoison(subpage), subpage);
1728                         /*
1729                          * huge_pmd_unshare may unmap an entire PMD page.
1730                          * There is no way of knowing exactly which PMDs may
1731                          * be cached for this mm, so we must flush them all.
1732                          * start/end were already adjusted above to cover this
1733                          * range.
1734                          */
1735                         flush_cache_range(vma, range.start, range.end);
1736
1737                         /*
1738                          * To call huge_pmd_unshare, i_mmap_rwsem must be
1739                          * held in write mode.  Caller needs to explicitly
1740                          * do this outside rmap routines.
1741                          *
1742                          * We also must hold hugetlb vma_lock in write mode.
1743                          * Lock order dictates acquiring vma_lock BEFORE
1744                          * i_mmap_rwsem.  We can only try lock here and fail
1745                          * if unsuccessful.
1746                          */
1747                         if (!anon) {
1748                                 VM_BUG_ON(!(flags & TTU_RMAP_LOCKED));
1749                                 if (!hugetlb_vma_trylock_write(vma))
1750                                         goto walk_abort;
1751                                 if (huge_pmd_unshare(mm, vma, address, pvmw.pte)) {
1752                                         hugetlb_vma_unlock_write(vma);
1753                                         flush_tlb_range(vma,
1754                                                 range.start, range.end);
1755                                         /*
1756                                          * The ref count of the PMD page was
1757                                          * dropped which is part of the way map
1758                                          * counting is done for shared PMDs.
1759                                          * Return 'true' here.  When there is
1760                                          * no other sharing, huge_pmd_unshare
1761                                          * returns false and we will unmap the
1762                                          * actual page and drop map count
1763                                          * to zero.
1764                                          */
1765                                         goto walk_done;
1766                                 }
1767                                 hugetlb_vma_unlock_write(vma);
1768                         }
1769                         pteval = huge_ptep_clear_flush(vma, address, pvmw.pte);
1770                 } else {
1771                         flush_cache_page(vma, address, pfn);
1772                         /* Nuke the page table entry. */
1773                         if (should_defer_flush(mm, flags)) {
1774                                 /*
1775                                  * We clear the PTE but do not flush so potentially
1776                                  * a remote CPU could still be writing to the folio.
1777                                  * If the entry was previously clean then the
1778                                  * architecture must guarantee that a clear->dirty
1779                                  * transition on a cached TLB entry is written through
1780                                  * and traps if the PTE is unmapped.
1781                                  */
1782                                 pteval = ptep_get_and_clear(mm, address, pvmw.pte);
1783
1784                                 set_tlb_ubc_flush_pending(mm, pteval, address);
1785                         } else {
1786                                 pteval = ptep_clear_flush(vma, address, pvmw.pte);
1787                         }
1788                 }
1789
1790                 /*
1791                  * Now the pte is cleared. If this pte was uffd-wp armed,
1792                  * we may want to replace a none pte with a marker pte if
1793                  * it's file-backed, so we don't lose the tracking info.
1794                  */
1795                 pte_install_uffd_wp_if_needed(vma, address, pvmw.pte, pteval);
1796
1797                 /* Set the dirty flag on the folio now the pte is gone. */
1798                 if (pte_dirty(pteval))
1799                         folio_mark_dirty(folio);
1800
1801                 /* Update high watermark before we lower rss */
1802                 update_hiwater_rss(mm);
1803
1804                 if (PageHWPoison(subpage) && (flags & TTU_HWPOISON)) {
1805                         pteval = swp_entry_to_pte(make_hwpoison_entry(subpage));
1806                         if (folio_test_hugetlb(folio)) {
1807                                 hugetlb_count_sub(folio_nr_pages(folio), mm);
1808                                 set_huge_pte_at(mm, address, pvmw.pte, pteval,
1809                                                 hsz);
1810                         } else {
1811                                 dec_mm_counter(mm, mm_counter(folio));
1812                                 set_pte_at(mm, address, pvmw.pte, pteval);
1813                         }
1814
1815                 } else if (pte_unused(pteval) && !userfaultfd_armed(vma)) {
1816                         /*
1817                          * The guest indicated that the page content is of no
1818                          * interest anymore. Simply discard the pte, vmscan
1819                          * will take care of the rest.
1820                          * A future reference will then fault in a new zero
1821                          * page. When userfaultfd is active, we must not drop
1822                          * this page though, as its main user (postcopy
1823                          * migration) will not expect userfaults on already
1824                          * copied pages.
1825                          */
1826                         dec_mm_counter(mm, mm_counter(folio));
1827                 } else if (folio_test_anon(folio)) {
1828                         swp_entry_t entry = page_swap_entry(subpage);
1829                         pte_t swp_pte;
1830                         /*
1831                          * Store the swap location in the pte.
1832                          * See handle_pte_fault() ...
1833                          */
1834                         if (unlikely(folio_test_swapbacked(folio) !=
1835                                         folio_test_swapcache(folio))) {
1836                                 WARN_ON_ONCE(1);
1837                                 goto walk_abort;
1838                         }
1839
1840                         /* MADV_FREE page check */
1841                         if (!folio_test_swapbacked(folio)) {
1842                                 int ref_count, map_count;
1843
1844                                 /*
1845                                  * Synchronize with gup_pte_range():
1846                                  * - clear PTE; barrier; read refcount
1847                                  * - inc refcount; barrier; read PTE
1848                                  */
1849                                 smp_mb();
1850
1851                                 ref_count = folio_ref_count(folio);
1852                                 map_count = folio_mapcount(folio);
1853
1854                                 /*
1855                                  * Order reads for page refcount and dirty flag
1856                                  * (see comments in __remove_mapping()).
1857                                  */
1858                                 smp_rmb();
1859
1860                                 /*
1861                                  * The only page refs must be one from isolation
1862                                  * plus the rmap(s) (dropped by discard:).
1863                                  */
1864                                 if (ref_count == 1 + map_count &&
1865                                     (!folio_test_dirty(folio) ||
1866                                      /*
1867                                       * Unlike MADV_FREE mappings, VM_DROPPABLE
1868                                       * ones can be dropped even if they've
1869                                       * been dirtied.
1870                                       */
1871                                      (vma->vm_flags & VM_DROPPABLE))) {
1872                                         dec_mm_counter(mm, MM_ANONPAGES);
1873                                         goto discard;
1874                                 }
1875
1876                                 /*
1877                                  * If the folio was redirtied, it cannot be
1878                                  * discarded. Remap the page to page table.
1879                                  */
1880                                 set_pte_at(mm, address, pvmw.pte, pteval);
1881                                 /*
1882                                  * Unlike MADV_FREE mappings, VM_DROPPABLE ones
1883                                  * never get swap backed on failure to drop.
1884                                  */
1885                                 if (!(vma->vm_flags & VM_DROPPABLE))
1886                                         folio_set_swapbacked(folio);
1887                                 goto walk_abort;
1888                         }
1889
1890                         if (swap_duplicate(entry) < 0) {
1891                                 set_pte_at(mm, address, pvmw.pte, pteval);
1892                                 goto walk_abort;
1893                         }
1894                         if (arch_unmap_one(mm, vma, address, pteval) < 0) {
1895                                 swap_free(entry);
1896                                 set_pte_at(mm, address, pvmw.pte, pteval);
1897                                 goto walk_abort;
1898                         }
1899
1900                         /* See folio_try_share_anon_rmap(): clear PTE first. */
1901                         if (anon_exclusive &&
1902                             folio_try_share_anon_rmap_pte(folio, subpage)) {
1903                                 swap_free(entry);
1904                                 set_pte_at(mm, address, pvmw.pte, pteval);
1905                                 goto walk_abort;
1906                         }
1907                         if (list_empty(&mm->mmlist)) {
1908                                 spin_lock(&mmlist_lock);
1909                                 if (list_empty(&mm->mmlist))
1910                                         list_add(&mm->mmlist, &init_mm.mmlist);
1911                                 spin_unlock(&mmlist_lock);
1912                         }
1913                         dec_mm_counter(mm, MM_ANONPAGES);
1914                         inc_mm_counter(mm, MM_SWAPENTS);
1915                         swp_pte = swp_entry_to_pte(entry);
1916                         if (anon_exclusive)
1917                                 swp_pte = pte_swp_mkexclusive(swp_pte);
1918                         if (pte_soft_dirty(pteval))
1919                                 swp_pte = pte_swp_mksoft_dirty(swp_pte);
1920                         if (pte_uffd_wp(pteval))
1921                                 swp_pte = pte_swp_mkuffd_wp(swp_pte);
1922                         set_pte_at(mm, address, pvmw.pte, swp_pte);
1923                 } else {
1924                         /*
1925                          * This is a locked file-backed folio,
1926                          * so it cannot be removed from the page
1927                          * cache and replaced by a new folio before
1928                          * mmu_notifier_invalidate_range_end, so no
1929                          * concurrent thread might update its page table
1930                          * to point at a new folio while a device is
1931                          * still using this folio.
1932                          *
1933                          * See Documentation/mm/mmu_notifier.rst
1934                          */
1935                         dec_mm_counter(mm, mm_counter_file(folio));
1936                 }
1937 discard:
1938                 if (unlikely(folio_test_hugetlb(folio)))
1939                         hugetlb_remove_rmap(folio);
1940                 else
1941                         folio_remove_rmap_pte(folio, subpage, vma);
1942                 if (vma->vm_flags & VM_LOCKED)
1943                         mlock_drain_local();
1944                 folio_put(folio);
1945                 continue;
1946 walk_abort:
1947                 ret = false;
1948 walk_done:
1949                 page_vma_mapped_walk_done(&pvmw);
1950                 break;
1951         }
1952
1953         mmu_notifier_invalidate_range_end(&range);
1954
1955         return ret;
1956 }
1957
1958 static bool invalid_migration_vma(struct vm_area_struct *vma, void *arg)
1959 {
1960         return vma_is_temporary_stack(vma);
1961 }
1962
1963 static int folio_not_mapped(struct folio *folio)
1964 {
1965         return !folio_mapped(folio);
1966 }
1967
1968 /**
1969  * try_to_unmap - Try to remove all page table mappings to a folio.
1970  * @folio: The folio to unmap.
1971  * @flags: action and flags
1972  *
1973  * Tries to remove all the page table entries which are mapping this
1974  * folio.  It is the caller's responsibility to check if the folio is
1975  * still mapped if needed (use TTU_SYNC to prevent accounting races).
1976  *
1977  * Context: Caller must hold the folio lock.
1978  */
1979 void try_to_unmap(struct folio *folio, enum ttu_flags flags)
1980 {
1981         struct rmap_walk_control rwc = {
1982                 .rmap_one = try_to_unmap_one,
1983                 .arg = (void *)flags,
1984                 .done = folio_not_mapped,
1985                 .anon_lock = folio_lock_anon_vma_read,
1986         };
1987
1988         if (flags & TTU_RMAP_LOCKED)
1989                 rmap_walk_locked(folio, &rwc);
1990         else
1991                 rmap_walk(folio, &rwc);
1992 }
1993
1994 /*
1995  * @arg: enum ttu_flags will be passed to this argument.
1996  *
1997  * If TTU_SPLIT_HUGE_PMD is specified any PMD mappings will be split into PTEs
1998  * containing migration entries.
1999  */
2000 static bool try_to_migrate_one(struct folio *folio, struct vm_area_struct *vma,
2001                      unsigned long address, void *arg)
2002 {
2003         struct mm_struct *mm = vma->vm_mm;
2004         DEFINE_FOLIO_VMA_WALK(pvmw, folio, vma, address, 0);
2005         pte_t pteval;
2006         struct page *subpage;
2007         bool anon_exclusive, ret = true;
2008         struct mmu_notifier_range range;
2009         enum ttu_flags flags = (enum ttu_flags)(long)arg;
2010         unsigned long pfn;
2011         unsigned long hsz = 0;
2012
2013         /*
2014          * When racing against e.g. zap_pte_range() on another cpu,
2015          * in between its ptep_get_and_clear_full() and folio_remove_rmap_*(),
2016          * try_to_migrate() may return before page_mapped() has become false,
2017          * if page table locking is skipped: use TTU_SYNC to wait for that.
2018          */
2019         if (flags & TTU_SYNC)
2020                 pvmw.flags = PVMW_SYNC;
2021
2022         /*
2023          * unmap_page() in mm/huge_memory.c is the only user of migration with
2024          * TTU_SPLIT_HUGE_PMD and it wants to freeze.
2025          */
2026         if (flags & TTU_SPLIT_HUGE_PMD)
2027                 split_huge_pmd_address(vma, address, true, folio);
2028
2029         /*
2030          * For THP, we have to assume the worse case ie pmd for invalidation.
2031          * For hugetlb, it could be much worse if we need to do pud
2032          * invalidation in the case of pmd sharing.
2033          *
2034          * Note that the page can not be free in this function as call of
2035          * try_to_unmap() must hold a reference on the page.
2036          */
2037         range.end = vma_address_end(&pvmw);
2038         mmu_notifier_range_init(&range, MMU_NOTIFY_CLEAR, 0, vma->vm_mm,
2039                                 address, range.end);
2040         if (folio_test_hugetlb(folio)) {
2041                 /*
2042                  * If sharing is possible, start and end will be adjusted
2043                  * accordingly.
2044                  */
2045                 adjust_range_if_pmd_sharing_possible(vma, &range.start,
2046                                                      &range.end);
2047
2048                 /* We need the huge page size for set_huge_pte_at() */
2049                 hsz = huge_page_size(hstate_vma(vma));
2050         }
2051         mmu_notifier_invalidate_range_start(&range);
2052
2053         while (page_vma_mapped_walk(&pvmw)) {
2054 #ifdef CONFIG_ARCH_ENABLE_THP_MIGRATION
2055                 /* PMD-mapped THP migration entry */
2056                 if (!pvmw.pte) {
2057                         subpage = folio_page(folio,
2058                                 pmd_pfn(*pvmw.pmd) - folio_pfn(folio));
2059                         VM_BUG_ON_FOLIO(folio_test_hugetlb(folio) ||
2060                                         !folio_test_pmd_mappable(folio), folio);
2061
2062                         if (set_pmd_migration_entry(&pvmw, subpage)) {
2063                                 ret = false;
2064                                 page_vma_mapped_walk_done(&pvmw);
2065                                 break;
2066                         }
2067                         continue;
2068                 }
2069 #endif
2070
2071                 /* Unexpected PMD-mapped THP? */
2072                 VM_BUG_ON_FOLIO(!pvmw.pte, folio);
2073
2074                 pfn = pte_pfn(ptep_get(pvmw.pte));
2075
2076                 if (folio_is_zone_device(folio)) {
2077                         /*
2078                          * Our PTE is a non-present device exclusive entry and
2079                          * calculating the subpage as for the common case would
2080                          * result in an invalid pointer.
2081                          *
2082                          * Since only PAGE_SIZE pages can currently be
2083                          * migrated, just set it to page. This will need to be
2084                          * changed when hugepage migrations to device private
2085                          * memory are supported.
2086                          */
2087                         VM_BUG_ON_FOLIO(folio_nr_pages(folio) > 1, folio);
2088                         subpage = &folio->page;
2089                 } else {
2090                         subpage = folio_page(folio, pfn - folio_pfn(folio));
2091                 }
2092                 address = pvmw.address;
2093                 anon_exclusive = folio_test_anon(folio) &&
2094                                  PageAnonExclusive(subpage);
2095
2096                 if (folio_test_hugetlb(folio)) {
2097                         bool anon = folio_test_anon(folio);
2098
2099                         /*
2100                          * huge_pmd_unshare may unmap an entire PMD page.
2101                          * There is no way of knowing exactly which PMDs may
2102                          * be cached for this mm, so we must flush them all.
2103                          * start/end were already adjusted above to cover this
2104                          * range.
2105                          */
2106                         flush_cache_range(vma, range.start, range.end);
2107
2108                         /*
2109                          * To call huge_pmd_unshare, i_mmap_rwsem must be
2110                          * held in write mode.  Caller needs to explicitly
2111                          * do this outside rmap routines.
2112                          *
2113                          * We also must hold hugetlb vma_lock in write mode.
2114                          * Lock order dictates acquiring vma_lock BEFORE
2115                          * i_mmap_rwsem.  We can only try lock here and
2116                          * fail if unsuccessful.
2117                          */
2118                         if (!anon) {
2119                                 VM_BUG_ON(!(flags & TTU_RMAP_LOCKED));
2120                                 if (!hugetlb_vma_trylock_write(vma)) {
2121                                         page_vma_mapped_walk_done(&pvmw);
2122                                         ret = false;
2123                                         break;
2124                                 }
2125                                 if (huge_pmd_unshare(mm, vma, address, pvmw.pte)) {
2126                                         hugetlb_vma_unlock_write(vma);
2127                                         flush_tlb_range(vma,
2128                                                 range.start, range.end);
2129
2130                                         /*
2131                                          * The ref count of the PMD page was
2132                                          * dropped which is part of the way map
2133                                          * counting is done for shared PMDs.
2134                                          * Return 'true' here.  When there is
2135                                          * no other sharing, huge_pmd_unshare
2136                                          * returns false and we will unmap the
2137                                          * actual page and drop map count
2138                                          * to zero.
2139                                          */
2140                                         page_vma_mapped_walk_done(&pvmw);
2141                                         break;
2142                                 }
2143                                 hugetlb_vma_unlock_write(vma);
2144                         }
2145                         /* Nuke the hugetlb page table entry */
2146                         pteval = huge_ptep_clear_flush(vma, address, pvmw.pte);
2147                 } else {
2148                         flush_cache_page(vma, address, pfn);
2149                         /* Nuke the page table entry. */
2150                         if (should_defer_flush(mm, flags)) {
2151                                 /*
2152                                  * We clear the PTE but do not flush so potentially
2153                                  * a remote CPU could still be writing to the folio.
2154                                  * If the entry was previously clean then the
2155                                  * architecture must guarantee that a clear->dirty
2156                                  * transition on a cached TLB entry is written through
2157                                  * and traps if the PTE is unmapped.
2158                                  */
2159                                 pteval = ptep_get_and_clear(mm, address, pvmw.pte);
2160
2161                                 set_tlb_ubc_flush_pending(mm, pteval, address);
2162                         } else {
2163                                 pteval = ptep_clear_flush(vma, address, pvmw.pte);
2164                         }
2165                 }
2166
2167                 /* Set the dirty flag on the folio now the pte is gone. */
2168                 if (pte_dirty(pteval))
2169                         folio_mark_dirty(folio);
2170
2171                 /* Update high watermark before we lower rss */
2172                 update_hiwater_rss(mm);
2173
2174                 if (folio_is_device_private(folio)) {
2175                         unsigned long pfn = folio_pfn(folio);
2176                         swp_entry_t entry;
2177                         pte_t swp_pte;
2178
2179                         if (anon_exclusive)
2180                                 WARN_ON_ONCE(folio_try_share_anon_rmap_pte(folio,
2181                                                                            subpage));
2182
2183                         /*
2184                          * Store the pfn of the page in a special migration
2185                          * pte. do_swap_page() will wait until the migration
2186                          * pte is removed and then restart fault handling.
2187                          */
2188                         entry = pte_to_swp_entry(pteval);
2189                         if (is_writable_device_private_entry(entry))
2190                                 entry = make_writable_migration_entry(pfn);
2191                         else if (anon_exclusive)
2192                                 entry = make_readable_exclusive_migration_entry(pfn);
2193                         else
2194                                 entry = make_readable_migration_entry(pfn);
2195                         swp_pte = swp_entry_to_pte(entry);
2196
2197                         /*
2198                          * pteval maps a zone device page and is therefore
2199                          * a swap pte.
2200                          */
2201                         if (pte_swp_soft_dirty(pteval))
2202                                 swp_pte = pte_swp_mksoft_dirty(swp_pte);
2203                         if (pte_swp_uffd_wp(pteval))
2204                                 swp_pte = pte_swp_mkuffd_wp(swp_pte);
2205                         set_pte_at(mm, pvmw.address, pvmw.pte, swp_pte);
2206                         trace_set_migration_pte(pvmw.address, pte_val(swp_pte),
2207                                                 folio_order(folio));
2208                         /*
2209                          * No need to invalidate here it will synchronize on
2210                          * against the special swap migration pte.
2211                          */
2212                 } else if (PageHWPoison(subpage)) {
2213                         pteval = swp_entry_to_pte(make_hwpoison_entry(subpage));
2214                         if (folio_test_hugetlb(folio)) {
2215                                 hugetlb_count_sub(folio_nr_pages(folio), mm);
2216                                 set_huge_pte_at(mm, address, pvmw.pte, pteval,
2217                                                 hsz);
2218                         } else {
2219                                 dec_mm_counter(mm, mm_counter(folio));
2220                                 set_pte_at(mm, address, pvmw.pte, pteval);
2221                         }
2222
2223                 } else if (pte_unused(pteval) && !userfaultfd_armed(vma)) {
2224                         /*
2225                          * The guest indicated that the page content is of no
2226                          * interest anymore. Simply discard the pte, vmscan
2227                          * will take care of the rest.
2228                          * A future reference will then fault in a new zero
2229                          * page. When userfaultfd is active, we must not drop
2230                          * this page though, as its main user (postcopy
2231                          * migration) will not expect userfaults on already
2232                          * copied pages.
2233                          */
2234                         dec_mm_counter(mm, mm_counter(folio));
2235                 } else {
2236                         swp_entry_t entry;
2237                         pte_t swp_pte;
2238
2239                         if (arch_unmap_one(mm, vma, address, pteval) < 0) {
2240                                 if (folio_test_hugetlb(folio))
2241                                         set_huge_pte_at(mm, address, pvmw.pte,
2242                                                         pteval, hsz);
2243                                 else
2244                                         set_pte_at(mm, address, pvmw.pte, pteval);
2245                                 ret = false;
2246                                 page_vma_mapped_walk_done(&pvmw);
2247                                 break;
2248                         }
2249                         VM_BUG_ON_PAGE(pte_write(pteval) && folio_test_anon(folio) &&
2250                                        !anon_exclusive, subpage);
2251
2252                         /* See folio_try_share_anon_rmap_pte(): clear PTE first. */
2253                         if (folio_test_hugetlb(folio)) {
2254                                 if (anon_exclusive &&
2255                                     hugetlb_try_share_anon_rmap(folio)) {
2256                                         set_huge_pte_at(mm, address, pvmw.pte,
2257                                                         pteval, hsz);
2258                                         ret = false;
2259                                         page_vma_mapped_walk_done(&pvmw);
2260                                         break;
2261                                 }
2262                         } else if (anon_exclusive &&
2263                                    folio_try_share_anon_rmap_pte(folio, subpage)) {
2264                                 set_pte_at(mm, address, pvmw.pte, pteval);
2265                                 ret = false;
2266                                 page_vma_mapped_walk_done(&pvmw);
2267                                 break;
2268                         }
2269
2270                         /*
2271                          * Store the pfn of the page in a special migration
2272                          * pte. do_swap_page() will wait until the migration
2273                          * pte is removed and then restart fault handling.
2274                          */
2275                         if (pte_write(pteval))
2276                                 entry = make_writable_migration_entry(
2277                                                         page_to_pfn(subpage));
2278                         else if (anon_exclusive)
2279                                 entry = make_readable_exclusive_migration_entry(
2280                                                         page_to_pfn(subpage));
2281                         else
2282                                 entry = make_readable_migration_entry(
2283                                                         page_to_pfn(subpage));
2284                         if (pte_young(pteval))
2285                                 entry = make_migration_entry_young(entry);
2286                         if (pte_dirty(pteval))
2287                                 entry = make_migration_entry_dirty(entry);
2288                         swp_pte = swp_entry_to_pte(entry);
2289                         if (pte_soft_dirty(pteval))
2290                                 swp_pte = pte_swp_mksoft_dirty(swp_pte);
2291                         if (pte_uffd_wp(pteval))
2292                                 swp_pte = pte_swp_mkuffd_wp(swp_pte);
2293                         if (folio_test_hugetlb(folio))
2294                                 set_huge_pte_at(mm, address, pvmw.pte, swp_pte,
2295                                                 hsz);
2296                         else
2297                                 set_pte_at(mm, address, pvmw.pte, swp_pte);
2298                         trace_set_migration_pte(address, pte_val(swp_pte),
2299                                                 folio_order(folio));
2300                         /*
2301                          * No need to invalidate here it will synchronize on
2302                          * against the special swap migration pte.
2303                          */
2304                 }
2305
2306                 if (unlikely(folio_test_hugetlb(folio)))
2307                         hugetlb_remove_rmap(folio);
2308                 else
2309                         folio_remove_rmap_pte(folio, subpage, vma);
2310                 if (vma->vm_flags & VM_LOCKED)
2311                         mlock_drain_local();
2312                 folio_put(folio);
2313         }
2314
2315         mmu_notifier_invalidate_range_end(&range);
2316
2317         return ret;
2318 }
2319
2320 /**
2321  * try_to_migrate - try to replace all page table mappings with swap entries
2322  * @folio: the folio to replace page table entries for
2323  * @flags: action and flags
2324  *
2325  * Tries to remove all the page table entries which are mapping this folio and
2326  * replace them with special swap entries. Caller must hold the folio lock.
2327  */
2328 void try_to_migrate(struct folio *folio, enum ttu_flags flags)
2329 {
2330         struct rmap_walk_control rwc = {
2331                 .rmap_one = try_to_migrate_one,
2332                 .arg = (void *)flags,
2333                 .done = folio_not_mapped,
2334                 .anon_lock = folio_lock_anon_vma_read,
2335         };
2336
2337         /*
2338          * Migration always ignores mlock and only supports TTU_RMAP_LOCKED and
2339          * TTU_SPLIT_HUGE_PMD, TTU_SYNC, and TTU_BATCH_FLUSH flags.
2340          */
2341         if (WARN_ON_ONCE(flags & ~(TTU_RMAP_LOCKED | TTU_SPLIT_HUGE_PMD |
2342                                         TTU_SYNC | TTU_BATCH_FLUSH)))
2343                 return;
2344
2345         if (folio_is_zone_device(folio) &&
2346             (!folio_is_device_private(folio) && !folio_is_device_coherent(folio)))
2347                 return;
2348
2349         /*
2350          * During exec, a temporary VMA is setup and later moved.
2351          * The VMA is moved under the anon_vma lock but not the
2352          * page tables leading to a race where migration cannot
2353          * find the migration ptes. Rather than increasing the
2354          * locking requirements of exec(), migration skips
2355          * temporary VMAs until after exec() completes.
2356          */
2357         if (!folio_test_ksm(folio) && folio_test_anon(folio))
2358                 rwc.invalid_vma = invalid_migration_vma;
2359
2360         if (flags & TTU_RMAP_LOCKED)
2361                 rmap_walk_locked(folio, &rwc);
2362         else
2363                 rmap_walk(folio, &rwc);
2364 }
2365
2366 #ifdef CONFIG_DEVICE_PRIVATE
2367 struct make_exclusive_args {
2368         struct mm_struct *mm;
2369         unsigned long address;
2370         void *owner;
2371         bool valid;
2372 };
2373
2374 static bool page_make_device_exclusive_one(struct folio *folio,
2375                 struct vm_area_struct *vma, unsigned long address, void *priv)
2376 {
2377         struct mm_struct *mm = vma->vm_mm;
2378         DEFINE_FOLIO_VMA_WALK(pvmw, folio, vma, address, 0);
2379         struct make_exclusive_args *args = priv;
2380         pte_t pteval;
2381         struct page *subpage;
2382         bool ret = true;
2383         struct mmu_notifier_range range;
2384         swp_entry_t entry;
2385         pte_t swp_pte;
2386         pte_t ptent;
2387
2388         mmu_notifier_range_init_owner(&range, MMU_NOTIFY_EXCLUSIVE, 0,
2389                                       vma->vm_mm, address, min(vma->vm_end,
2390                                       address + folio_size(folio)),
2391                                       args->owner);
2392         mmu_notifier_invalidate_range_start(&range);
2393
2394         while (page_vma_mapped_walk(&pvmw)) {
2395                 /* Unexpected PMD-mapped THP? */
2396                 VM_BUG_ON_FOLIO(!pvmw.pte, folio);
2397
2398                 ptent = ptep_get(pvmw.pte);
2399                 if (!pte_present(ptent)) {
2400                         ret = false;
2401                         page_vma_mapped_walk_done(&pvmw);
2402                         break;
2403                 }
2404
2405                 subpage = folio_page(folio,
2406                                 pte_pfn(ptent) - folio_pfn(folio));
2407                 address = pvmw.address;
2408
2409                 /* Nuke the page table entry. */
2410                 flush_cache_page(vma, address, pte_pfn(ptent));
2411                 pteval = ptep_clear_flush(vma, address, pvmw.pte);
2412
2413                 /* Set the dirty flag on the folio now the pte is gone. */
2414                 if (pte_dirty(pteval))
2415                         folio_mark_dirty(folio);
2416
2417                 /*
2418                  * Check that our target page is still mapped at the expected
2419                  * address.
2420                  */
2421                 if (args->mm == mm && args->address == address &&
2422                     pte_write(pteval))
2423                         args->valid = true;
2424
2425                 /*
2426                  * Store the pfn of the page in a special migration
2427                  * pte. do_swap_page() will wait until the migration
2428                  * pte is removed and then restart fault handling.
2429                  */
2430                 if (pte_write(pteval))
2431                         entry = make_writable_device_exclusive_entry(
2432                                                         page_to_pfn(subpage));
2433                 else
2434                         entry = make_readable_device_exclusive_entry(
2435                                                         page_to_pfn(subpage));
2436                 swp_pte = swp_entry_to_pte(entry);
2437                 if (pte_soft_dirty(pteval))
2438                         swp_pte = pte_swp_mksoft_dirty(swp_pte);
2439                 if (pte_uffd_wp(pteval))
2440                         swp_pte = pte_swp_mkuffd_wp(swp_pte);
2441
2442                 set_pte_at(mm, address, pvmw.pte, swp_pte);
2443
2444                 /*
2445                  * There is a reference on the page for the swap entry which has
2446                  * been removed, so shouldn't take another.
2447                  */
2448                 folio_remove_rmap_pte(folio, subpage, vma);
2449         }
2450
2451         mmu_notifier_invalidate_range_end(&range);
2452
2453         return ret;
2454 }
2455
2456 /**
2457  * folio_make_device_exclusive - Mark the folio exclusively owned by a device.
2458  * @folio: The folio to replace page table entries for.
2459  * @mm: The mm_struct where the folio is expected to be mapped.
2460  * @address: Address where the folio is expected to be mapped.
2461  * @owner: passed to MMU_NOTIFY_EXCLUSIVE range notifier callbacks
2462  *
2463  * Tries to remove all the page table entries which are mapping this
2464  * folio and replace them with special device exclusive swap entries to
2465  * grant a device exclusive access to the folio.
2466  *
2467  * Context: Caller must hold the folio lock.
2468  * Return: false if the page is still mapped, or if it could not be unmapped
2469  * from the expected address. Otherwise returns true (success).
2470  */
2471 static bool folio_make_device_exclusive(struct folio *folio,
2472                 struct mm_struct *mm, unsigned long address, void *owner)
2473 {
2474         struct make_exclusive_args args = {
2475                 .mm = mm,
2476                 .address = address,
2477                 .owner = owner,
2478                 .valid = false,
2479         };
2480         struct rmap_walk_control rwc = {
2481                 .rmap_one = page_make_device_exclusive_one,
2482                 .done = folio_not_mapped,
2483                 .anon_lock = folio_lock_anon_vma_read,
2484                 .arg = &args,
2485         };
2486
2487         /*
2488          * Restrict to anonymous folios for now to avoid potential writeback
2489          * issues.
2490          */
2491         if (!folio_test_anon(folio))
2492                 return false;
2493
2494         rmap_walk(folio, &rwc);
2495
2496         return args.valid && !folio_mapcount(folio);
2497 }
2498
2499 /**
2500  * make_device_exclusive_range() - Mark a range for exclusive use by a device
2501  * @mm: mm_struct of associated target process
2502  * @start: start of the region to mark for exclusive device access
2503  * @end: end address of region
2504  * @pages: returns the pages which were successfully marked for exclusive access
2505  * @owner: passed to MMU_NOTIFY_EXCLUSIVE range notifier to allow filtering
2506  *
2507  * Returns: number of pages found in the range by GUP. A page is marked for
2508  * exclusive access only if the page pointer is non-NULL.
2509  *
2510  * This function finds ptes mapping page(s) to the given address range, locks
2511  * them and replaces mappings with special swap entries preventing userspace CPU
2512  * access. On fault these entries are replaced with the original mapping after
2513  * calling MMU notifiers.
2514  *
2515  * A driver using this to program access from a device must use a mmu notifier
2516  * critical section to hold a device specific lock during programming. Once
2517  * programming is complete it should drop the page lock and reference after
2518  * which point CPU access to the page will revoke the exclusive access.
2519  */
2520 int make_device_exclusive_range(struct mm_struct *mm, unsigned long start,
2521                                 unsigned long end, struct page **pages,
2522                                 void *owner)
2523 {
2524         long npages = (end - start) >> PAGE_SHIFT;
2525         long i;
2526
2527         npages = get_user_pages_remote(mm, start, npages,
2528                                        FOLL_GET | FOLL_WRITE | FOLL_SPLIT_PMD,
2529                                        pages, NULL);
2530         if (npages < 0)
2531                 return npages;
2532
2533         for (i = 0; i < npages; i++, start += PAGE_SIZE) {
2534                 struct folio *folio = page_folio(pages[i]);
2535                 if (PageTail(pages[i]) || !folio_trylock(folio)) {
2536                         folio_put(folio);
2537                         pages[i] = NULL;
2538                         continue;
2539                 }
2540
2541                 if (!folio_make_device_exclusive(folio, mm, start, owner)) {
2542                         folio_unlock(folio);
2543                         folio_put(folio);
2544                         pages[i] = NULL;
2545                 }
2546         }
2547
2548         return npages;
2549 }
2550 EXPORT_SYMBOL_GPL(make_device_exclusive_range);
2551 #endif
2552
2553 void __put_anon_vma(struct anon_vma *anon_vma)
2554 {
2555         struct anon_vma *root = anon_vma->root;
2556
2557         anon_vma_free(anon_vma);
2558         if (root != anon_vma && atomic_dec_and_test(&root->refcount))
2559                 anon_vma_free(root);
2560 }
2561
2562 static struct anon_vma *rmap_walk_anon_lock(struct folio *folio,
2563                                             struct rmap_walk_control *rwc)
2564 {
2565         struct anon_vma *anon_vma;
2566
2567         if (rwc->anon_lock)
2568                 return rwc->anon_lock(folio, rwc);
2569
2570         /*
2571          * Note: remove_migration_ptes() cannot use folio_lock_anon_vma_read()
2572          * because that depends on page_mapped(); but not all its usages
2573          * are holding mmap_lock. Users without mmap_lock are required to
2574          * take a reference count to prevent the anon_vma disappearing
2575          */
2576         anon_vma = folio_anon_vma(folio);
2577         if (!anon_vma)
2578                 return NULL;
2579
2580         if (anon_vma_trylock_read(anon_vma))
2581                 goto out;
2582
2583         if (rwc->try_lock) {
2584                 anon_vma = NULL;
2585                 rwc->contended = true;
2586                 goto out;
2587         }
2588
2589         anon_vma_lock_read(anon_vma);
2590 out:
2591         return anon_vma;
2592 }
2593
2594 /*
2595  * rmap_walk_anon - do something to anonymous page using the object-based
2596  * rmap method
2597  * @folio: the folio to be handled
2598  * @rwc: control variable according to each walk type
2599  * @locked: caller holds relevant rmap lock
2600  *
2601  * Find all the mappings of a folio using the mapping pointer and the vma
2602  * chains contained in the anon_vma struct it points to.
2603  */
2604 static void rmap_walk_anon(struct folio *folio,
2605                 struct rmap_walk_control *rwc, bool locked)
2606 {
2607         struct anon_vma *anon_vma;
2608         pgoff_t pgoff_start, pgoff_end;
2609         struct anon_vma_chain *avc;
2610
2611         if (locked) {
2612                 anon_vma = folio_anon_vma(folio);
2613                 /* anon_vma disappear under us? */
2614                 VM_BUG_ON_FOLIO(!anon_vma, folio);
2615         } else {
2616                 anon_vma = rmap_walk_anon_lock(folio, rwc);
2617         }
2618         if (!anon_vma)
2619                 return;
2620
2621         pgoff_start = folio_pgoff(folio);
2622         pgoff_end = pgoff_start + folio_nr_pages(folio) - 1;
2623         anon_vma_interval_tree_foreach(avc, &anon_vma->rb_root,
2624                         pgoff_start, pgoff_end) {
2625                 struct vm_area_struct *vma = avc->vma;
2626                 unsigned long address = vma_address(vma, pgoff_start,
2627                                 folio_nr_pages(folio));
2628
2629                 VM_BUG_ON_VMA(address == -EFAULT, vma);
2630                 cond_resched();
2631
2632                 if (rwc->invalid_vma && rwc->invalid_vma(vma, rwc->arg))
2633                         continue;
2634
2635                 if (!rwc->rmap_one(folio, vma, address, rwc->arg))
2636                         break;
2637                 if (rwc->done && rwc->done(folio))
2638                         break;
2639         }
2640
2641         if (!locked)
2642                 anon_vma_unlock_read(anon_vma);
2643 }
2644
2645 /*
2646  * rmap_walk_file - do something to file page using the object-based rmap method
2647  * @folio: the folio to be handled
2648  * @rwc: control variable according to each walk type
2649  * @locked: caller holds relevant rmap lock
2650  *
2651  * Find all the mappings of a folio using the mapping pointer and the vma chains
2652  * contained in the address_space struct it points to.
2653  */
2654 static void rmap_walk_file(struct folio *folio,
2655                 struct rmap_walk_control *rwc, bool locked)
2656 {
2657         struct address_space *mapping = folio_mapping(folio);
2658         pgoff_t pgoff_start, pgoff_end;
2659         struct vm_area_struct *vma;
2660
2661         /*
2662          * The page lock not only makes sure that page->mapping cannot
2663          * suddenly be NULLified by truncation, it makes sure that the
2664          * structure at mapping cannot be freed and reused yet,
2665          * so we can safely take mapping->i_mmap_rwsem.
2666          */
2667         VM_BUG_ON_FOLIO(!folio_test_locked(folio), folio);
2668
2669         if (!mapping)
2670                 return;
2671
2672         pgoff_start = folio_pgoff(folio);
2673         pgoff_end = pgoff_start + folio_nr_pages(folio) - 1;
2674         if (!locked) {
2675                 if (i_mmap_trylock_read(mapping))
2676                         goto lookup;
2677
2678                 if (rwc->try_lock) {
2679                         rwc->contended = true;
2680                         return;
2681                 }
2682
2683                 i_mmap_lock_read(mapping);
2684         }
2685 lookup:
2686         vma_interval_tree_foreach(vma, &mapping->i_mmap,
2687                         pgoff_start, pgoff_end) {
2688                 unsigned long address = vma_address(vma, pgoff_start,
2689                                folio_nr_pages(folio));
2690
2691                 VM_BUG_ON_VMA(address == -EFAULT, vma);
2692                 cond_resched();
2693
2694                 if (rwc->invalid_vma && rwc->invalid_vma(vma, rwc->arg))
2695                         continue;
2696
2697                 if (!rwc->rmap_one(folio, vma, address, rwc->arg))
2698                         goto done;
2699                 if (rwc->done && rwc->done(folio))
2700                         goto done;
2701         }
2702
2703 done:
2704         if (!locked)
2705                 i_mmap_unlock_read(mapping);
2706 }
2707
2708 void rmap_walk(struct folio *folio, struct rmap_walk_control *rwc)
2709 {
2710         if (unlikely(folio_test_ksm(folio)))
2711                 rmap_walk_ksm(folio, rwc);
2712         else if (folio_test_anon(folio))
2713                 rmap_walk_anon(folio, rwc, false);
2714         else
2715                 rmap_walk_file(folio, rwc, false);
2716 }
2717
2718 /* Like rmap_walk, but caller holds relevant rmap lock */
2719 void rmap_walk_locked(struct folio *folio, struct rmap_walk_control *rwc)
2720 {
2721         /* no ksm support for now */
2722         VM_BUG_ON_FOLIO(folio_test_ksm(folio), folio);
2723         if (folio_test_anon(folio))
2724                 rmap_walk_anon(folio, rwc, true);
2725         else
2726                 rmap_walk_file(folio, rwc, true);
2727 }
2728
2729 #ifdef CONFIG_HUGETLB_PAGE
2730 /*
2731  * The following two functions are for anonymous (private mapped) hugepages.
2732  * Unlike common anonymous pages, anonymous hugepages have no accounting code
2733  * and no lru code, because we handle hugepages differently from common pages.
2734  */
2735 void hugetlb_add_anon_rmap(struct folio *folio, struct vm_area_struct *vma,
2736                 unsigned long address, rmap_t flags)
2737 {
2738         VM_WARN_ON_FOLIO(!folio_test_hugetlb(folio), folio);
2739         VM_WARN_ON_FOLIO(!folio_test_anon(folio), folio);
2740
2741         atomic_inc(&folio->_entire_mapcount);
2742         atomic_inc(&folio->_large_mapcount);
2743         if (flags & RMAP_EXCLUSIVE)
2744                 SetPageAnonExclusive(&folio->page);
2745         VM_WARN_ON_FOLIO(folio_entire_mapcount(folio) > 1 &&
2746                          PageAnonExclusive(&folio->page), folio);
2747 }
2748
2749 void hugetlb_add_new_anon_rmap(struct folio *folio,
2750                 struct vm_area_struct *vma, unsigned long address)
2751 {
2752         VM_WARN_ON_FOLIO(!folio_test_hugetlb(folio), folio);
2753
2754         BUG_ON(address < vma->vm_start || address >= vma->vm_end);
2755         /* increment count (starts at -1) */
2756         atomic_set(&folio->_entire_mapcount, 0);
2757         atomic_set(&folio->_large_mapcount, 0);
2758         folio_clear_hugetlb_restore_reserve(folio);
2759         __folio_set_anon(folio, vma, address, true);
2760         SetPageAnonExclusive(&folio->page);
2761 }
2762 #endif /* CONFIG_HUGETLB_PAGE */
This page took 0.183385 seconds and 4 git commands to generate.