[PATCH v2 14/16] powerpc/book3s64/vmemmap: Switch radix to use a different vmemmap handling function

Aneesh Kumar K V aneesh.kumar at linux.ibm.com
Wed Jun 28 13:37:36 AEST 2023


On 6/28/23 7:03 AM, Ritesh Harjani (IBM) wrote:
> "Aneesh Kumar K.V" <aneesh.kumar at linux.ibm.com> writes:

....

>> +int __meminit vmemmap_check_pmd(pmd_t *pmd, int node,
>> +				unsigned long addr, unsigned long next)
>> +{
>> +	int large = pmd_large(*pmd);
>> +
>> +	if (pmd_large(*pmd))
> 
> we already got the value of pmd_large into "large" variable.
> we can use just if (large) right?
> 
>> +		vmemmap_verify((pte_t *)pmd, node, addr, next);
> 
> maybe we can use pmdp_ptep() function here which we used in the 1st patch?
> also shouldn't this be pmdp in the function argument instead of pmd?
> 

updated

>> +
>> +	return large;
>> +}
>> +
>> +void __meminit vmemmap_set_pmd(pmd_t *pmdp, void *p, int node,
>> +			       unsigned long addr, unsigned long next)
>> +{
>> +	pte_t entry;
>> +	pte_t *ptep = pmdp_ptep(pmdp);
>> +
>> +	VM_BUG_ON(!IS_ALIGNED(addr, PMD_SIZE));
>> +	entry = pfn_pte(__pa(p) >> PAGE_SHIFT, PAGE_KERNEL);
>> +	set_pte_at(&init_mm, addr, ptep, entry);
>> +	asm volatile("ptesync": : :"memory");
>> +
>> +	vmemmap_verify(ptep, node, addr, next);
>> +}
>> +
>> +static pte_t * __meminit radix__vmemmap_pte_populate(pmd_t *pmd, unsigned long addr, int node,
>> +						     struct vmem_altmap *altmap,
>> +						     struct page *reuse)
>> +{
>> +	pte_t *pte = pte_offset_kernel(pmd, addr);
>> +
>> +	if (pte_none(*pte)) {
>> +		pte_t entry;
>> +		void *p;
>> +
>> +		if (!reuse) {
>> +			/*
>> +			 * make sure we don't create altmap mappings
>> +			 * covering things outside the device.
>> +			 */
>> +			if (altmap && altmap_cross_boundary(altmap, addr, PAGE_SIZE))
>> +				altmap = NULL;
>> +
>> +			p = vmemmap_alloc_block_buf(PAGE_SIZE, node, altmap);
>> +			if (!p) {
>> +				if (altmap)
>> +					p = vmemmap_alloc_block_buf(PAGE_SIZE, node, NULL);
>> +				if (!p)
>> +					return NULL;
>> +			}
> 
> Above if conditions are quite confusing when looking for the 1st time?
> Can we do this? Did I get it right?
> 
>                 if (!p && altmap)
>                   p = vmemmap_alloc_block_buf(PAGE_SIZE, node, NULL);
> 
>                 if (!p)
>                   return NULL;
> 

updated


-aneesh


More information about the Linuxppc-dev mailing list