Anshuman Khandual <anshuman.khand...@arm.com> writes: > On 5/17/21 11:25 AM, Aneesh Kumar K.V wrote: >> On 5/17/21 11:17 AM, Christophe Leroy wrote: >>> +aneesh >>> +linuxppc-dev list >>> >>> Le 17/05/2021 à 07:44, Anshuman Khandual a écrit : >>>> Hello Christophe, >>>> >>>> DEBUG_VM_PGTABLE has now been re-enabled on powerpc recently ? was not >>>> aware about this. From the error log, it failed explicitly on 4K page >>>> size hash config. >>>> >>>> static inline pmd_t hash__pmd_mkhuge(pmd_t pmd) >>>> { >>>> BUG(); ------> Failed >>>> return pmd; >>>> } >>>> >>>> static inline pmd_t __pmd_mkhuge(pmd_t pmd) >>>> { >>>> if (radix_enabled()) >>>> return radix__pmd_mkhuge(pmd); >>>> return hash__pmd_mkhuge(pmd); >>>> } >>>> >>>> pmd_t pfn_pmd(unsigned long pfn, pgprot_t pgprot) >>>> { >>>> unsigned long pmdv; >>>> >>>> pmdv = (pfn << PAGE_SHIFT) & PTE_RPN_MASK; >>>> >>>> return __pmd_mkhuge(pmd_set_protbits(__pmd(pmdv), pgprot)); >>>> } >>>> >>>> It seems like on powerpc, where pfn_pmd() makes a huge page but which >>>> is not supported on 4K hash config thus triggering the BUG(). But all >>>> pfn_pmd() call sites inside the debug_vm_pgtable() test are protected >>>> with CONFIG_TRANSPARENT_HUGEPAGE. IIUC unlike powerpc, pfn_pmd() does >>>> not directly make a huge page on other platforms. >>>> >>>> Looking at arch/powerpc/include/asm/book3s/64/hash-4k.h, all relevant >>>> THP helpers has BUG() or 0 which indicates THP might not be supported >>>> on 4K page size hash config ? >>>> >>>> But looking at arch/powerpc/platforms/Kconfig.cputype, it seems like >>>> HAVE_ARCH_TRANSPARENT_HUGEPAGE is invariably selected on PPC_BOOK3S_64 >>>> platforms which I assume includes 4K page size hash config as well. >>>> >>>> Is THP some how getting enabled on this 4K page size hash config where >>>> it should not be (thus triggering the BUG) ? OR am I missing something >>>> here. >>>> >>> >> >> We should put those pfn_pmd() and pfn_pud() after >> >> if (!has_transparent_hugepage()) >> return; > > The following patch has been lightly tested on arm64 and x86 platforms. > Could you please verify if this solves the problem on powerpc 4K hash > config ? Thank you.
Tested the patch with the below additional change. modified mm/debug_vm_pgtable.c @@ -186,12 +186,13 @@ static void __init pmd_advanced_tests(struct mm_struct *mm, unsigned long pfn, unsigned long vaddr, pgprot_t prot, pgtable_t pgtable) { - pmd_t pmd = pfn_pmd(pfn, prot); + pmd_t pmd; if (!has_transparent_hugepage()) return; pr_debug("Validating PMD advanced\n"); + pmd = pfn_pmd(pfn, prot); /* Align the address wrt HPAGE_PMD_SIZE */ vaddr = (vaddr & HPAGE_PMD_MASK) + HPAGE_PMD_SIZE; @@ -334,12 +335,13 @@ static void __init pud_advanced_tests(struct mm_struct *mm, unsigned long pfn, unsigned long vaddr, pgprot_t prot) { - pud_t pud = pfn_pud(pfn, prot); + pud_t pud; if (!has_transparent_hugepage()) return; pr_debug("Validating PUD advanced\n"); + pud = pfn_pud(pfn, prot); /* Align the address wrt HPAGE_PUD_SIZE */ vaddr = (vaddr & HPAGE_PUD_MASK) + HPAGE_PUD_SIZE; -aneesh