| From: Peter Xu <peterx@redhat.com> |
| Subject: mm: document pXd_leaf() API |
| Date: Mon, 18 Mar 2024 16:04:04 -0400 |
| |
| There's one small section already, but since we're going to remove |
| pXd_huge(), that comment may start to obsolete. |
| |
| Rewrite that section with more information, hopefully with that the API is |
| crystal clear on what it implies. |
| |
| Link: https://lkml.kernel.org/r/20240318200404.448346-15-peterx@redhat.com |
| Signed-off-by: Peter Xu <peterx@redhat.com> |
| Reviewed-by: Jason Gunthorpe <jgg@nvidia.com> |
| Cc: Alistair Popple <apopple@nvidia.com> |
| Cc: Andreas Larsson <andreas@gaisler.com> |
| Cc: "Aneesh Kumar K.V" <aneesh.kumar@kernel.org> |
| Cc: Arnd Bergmann <arnd@arndb.de> |
| Cc: Bjorn Andersson <andersson@kernel.org> |
| Cc: Borislav Petkov <bp@alien8.de> |
| Cc: Catalin Marinas <catalin.marinas@arm.com> |
| Cc: Christophe Leroy <christophe.leroy@csgroup.eu> |
| Cc: Dave Hansen <dave.hansen@linux.intel.com> |
| Cc: David S. Miller <davem@davemloft.net> |
| Cc: Fabio Estevam <festevam@denx.de> |
| Cc: Ingo Molnar <mingo@redhat.com> |
| Cc: Konrad Dybcio <konrad.dybcio@linaro.org> |
| Cc: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> |
| Cc: Lucas Stach <l.stach@pengutronix.de> |
| Cc: Mark Salter <msalter@redhat.com> |
| Cc: "Matthew Wilcox (Oracle)" <willy@infradead.org> |
| Cc: Michael Ellerman <mpe@ellerman.id.au> |
| Cc: Mike Rapoport (IBM) <rppt@kernel.org> |
| Cc: Muchun Song <muchun.song@linux.dev> |
| Cc: Naoya Horiguchi <nao.horiguchi@gmail.com> |
| Cc: "Naveen N. Rao" <naveen.n.rao@linux.ibm.com> |
| Cc: Nicholas Piggin <npiggin@gmail.com> |
| Cc: Russell King <linux@armlinux.org.uk> |
| Cc: Shawn Guo <shawnguo@kernel.org> |
| Cc: Thomas Gleixner <tglx@linutronix.de> |
| Cc: Will Deacon <will@kernel.org> |
| Signed-off-by: Andrew Morton <akpm@linux-foundation.org> |
| --- |
| |
| include/linux/pgtable.h | 24 +++++++++++++++++++----- |
| 1 file changed, 19 insertions(+), 5 deletions(-) |
| |
| --- a/include/linux/pgtable.h~mm-document-pxd_leaf-api |
| +++ a/include/linux/pgtable.h |
| @@ -1768,11 +1768,25 @@ typedef unsigned int pgtbl_mod_mask; |
| #endif |
| |
| /* |
| - * p?d_leaf() - true if this entry is a final mapping to a physical address. |
| - * This differs from p?d_huge() by the fact that they are always available (if |
| - * the architecture supports large pages at the appropriate level) even |
| - * if CONFIG_HUGETLB_PAGE is not defined. |
| - * Only meaningful when called on a valid entry. |
| + * pXd_leaf() is the API to check whether a pgtable entry is a huge page |
| + * mapping. It should work globally across all archs, without any |
| + * dependency on CONFIG_* options. For architectures that do not support |
| + * huge mappings on specific levels, below fallbacks will be used. |
| + * |
| + * A leaf pgtable entry should always imply the following: |
| + * |
| + * - It is a "present" entry. IOW, before using this API, please check it |
| + * with pXd_present() first. NOTE: it may not always mean the "present |
| + * bit" is set. For example, PROT_NONE entries are always "present". |
| + * |
| + * - It should _never_ be a swap entry of any type. Above "present" check |
| + * should have guarded this, but let's be crystal clear on this. |
| + * |
| + * - It should contain a huge PFN, which points to a huge page larger than |
| + * PAGE_SIZE of the platform. The PFN format isn't important here. |
| + * |
| + * - It should cover all kinds of huge mappings (e.g., pXd_trans_huge(), |
| + * pXd_devmap(), or hugetlb mappings). |
| */ |
| #ifndef pgd_leaf |
| #define pgd_leaf(x) false |
| _ |