mirror of
https://github.com/torvalds/linux.git
synced 2026-11-06 21:58:01 +01:00
mm: use a folio in the softleaf_is_device_private path
Use the folio APIs in the device_private migration path of do_swap_page(), replacing four calls to compound_head() with two page_folio() calls. The second one re-fetches the folio from vmf->page after migrate_to_ram(), which might have split the folio. Link: https://lore.kernel.org/20260819095144.45660-1-hongfu.li@linux.dev Signed-off-by: Hongfu Li <lihongfu@kylinos.cn> Signed-off-by: Andrew Morton <akpm@linux-foundation.org> Suggested-by: David Hildenbrand (Arm) <david@kernel.org> Link: https://lore.kernel.org/all/e20678ed-3fa1-4677-a1d7-e2af481e8302@kernel.org/ Acked-by: David Hildenbrand (Arm) <david@kernel.org> Reviewed-by: Lorenzo Stoakes (ARM) <ljs@kernel.org> Reviewed-by: Anshuman Khandual <anshuman.khandual@arm.com> Cc: Liam R. Howlett <liam@infradead.org> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Rapoport <rppt@kernel.org> Cc: Suren Baghdasaryan <surenb@google.com> Cc: Vlastimil Babka <vbabka@kernel.org>
This commit is contained in:
parent
ff47652a4b
commit
5121682509
15
mm/memory.c
15
mm/memory.c
|
|
@ -4926,18 +4926,21 @@ vm_fault_t do_swap_page(struct vm_fault *vmf)
|
|||
goto unlock;
|
||||
|
||||
/*
|
||||
* Get a page reference while we know the page can't be
|
||||
* freed.
|
||||
* Get a folio reference while we know the folio can't
|
||||
* be freed.
|
||||
*/
|
||||
if (trylock_page(vmf->page)) {
|
||||
folio = page_folio(vmf->page);
|
||||
if (folio_trylock(folio)) {
|
||||
struct dev_pagemap *pgmap;
|
||||
|
||||
get_page(vmf->page);
|
||||
folio_get(folio);
|
||||
pte_unmap_unlock(vmf->pte, vmf->ptl);
|
||||
pgmap = page_pgmap(vmf->page);
|
||||
ret = pgmap->ops->migrate_to_ram(vmf);
|
||||
unlock_page(vmf->page);
|
||||
put_page(vmf->page);
|
||||
/* migrate_to_ram() might have split the folio. */
|
||||
folio = page_folio(vmf->page);
|
||||
folio_unlock(folio);
|
||||
folio_put(folio);
|
||||
} else {
|
||||
pte_unmap(vmf->pte);
|
||||
softleaf_entry_wait_on_locked(entry, vmf->ptl);
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user