On 11/4/19 5:54 AM, Paolo Bonzini wrote: > On 01/11/19 18:33, Moger, Babu wrote: >> diff --git a/arch/x86/kvm/svm.c b/arch/x86/kvm/svm.c >> index 4153ca8cddb7..79abbdeca148 100644 >> --- a/arch/x86/kvm/svm.c >> +++ b/arch/x86/kvm/svm.c >> @@ -2533,6 +2533,11 @@ static void svm_decache_cr4_guest_bits(struct kvm_vcpu *vcpu) >> { >> } >> >> +static bool svm_umip_emulated(void) >> +{ >> + return boot_cpu_has(X86_FEATURE_UMIP); >> +} > > For hardware that supports UMIP, this is only needed because of your > patch 1. Without it, X86_FEATURE_UMIP should already be enabled on > processors that natively support UMIP. Yes, That is correct. Will remove the patch #1. Intention was to enable UMIP for the hardware that supports it. Will send out only the config changes(Patch #4). Also there is a complexity with supporting emulation on SEV guest. > > If you want UMIP *emulation* instead, this should become "return true". > >> static void update_cr0_intercept(struct vcpu_svm *svm) >> { >> ulong gcr0 = svm->vcpu.arch.cr0; >> @@ -4438,6 +4443,13 @@ static int interrupt_window_interception(struct vcpu_svm *svm) >> return 1; >> } >> >> +static int umip_interception(struct vcpu_svm *svm) >> +{ >> + struct kvm_vcpu *vcpu = &svm->vcpu; >> + >> + return kvm_emulate_instruction(vcpu, 0); >> +} >> + >> static int pause_interception(struct vcpu_svm *svm) >> { >> struct kvm_vcpu *vcpu = &svm->vcpu; >> @@ -4775,6 +4787,10 @@ static int (*const svm_exit_handlers[])(struct vcpu_svm *svm) = { >> [SVM_EXIT_SMI] = nop_on_interception, >> [SVM_EXIT_INIT] = nop_on_interception, >> [SVM_EXIT_VINTR] = interrupt_window_interception, >> + [SVM_EXIT_IDTR_READ] = umip_interception, >> + [SVM_EXIT_GDTR_READ] = umip_interception, >> + [SVM_EXIT_LDTR_READ] = umip_interception, >> + [SVM_EXIT_TR_READ] = umip_interception, > > This is missing enabling the intercepts. Also, this can be just > emulate_on_interception instead of a new function. > > Paolo > >> [SVM_EXIT_RDPMC] = rdpmc_interception, >> [SVM_EXIT_CPUID] = cpuid_interception, >> [SVM_EXIT_IRET] = iret_interception, >> @@ -5976,11 +5992,6 @@ static bool svm_xsaves_supported(void) >> return boot_cpu_has(X86_FEATURE_XSAVES); >> } >> >> -static bool svm_umip_emulated(void) >> -{ >> - return false; >> -} >> - >> static bool svm_pt_supported(void) >> { >> return false; >> >