Hi Maxim, On Tue, Mar 16, 2021 at 12:10:20AM +0200, Maxim Levitsky wrote: > -static int (*const svm_exit_handlers[])(struct kvm_vcpu *vcpu) = { > +static int (*svm_exit_handlers[])(struct kvm_vcpu *vcpu) = {
Can you keep this const and always set the necessary handlers? If exceptions are not intercepted they will not be used. > @@ -333,7 +334,9 @@ static inline void clr_exception_intercept(struct > vcpu_svm *svm, u32 bit) > struct vmcb *vmcb = svm->vmcb01.ptr; > > WARN_ON_ONCE(bit >= 32); > - vmcb_clr_intercept(&vmcb->control, INTERCEPT_EXCEPTION_OFFSET + bit); > + > + if (!((1 << bit) & debug_intercept_exceptions)) > + vmcb_clr_intercept(&vmcb->control, INTERCEPT_EXCEPTION_OFFSET + > bit); This will break SEV-ES guests, as those will not cause an intercept but now start to get #VC exceptions on every other exception that is raised. SEV-ES guests are not prepared for that and will not even boot, so please don't enable this feature for them.