[PATCH V2] powerpc/mm/hugetlb: initialize the pagetable cache correctly for hugetlb
mpe at ellerman.id.au
Fri Mar 30 01:23:36 AEDT 2018
"Aneesh Kumar K.V" <aneesh.kumar at linux.vnet.ibm.com> writes:
> With 64k page size, we have hugetlb pte entries at the pmd and pud level for
> book3s64. We don't need to create a separate page table cache for that. With 4k
> we need to make sure hugepd page table cache for 16M is placed at PUD level
> and 16G at the PGD level.
> Simplify all these by not using HUGEPD_PD_SHIFT which is confusing for book3s64.
> Without this patch, with 64k page size we create pagetable caches with shift
> value 10 and 7 which are not used at all.
> Fixes:419df06eea5bfa81("powerpc: Reduce the PTE_INDEX_SIZE")
Fixes: 419df06eea5b ("powerpc: Reduce the PTE_INDEX_SIZE")
fixes = Fixes: %h (\"%s\")
> diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
> index 876da2bc1796..3b509b268030 100644
> --- a/arch/powerpc/mm/hugetlbpage.c
> +++ b/arch/powerpc/mm/hugetlbpage.c
> @@ -669,12 +666,24 @@ static int __init hugetlbpage_init(void)
> if (add_huge_page_size(1ULL << shift) < 0)
> +#ifdef CONFIG_PPC_BOOK3S_64
> + if (shift > PGDIR_SHIFT)
> + BUG();
Can we not add BUG()s for things that aren't utterly fatal.
In this case I think we could move this whole block above
add_huge_page_size() above, and then instead of BUG() we could just
WARN() and continue?
> + else if (shift > PUD_SHIFT)
> + pdshift = PGDIR_SHIFT;
> + else if (shift > PMD_SHIFT)
> + pdshift = PUD_SHIFT;
> + else
> + pdshift = PMD_SHIFT;
> if (shift < HUGEPD_PUD_SHIFT)
> pdshift = PMD_SHIFT;
> else if (shift < HUGEPD_PGD_SHIFT)
> pdshift = PUD_SHIFT;
> pdshift = PGDIR_SHIFT;
> * if we have pdshift and shift value same, we don't
> * use pgt cache for hugepd.
More information about the Linuxppc-dev