Re: [PATCH v3 15/16] mm: eliminate further swapops predicates
From: Vlastimil Babka
Date: Thu Nov 27 2025 - 12:42:51 EST
On 11/10/25 23:21, Lorenzo Stoakes wrote:
> Having converted so much of the code base to software leaf entries, we can
> mop up some remaining cases.
>
> We replace is_pfn_swap_entry(), pfn_swap_entry_to_page(),
> is_writable_device_private_entry(), is_device_exclusive_entry(),
> is_migration_entry(), is_writable_migration_entry(),
> is_readable_migration_entry(), swp_offset_pfn() and pfn_swap_entry_folio()
> with softleaf equivalents.
>
> No functional change intended.
>
> Signed-off-by: Lorenzo Stoakes <lorenzo.stoakes@xxxxxxxxxx>
Reviewed-by: Vlastimil Babka <vbabka@xxxxxxx>
Two completely non-urgent nits below.
> ---
> 16 files changed, 75 insertions(+), 176 deletions(-)
Nice.
> index f5ea9b0385ff..d282fab866a1 100644
> --- a/include/linux/leafops.h
> +++ b/include/linux/leafops.h
> @@ -355,7 +355,7 @@ static inline unsigned long softleaf_to_pfn(softleaf_t entry)
> VM_WARN_ON_ONCE(!softleaf_has_pfn(entry));
>
> /* Temporary until swp_entry_t eliminated. */
> - return swp_offset_pfn(entry);
> + return swp_offset(entry) & SWP_PFN_MASK;
> }
>
> /**
> @@ -366,10 +366,16 @@ static inline unsigned long softleaf_to_pfn(softleaf_t entry)
> */
> static inline struct page *softleaf_to_page(softleaf_t entry)
> {
> + struct page *page = pfn_to_page(softleaf_to_pfn(entry));
> +
> VM_WARN_ON_ONCE(!softleaf_has_pfn(entry));
Nit: the warning is already in softleaf_to_pfn()
> + /*
> + * Any use of migration entries may only occur while the
> + * corresponding page is locked
> + */
> + VM_WARN_ON_ONCE(softleaf_is_migration(entry) && !PageLocked(page));
>
> - /* Temporary until swp_entry_t eliminated. */
> - return pfn_swap_entry_to_page(entry);
> + return page;
> }
>
> /**
> @@ -380,10 +386,17 @@ static inline struct page *softleaf_to_page(softleaf_t entry)
> */
> static inline struct folio *softleaf_to_folio(softleaf_t entry)
> {
> - VM_WARN_ON_ONCE(!softleaf_has_pfn(entry));
> + struct folio *folio = pfn_folio(softleaf_to_pfn(entry));
>
> - /* Temporary until swp_entry_t eliminated. */
> - return pfn_swap_entry_folio(entry);
> + VM_WARN_ON_ONCE(!softleaf_has_pfn(entry));
Ditto.
> + /*
> + * Any use of migration entries may only occur while the
> + * corresponding folio is locked.
> + */
> + VM_WARN_ON_ONCE(softleaf_is_migration(entry) &&
> + !folio_test_locked(folio));
> +
> + return folio;
> }
>
> /**