[PATCH v3 10/31] powerpc/mm: Don't use pmd_val,pud_val and pgd_val as lvalue

Michael Ellerman mpe at ellerman.id.au
Tue Oct 13 16:31:15 AEDT 2015


On Tue, 2015-10-13 at 10:53 +0530, Aneesh Kumar K.V wrote:
> Michael Ellerman <mpe at ellerman.id.au> writes:
> 
> > On Tue, 2015-10-13 at 00:09 +0530, Aneesh Kumar K.V wrote:
> >> We convert them static inline function here as we did with pte_val in
> >> the previous patch
> >
> > This breaks ppc40x_defconfig & 40x/ep405_defconfig with:
> >
> >   arch/powerpc/mm/40x_mmu.c: In function 'mmu_mapin_ram':
> >   arch/powerpc/mm/40x_mmu.c:113:20: error: lvalue required as left operand of assignment
> >   arch/powerpc/mm/40x_mmu.c:114:20: error: lvalue required as left operand of assignment
> >   arch/powerpc/mm/40x_mmu.c:115:20: error: lvalue required as left operand of assignment
> >   arch/powerpc/mm/40x_mmu.c:116:20: error: lvalue required as left operand of assignment
> >   arch/powerpc/mm/40x_mmu.c:128:18: error: lvalue required as left operand of assignment
> >
> > Which is mainly:
> >
> > 	pmd_val(*pmdp++) = val;
> >
> >
> > The obvious patch to use pmd_set() doesn't work, I think because there's no
> > pmd_set() defined for 32-bit nohash?
> >
> 
> How about
> 
> diff --git a/arch/powerpc/mm/40x_mmu.c b/arch/powerpc/mm/40x_mmu.c
> index 5810967511d4..31a5d42df8c9 100644
> --- a/arch/powerpc/mm/40x_mmu.c
> +++ b/arch/powerpc/mm/40x_mmu.c
> @@ -110,10 +110,10 @@ unsigned long __init mmu_mapin_ram(unsigned long top)
>  		unsigned long val = p | _PMD_SIZE_16M | _PAGE_EXEC | _PAGE_HWWRITE;
>  
>  		pmdp = pmd_offset(pud_offset(pgd_offset_k(v), v), v);
> -		pmd_val(*pmdp++) = val;
> -		pmd_val(*pmdp++) = val;
> -		pmd_val(*pmdp++) = val;
> -		pmd_val(*pmdp++) = val;
> +		*pmdp++ = __pmd(val);
> +		*pmdp++ = __pmd(val);
> +		*pmdp++ = __pmd(val);
> +		*pmdp++ = __pmd(val);

Why do we have pmd_set() then?

cheers




More information about the Linuxppc-dev mailing list