mm: add softleaf_is_valid_pmd_entry(), pmd_to_softleaf_folio()
Separate pmd_is_valid_softleaf() into separate components, then use the pmd_is_valid_softleaf() predicate to implement pmd_to_softleaf_folio(). This returns the folio associated with a softleaf entry at PMD level. It expects this to be valid for a PMD entry. If CONFIG_DEBUG_VM is set, then assert on this being an invalid entry, and either way return NULL in this case. This lays the ground for further refactorings. Link: https://lkml.kernel.org/r/b677592596274fa3fd701890497948e4b0e07cec.1774029655.git.ljs@kernel.org Signed-off-by: Lorenzo Stoakes (Oracle) <ljs@kernel.org> Reviewed-by: Suren Baghdasaryan <surenb@google.com> Cc: Baolin Wang <baolin.wang@linux.alibaba.com> Cc: Barry Song <baohua@kernel.org> Cc: David Hildenbrand <david@kernel.org> Cc: Dev Jain <dev.jain@arm.com> Cc: Lance Yang <lance.yang@linux.dev> Cc: Liam Howlett <liam.howlett@oracle.com> Cc: Michal Hocko <mhocko@suse.com> Cc: Mike Rapoport <rppt@kernel.org> Cc: Nico Pache <npache@redhat.com> Cc: Qi Zheng <zhengqi.arch@bytedance.com> Cc: Ryan Roberts <ryan.roberts@arm.com> Cc: Zi Yan <ziy@nvidia.com> Signed-off-by: Andrew Morton <akpm@linux-foundation.org>master
parent
f87854c909
commit
64b7d889d0
|
|
@ -607,7 +607,20 @@ static inline bool pmd_is_migration_entry(pmd_t pmd)
|
|||
}
|
||||
|
||||
/**
|
||||
* pmd_is_valid_softleaf() - Is this PMD entry a valid leaf entry?
|
||||
* softleaf_is_valid_pmd_entry() - Is the specified softleaf entry obtained from
|
||||
* a PMD one that we support at PMD level?
|
||||
* @entry: Entry to check.
|
||||
* Returns: true if the softleaf entry is valid at PMD, otherwise false.
|
||||
*/
|
||||
static inline bool softleaf_is_valid_pmd_entry(softleaf_t entry)
|
||||
{
|
||||
/* Only device private, migration entries valid for PMD. */
|
||||
return softleaf_is_device_private(entry) ||
|
||||
softleaf_is_migration(entry);
|
||||
}
|
||||
|
||||
/**
|
||||
* pmd_is_valid_softleaf() - Is this PMD entry a valid softleaf entry?
|
||||
* @pmd: PMD entry.
|
||||
*
|
||||
* PMD leaf entries are valid only if they are device private or migration
|
||||
|
|
@ -620,9 +633,27 @@ static inline bool pmd_is_valid_softleaf(pmd_t pmd)
|
|||
{
|
||||
const softleaf_t entry = softleaf_from_pmd(pmd);
|
||||
|
||||
/* Only device private, migration entries valid for PMD. */
|
||||
return softleaf_is_device_private(entry) ||
|
||||
softleaf_is_migration(entry);
|
||||
return softleaf_is_valid_pmd_entry(entry);
|
||||
}
|
||||
|
||||
/**
|
||||
* pmd_to_softleaf_folio() - Convert the PMD entry to a folio.
|
||||
* @pmd: PMD entry.
|
||||
*
|
||||
* The PMD entry is expected to be a valid PMD softleaf entry.
|
||||
*
|
||||
* Returns: the folio the softleaf entry references if this is a valid softleaf
|
||||
* entry, otherwise NULL.
|
||||
*/
|
||||
static inline struct folio *pmd_to_softleaf_folio(pmd_t pmd)
|
||||
{
|
||||
const softleaf_t entry = softleaf_from_pmd(pmd);
|
||||
|
||||
if (!softleaf_is_valid_pmd_entry(entry)) {
|
||||
VM_WARN_ON_ONCE(true);
|
||||
return NULL;
|
||||
}
|
||||
return softleaf_to_folio(entry);
|
||||
}
|
||||
|
||||
#endif /* CONFIG_MMU */
|
||||
|
|
|
|||
Loading…
Reference in New Issue