On Mon, 2022-09-26 at 05:55 +0000, Christophe Leroy wrote: > > 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")
Thanks. I did not realize since VAS/NX code is added before. I will add the description as you suggested. > > > > 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 <ha...@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