On Wed, Dec 14, 2022 at 11:22:02AM +0000, "Huang, Kai" <kai.huang@xxxxxxxxx> wrote: > On Sat, 2022-10-29 at 23:23 -0700, isaku.yamahata@xxxxxxxxx wrote: > > +bool tdx_is_emulated_msr(u32 index, bool write) > > +{ > > + switch (index) { > > + case MSR_IA32_UCODE_REV: > > + case MSR_IA32_ARCH_CAPABILITIES: > > + case MSR_IA32_POWER_CTL: > > + case MSR_MTRRcap: > > + case 0x200 ... 0x26f: > > + /* IA32_MTRR_PHYS{BASE, MASK}, IA32_MTRR_FIX*_* */ > > + case MSR_IA32_CR_PAT: > > + case MSR_MTRRdefType: > > + case MSR_IA32_TSC_DEADLINE: > > + case MSR_IA32_MISC_ENABLE: > > + case MSR_KVM_STEAL_TIME: > > + case MSR_KVM_POLL_CONTROL: > > To me putting KVM para-virt MSRs and hardware MSRs together isn't good idea. > You can introduce separate helpers for them. Makes sense. updated as follows. diff --git a/arch/x86/kvm/vmx/tdx.c b/arch/x86/kvm/vmx/tdx.c index ee8d395af849..b4132167e2bb 100644 --- a/arch/x86/kvm/vmx/tdx.c +++ b/arch/x86/kvm/vmx/tdx.c @@ -1606,6 +1606,17 @@ void tdx_get_exit_info(struct kvm_vcpu *vcpu, u32 *reason, *error_code = 0; } +static bool tdx_is_emulated_kvm_msr(u32 index, bool write) +{ + switch (index) { + case MSR_KVM_STEAL_TIME: + case MSR_KVM_POLL_CONTROL: + return true; + default: + return false; + } +} + bool tdx_is_emulated_msr(u32 index, bool write) { switch (index) { @@ -1619,8 +1630,6 @@ bool tdx_is_emulated_msr(u32 index, bool write) case MSR_MTRRdefType: case MSR_IA32_TSC_DEADLINE: case MSR_IA32_MISC_ENABLE: - case MSR_KVM_STEAL_TIME: - case MSR_KVM_POLL_CONTROL: case MSR_PLATFORM_INFO: case MSR_MISC_FEATURES_ENABLES: case MSR_IA32_MCG_CAP: @@ -1650,6 +1659,9 @@ bool tdx_is_emulated_msr(u32 index, bool write) case MSR_IA32_APICBASE: case MSR_EFER: return !write; + case 0x4b564d00 ... 0x4b564dff: + /* KVM custom MSRs */ + return tdx_is_emulated_kvm_msr(index, write); default: return false; } -- Isaku Yamahata <isaku.yamahata@xxxxxxxxx>