On Wed, Sep 22, 2021 at 11:07:22PM +0200, Peter Zijlstra wrote: > On Mon, Sep 20, 2021 at 07:23:45PM +0000, Fenghua Yu wrote: > > diff --git a/arch/x86/kernel/traps.c b/arch/x86/kernel/traps.c > > index a58800973aed..a25d738ae839 100644 > > --- a/arch/x86/kernel/traps.c > > +++ b/arch/x86/kernel/traps.c > > @@ -61,6 +61,7 @@ > > #include <asm/insn.h> > > #include <asm/insn-eval.h> > > #include <asm/vdso.h> > > +#include <asm/iommu.h> > > > > #ifdef CONFIG_X86_64 > > #include <asm/x86_init.h> > > @@ -526,6 +527,14 @@ static enum kernel_gp_hint > > get_kernel_gp_address(struct pt_regs *regs, > > return GP_CANONICAL; > > } > > > > +static bool fixup_pasid_exception(void) > > +{ > > + if (!cpu_feature_enabled(X86_FEATURE_ENQCMD)) > > + return false; > > + > > + return __fixup_pasid_exception(); > > +}
That is, shouldn't the above at the very least decode the instruction causing the #GP and check it's this ENQCMD thing? > > #define GPFSTR "general protection fault" > > > > DEFINE_IDTENTRY_ERRORCODE(exc_general_protection) > > @@ -538,6 +547,9 @@ DEFINE_IDTENTRY_ERRORCODE(exc_general_protection) > > > > cond_local_irq_enable(regs); > > > > + if (user_mode(regs) && fixup_pasid_exception()) > > + goto exit; > > + > > if (static_cpu_has(X86_FEATURE_UMIP)) { > > if (user_mode(regs) && fixup_umip_exception(regs)) > > goto exit; > > So you're eating any random #GP that might or might not be PASID > related. And all that witout a comment... Enlighten? _______________________________________________ iommu mailing list iommu@lists.linux-foundation.org https://lists.linuxfoundation.org/mailman/listinfo/iommu