Logically the ignore_msrs and report_ignored_msrs should also apply to feature
MSRs.  Add them in.

Signed-off-by: Peter Xu <pet...@redhat.com>
---
 arch/x86/kvm/svm/svm.c |  2 +-
 arch/x86/kvm/vmx/vmx.c |  2 +-
 arch/x86/kvm/x86.c     | 10 ++++++++--
 3 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/arch/x86/kvm/svm/svm.c b/arch/x86/kvm/svm/svm.c
index a862c768fd54..8fae61d71d6b 100644
--- a/arch/x86/kvm/svm/svm.c
+++ b/arch/x86/kvm/svm/svm.c
@@ -2346,7 +2346,7 @@ static int svm_get_msr_feature(struct kvm_msr_entry *msr)
                        msr->data |= MSR_F10H_DECFG_LFENCE_SERIALIZE;
                break;
        default:
-               return 1;
+               return KVM_MSR_RET_INVALID;
        }
 
        return 0;
diff --git a/arch/x86/kvm/vmx/vmx.c b/arch/x86/kvm/vmx/vmx.c
index 89c766fad889..42dbb3d0a2bd 100644
--- a/arch/x86/kvm/vmx/vmx.c
+++ b/arch/x86/kvm/vmx/vmx.c
@@ -1772,7 +1772,7 @@ static int vmx_get_msr_feature(struct kvm_msr_entry *msr)
                        return 1;
                return vmx_get_vmx_msr(&vmcs_config.nested, msr->index, 
&msr->data);
        default:
-               return 1;
+               return KVM_MSR_RET_INVALID;
        }
 }
 
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index b49eaf8a2ce5..1af37794377e 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -1392,8 +1392,7 @@ static int kvm_get_msr_feature(struct kvm_msr_entry *msr)
                rdmsrl_safe(msr->index, &msr->data);
                break;
        default:
-               if (kvm_x86_ops.get_msr_feature(msr))
-                       return 1;
+               return kvm_x86_ops.get_msr_feature(msr);
        }
        return 0;
 }
@@ -1405,6 +1404,13 @@ static int do_get_msr_feature(struct kvm_vcpu *vcpu, 
unsigned index, u64 *data)
 
        msr.index = index;
        r = kvm_get_msr_feature(&msr);
+
+       if (r == KVM_MSR_RET_INVALID) {
+               /* Unconditionally clear the output for simplicity */
+               *data = 0;
+               r = kvm_msr_ignored_check(vcpu, index, 0, false);
+       }
+
        if (r)
                return r;
 
-- 
2.26.2

Reply via email to