On 2/27/24 18:41, Sean Christopherson wrote: > Define more #NPF error code flags that are relevant to SEV+ (mostly SNP) > guests, as specified by the APM: > > * Bit 34 (ENC): Set to 1 if the guest’s effective C-bit was 1, 0 otherwise. > * Bit 35 (SIZEM): Set to 1 if the fault was caused by a size mismatch between > PVALIDATE or RMPADJUST and the RMP, 0 otherwise. > * Bit 36 (VMPL): Set to 1 if the fault was caused by a VMPL permission > check failure, 0 otherwise. > * Bit 37 (SSS): Set to VMPL permission mask SSS (bit 4) value if VmplSSS is > enabled. The above bits 34-37 do not match with the bits 31,34-36 in the patch. Dongli Zhang > > Note, the APM is *extremely* misleading, and strongly implies that the > above flags can _only_ be set for #NPF exits from SNP guests. That is a > lie, as bit 34 (C-bit=1, i.e. was encrypted) can be set when running _any_ > flavor of SEV guest on SNP capable hardware. > > Signed-off-by: Sean Christopherson <seanjc@xxxxxxxxxx> > --- > arch/x86/include/asm/kvm_host.h | 4 ++++ > 1 file changed, 4 insertions(+) > > diff --git a/arch/x86/include/asm/kvm_host.h b/arch/x86/include/asm/kvm_host.h > index 88cc523bafa8..1e69743ef0fb 100644 > --- a/arch/x86/include/asm/kvm_host.h > +++ b/arch/x86/include/asm/kvm_host.h > @@ -261,8 +261,12 @@ enum x86_intercept_stage; > #define PFERR_FETCH_MASK BIT(4) > #define PFERR_PK_MASK BIT(5) > #define PFERR_SGX_MASK BIT(15) > +#define PFERR_GUEST_RMP_MASK BIT_ULL(31) > #define PFERR_GUEST_FINAL_MASK BIT_ULL(32) > #define PFERR_GUEST_PAGE_MASK BIT_ULL(33) > +#define PFERR_GUEST_ENC_MASK BIT_ULL(34) > +#define PFERR_GUEST_SIZEM_MASK BIT_ULL(35) > +#define PFERR_GUEST_VMPL_MASK BIT_ULL(36) > #define PFERR_IMPLICIT_ACCESS BIT_ULL(48) > > #define PFERR_NESTED_GUEST_PAGE (PFERR_GUEST_PAGE_MASK | \