From: Zi Yan <ziy@xxxxxxxxxx> User can access the PUD THP size via `cat /sys/kernel/mm/transparent_hugepage/hpage_pud_size`. This is similar to make PMD THP size public. Signed-off-by: Zi Yan <ziy@xxxxxxxxxx> --- Documentation/admin-guide/mm/transhuge.rst | 1 + mm/huge_memory.c | 13 +++++++++++++ 2 files changed, 14 insertions(+) diff --git a/Documentation/admin-guide/mm/transhuge.rst b/Documentation/admin-guide/mm/transhuge.rst index b2acd0d395ca..11b173c2650e 100644 --- a/Documentation/admin-guide/mm/transhuge.rst +++ b/Documentation/admin-guide/mm/transhuge.rst @@ -159,6 +159,7 @@ Some userspace (such as a test program, or an optimized memory allocation library) may want to know the size (in bytes) of a transparent hugepage:: cat /sys/kernel/mm/transparent_hugepage/hpage_pmd_size + cat /sys/kernel/mm/transparent_hugepage/hpage_pud_size khugepaged will be automatically started when transparent_hugepage/enabled is set to "always" or "madvise, and it'll diff --git a/mm/huge_memory.c b/mm/huge_memory.c index 1965753b31a2..20ecffc27396 100644 --- a/mm/huge_memory.c +++ b/mm/huge_memory.c @@ -340,12 +340,25 @@ static ssize_t hpage_pmd_size_show(struct kobject *kobj, static struct kobj_attribute hpage_pmd_size_attr = __ATTR_RO(hpage_pmd_size); +#ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD +static ssize_t hpage_pud_size_show(struct kobject *kobj, + struct kobj_attribute *attr, char *buf) +{ + return sprintf(buf, "%lu\n", HPAGE_PUD_SIZE); +} +static struct kobj_attribute hpage_pud_size_attr = + __ATTR_RO(hpage_pud_size); +#endif + static struct attribute *hugepage_attr[] = { &enabled_attr.attr, &enabled_pud_thp_attr.attr, &defrag_attr.attr, &use_zero_page_attr.attr, &hpage_pmd_size_attr.attr, +#ifdef CONFIG_HAVE_ARCH_TRANSPARENT_HUGEPAGE_PUD + &hpage_pud_size_attr.attr, +#endif #ifdef CONFIG_SHMEM &shmem_enabled_attr.attr, #endif -- 2.28.0