[PATCH v2] powerpc: Ignore DSI error caused by the copy/paste instruction

Christophe Leroy christophe.leroy at csgroup.eu
Mon Sep 26 15:55:57 AEST 2022



Le 25/09/2022 à 22:26, Haren Myneni a écrit :
> 
> DSI error will be generated when the paste operation is issued on
> the suspended NX window due to NX state changes. The hypervisor
> expects the partition to ignore this error during page pault
> handling. To differentiate DSI caused by an actual HW configuration
> or by the NX window, a new “ibm,pi-features” type value is defined.
> Byte 0, bit 3 of pi-attribute-specifier-type is now defined to
> indicate this DSI error. If this error is not ignored, the user
> space can get SIGBUS when the NX request is issued.

Would be nice to mention at least one time in the message that NX stands 
to nest accelerator.

Otherwise, that's confusing with for exemple:
Commit 2e602847d9c2 ("KVM: PPC: Don't flush PTEs on NX/RO hit")
Commit c49643319715 ("powerpc/32s: Only leave NX unset on segments used 
for modules")


> 
> This patch adds changes to read ibm,pi-features property and ignore
> DSI error in the page fault handling if CPU_FTR_NX_DSI if defined.
> 
> Signed-off-by: Haren Myneni <haren at linux.ibm.com>
> ---
> v2: Code cleanup as suggested by Christophe Leroy
> 
>   arch/powerpc/include/asm/cputable.h |  5 ++--
>   arch/powerpc/kernel/prom.c          | 36 +++++++++++++++++++++--------
>   arch/powerpc/mm/fault.c             | 17 +++++++++++++-
>   3 files changed, 45 insertions(+), 13 deletions(-)
> 

> diff --git a/arch/powerpc/mm/fault.c b/arch/powerpc/mm/fault.c
> index 014005428687..cb949f12baa9 100644
> --- a/arch/powerpc/mm/fault.c
> +++ b/arch/powerpc/mm/fault.c
> @@ -367,7 +367,22 @@ static void sanity_check_fault(bool is_write, bool is_user,
>   #elif defined(CONFIG_PPC_8xx)
>   #define page_fault_is_bad(__err)	((__err) & DSISR_NOEXEC_OR_G)
>   #elif defined(CONFIG_PPC64)
> -#define page_fault_is_bad(__err)	((__err) & DSISR_BAD_FAULT_64S)
> +static int page_fault_is_bad(unsigned long err)
> +{
> +	unsigned long flag = DSISR_BAD_FAULT_64S;
> +
> +	/*
> +	 * PAPR 14.15.3.4.1
> +	 * If byte 0, bit 3 of pi-attribute-specifier-type in
> +	 * ibm,pi-features property is defined, ignore the DSI error
> +	 * which is caused by the paste instruction on the
> +	 * suspended NX window.
> +	 */
> +	if (cpu_has_feature(CPU_FTR_NX_DSI))
> +		flag &= ~DSISR_BAD_COPYPASTE;
> +
> +	return (err & flag);

You don't need parenthesis ( )

> +}
>   #else
>   #define page_fault_is_bad(__err)	((__err) & DSISR_BAD_FAULT_32S)
>   #endif


More information about the Linuxppc-dev mailing list