Re: [PATCH v6 02/12] mm: add PMD swap entry detection support

"David Hildenbrand (Arm)" <[email protected]>
Newsgroups org.kernel.vger.linux-kernel,org.kvack.linux-mm
Message-ID <[email protected]>
On 8/18/26 15:09, Usama Arif wrote:
> Currently when a PMD-mapped THP is swapped out, the PMD is always
> split into HPAGE_PMD_NR PTE-level swap entries. To preserve huge
> page information across swap cycles, later patches will install a
> single PMD-level swap entry instead. Add the infrastructure to detect
> those entries.
> 
> Teach the softleaf layer to recognise PMD swap entries:
> pmd_is_swap_entry() detects them and softleaf_is_valid_pmd_entry()
> accepts them as a valid non-present type. Because swap entries do not
> encode a PFN, make pmd_softleaf_to_folio() warn and return NULL for them
> instead of passing the swap offset to softleaf_to_folio(). Clear the
> exclusive overlay bit in softleaf_from_pmd() before decoding, matching
> how soft_dirty and uffd bits are already stripped.
> 
> Add pmd_swp_mkexclusive(), pmd_swp_exclusive(), and
> pmd_swp_clear_exclusive() helpers to each architecture that supports
> PMD softleaf entries (x86, arm64, s390, riscv, loongarch, powerpc),
> mirroring the existing PTE swap exclusive helpers in each arch's
> pgtable.h.

Ah, for migration entries we still use a dedicated migratetype. I actually have
on my todo list to move to PTE bits as well.

(likely the _swp_ part should then be renamed to indicate that this is for
softdirty entries, not just swap entries)

> Provide generic no-op PMD swap exclusive fallbacks for
> architectures without PMD softleaf support, matching the generic PMD
> swap soft-dirty fallbacks.

No softleaf implies to migration and no swap, so this would work.

You should extend mm/debug_vm_pgtable.c in a separate commit to test what
pte_swap_exclusive_tests() tests for PMDs.

> 
> Signed-off-by: Usama Arif <[email protected]>
> ---
>  arch/arm64/include/asm/pgtable.h             |  6 +++++
>  arch/loongarch/include/asm/pgtable.h         | 19 ++++++++++++++
>  arch/powerpc/include/asm/book3s/64/pgtable.h | 17 +++++++++++++
>  arch/riscv/include/asm/pgtable.h             | 15 +++++++++++
>  arch/s390/include/asm/pgtable.h              | 17 +++++++++++++
>  arch/x86/include/asm/pgtable.h               | 17 +++++++++++++

I'm sorry for asking you to compete with Kiryll's series by creating one patch
for each architecture that directly jumps at arch maintainers :)

[...]

>  #ifdef CONFIG_HAVE_ARCH_SOFT_DIRTY
>  static inline pte_t pte_swp_mksoft_dirty(pte_t pte)
>  {
> diff --git a/include/linux/leafops.h b/include/linux/leafops.h
> index 7c13c58a5e218..4a6c52974b305 100644
> --- a/include/linux/leafops.h
> +++ b/include/linux/leafops.h
> @@ -102,6 +102,8 @@ static inline softleaf_t softleaf_from_pmd(pmd_t pmd)
>  		pmd = pmd_swp_clear_soft_dirty(pmd);
>  	if (pmd_swp_uffd(pmd))
>  		pmd = pmd_swp_clear_uffd(pmd);
> +	if (pmd_swp_exclusive(pmd))
> +		pmd = pmd_swp_clear_exclusive(pmd);

Can't we just unconditionally clear these flags?

pmd = pmd_swp_clear_uffd(pmd);
pmd = pmd_swp_clear_exclusive(pmd);

Avoids these rather unnecessary conditionals unless I am missing something.


>  	arch_entry = __pmd_to_swp_entry(pmd);
>  
>  	/* Temporary until swp_entry_t eliminated. */
> @@ -634,18 +636,30 @@ static inline bool pmd_is_migration_entry(pmd_t pmd)
>   */
>  static inline bool softleaf_is_valid_pmd_entry(softleaf_t entry)
>  {
> -	/* Only device private, migration entries valid for PMD. */
> +	/* Device private, migration, and swap entries valid for PMD. */

Can we just drop that comment? I mean, it's as clear as it gets in the code
immediately below :)

>  	return softleaf_is_device_private(entry) ||
> -		softleaf_is_migration(entry);
> +		softleaf_is_migration(entry) ||
> +		softleaf_is_swap(entry);
> +}
> +

-- 
Cheers,

David
lmpx.com only provides a reader for public news (NNTP) servers. It is not affiliated with the servers or forums shown here and is not responsible for the content of articles, which is written by their respective authors.