> >+ if (cpu_feature_enabled(X86_FEATURE_FRED) && > >+ guest_cpuid_has(&vmx->vcpu, X86_FEATURE_FRED)) { > > IIUC, vmx_prepare_switch_to_host() is called from IRQ-disabled context. using > guest_cpuid_has() in this context is not desired, see > lockdep_assert_irqs_enabled() in cpuid_entry2_find(). Nice catch! Anyway it's a bad idea to do a search call here, let me find a better way for all FRED CPUID checks. > >diff --git a/arch/x86/kvm/vmx/vmx.h b/arch/x86/kvm/vmx/vmx.h index > >f8c02bd37069..328a3447f064 100644 > >--- a/arch/x86/kvm/vmx/vmx.h > >+++ b/arch/x86/kvm/vmx/vmx.h > >@@ -276,6 +276,8 @@ struct vcpu_vmx { > > #ifdef CONFIG_X86_64 > > u64 msr_host_kernel_gs_base; > > u64 msr_guest_kernel_gs_base; > >+ u64 msr_host_fred_rsp0; > >+ u64 msr_guest_fred_rsp0; > > resetting guest fred rsp0 to 0 during vcpu reset is missing. hmm, I assume it gets the same treatment as guest_kernel_gs_base. It seems we don't reset guest_kernel_gs_base. No?