[PATCH v6 2/7] powerpc/64s: mm: Introduce __pmdp_collapse_flush with mm_struct argument

Christophe Leroy christophe.leroy at csgroup.eu
Tue Feb 14 17:02:22 AEDT 2023



Le 14/02/2023 à 02:59, Rohan McLure a écrit :
> pmdp_collapse_flush has references in generic code with just three
> parameters, due to the choice of mm context being implied by the vm_area
> context parameter.
> 
> Define __pmdp_collapse_flush to accept an additional mm_struct *
> parameter, with pmdp_collapse_flush a macro that unpacks the vma and
> calls __pmdp_collapse_flush. The mm_struct * parameter is needed in a
> future patch providing Page Table Check support, which is defined in
> terms of mm context objects.
> 
> Signed-off-by: Rohan McLure <rmclure at linux.ibm.com>
> ---
> v6: New patch
> ---
>   arch/powerpc/include/asm/book3s/64/pgtable.h | 14 +++++++++++---
>   1 file changed, 11 insertions(+), 3 deletions(-)
> 
> diff --git a/arch/powerpc/include/asm/book3s/64/pgtable.h b/arch/powerpc/include/asm/book3s/64/pgtable.h
> index cb4c67bf45d7..9d8b4e25f5ed 100644
> --- a/arch/powerpc/include/asm/book3s/64/pgtable.h
> +++ b/arch/powerpc/include/asm/book3s/64/pgtable.h
> @@ -1244,14 +1244,22 @@ static inline pmd_t pmdp_huge_get_and_clear(struct mm_struct *mm,
>   	return hash__pmdp_huge_get_and_clear(mm, addr, pmdp);
>   }
>   
> -static inline pmd_t pmdp_collapse_flush(struct vm_area_struct *vma,
> -					unsigned long address, pmd_t *pmdp)
> +static inline pmd_t __pmdp_collapse_flush(struct vm_area_struct *vma, struct mm_struct *mm,
> +					  unsigned long address, pmd_t *pmdp)
>   {
>   	if (radix_enabled())
>   		return radix__pmdp_collapse_flush(vma, address, pmdp);
>   	return hash__pmdp_collapse_flush(vma, address, pmdp);
>   }
> -#define pmdp_collapse_flush pmdp_collapse_flush
> +#define pmdp_collapse_flush(vma, addr, pmdp)				\
> +({									\
> +	struct vm_area_struct *_vma = (vma);				\
> +	pmd_t _r;							\
> +									\
> +	_r = __pmdp_collapse_flush(_vma, _vma->vm_mm, (addr), (pmdp));	\
> +									\
> +	_r;								\
> +})

Can you make it a static inline function instead of a ugly macro ?

>   
>   #define __HAVE_ARCH_PMDP_HUGE_GET_AND_CLEAR_FULL
>   pmd_t pmdp_huge_get_and_clear_full(struct vm_area_struct *vma,


More information about the Linuxppc-dev mailing list