Subject: Re: [PATCH 1/6] powerpc: port 64 bits pgtable_cache to 32 bits

From: "Aneesh Kumar K.V" <[email-masked]>
Date: Mon, 15 Aug 2016 15:53:03 +0530

christophe leroy <[email-masked]> writes:

> Le 14/08/2016 à 16:17, Aneesh Kumar K.V a écrit :
>> Christophe Leroy <[email-masked]> writes:
>>
>>> Today powerpc64 uses a set of pgtable_caches while powerpc32 uses
>>> standard pages when using 4k pages and a single pgtable_cache
>>> if using other size pages. In addition powerpc32 uses another cache
>>> when handling huge pages.
>>>
>>> In preparation of implementing huge pages on the 8xx, this patch
>>> replaces the specific powerpc32 handling by the 64 bits approach.
>>
>> Why is this needed ? Can you also summarize the page size used and the
>> hugepage format you are planning to use ? . What are the page sizes
>> supported by 8xx ? Also is the new code copy of existing powerpc64 4k
>> page size code ?
>
> 8xx supports two huge page sizes: 8M and 512k.
> As PGD entries points on 4M page tables, it means we are in an 
> eterogenous situation:
> 1/ when using 8M huge pages, we are in the same situation as what is 
> done for the BOOK3S (which supports 16M, 256M and 1G), that is several 
> PDG entries pointing to a single PTE entry.

what is done for FSL BOOK3E ?

> 2/ when using 512k huge pages, we are in the same situation as whan is 
> done for the BOOK3E: a PGD entry points to the hugepage table that 
> handles several huge pages (in our case 8 huge pages)
>

what is done for Book3s with 4K linux page size. ?

So the idea here is to allocate different hugepte table based on
hugepage size requested and hence the need to switch from hugpte-cache
to a more generic PGT_CACHE ?

> The code from init_64 have been moved to a new file named init-common in 
> order to be used by init_32 too.
> The code from the 64 bits .h has been copied into the 32 bits .h (indeed 
> it's been copied twice as the .h are now duplicated into nohash and 
> book3s versions)

That explanation made it a lot easy to follow the patch. Can we capture
that in commit message too. Also Do we support hugepage with both 4k and
16K linux page size ?. I guess we do because 8xx only do a two level
linux page table ? 

>
> [...]
>
>>> diff --git a/arch/powerpc/mm/hugetlbpage.c b/arch/powerpc/mm/hugetlbpage.c
>>> index 7372ee1..9164a77 100644
>>> --- a/arch/powerpc/mm/hugetlbpage.c
>>> +++ b/arch/powerpc/mm/hugetlbpage.c
>>> @@ -68,7 +68,7 @@ static int __hugepte_alloc(struct mm_struct *mm, hugepd_t *hpdp,
>>>  #ifdef CONFIG_PPC_FSL_BOOK3E
>>>  	int i;
>>>  	int num_hugepd = 1 << (pshift - pdshift);
>>> -	cachep = hugepte_cache;
>>> +	cachep = PGT_CACHE(1);
>>>  #else
>>>  	cachep = PGT_CACHE(pdshift - pshift);
>>>  #endif
>>
>> Can you explain the usage of PGT_CACHE(1) ?
>
> [...]
>
>>
>> I still didn't quiet follow why we are replacing
>>
>>  -	hugepte_cache =  kmem_cache_create("hugepte-cache", sizeof(pte_t),
>>  -					   HUGEPD_SHIFT_MASK + 1, 0, NULL);
>>  +	pgtable_cache_add(1, NULL);
>>
>
> Euh ... Indeed I wanted something to replace hugepte_cache. But it looks 
> like it should be something like PGT_CACHE(0) for 32 bits targets having 
> 32 bits PTEs and PGT_CACHE(1) for 32 bits targets having 64 bits PTEs. 
> But PGT_CACHE(0) doesn't exist (yet).
>
> Looking once more, that might not really be needed I think. I'll rework 
> it and see what I can achieve.
>

Thanks
-aneesh