KVM: X86: Do the same ignore_msrs check for feature msrs
authorPeter Xu <peterx@redhat.com>
Mon, 22 Jun 2020 22:04:42 +0000 (18:04 -0400)
committerPaolo Bonzini <pbonzini@redhat.com>
Wed, 8 Jul 2020 20:21:40 +0000 (16:21 -0400)
Logically the ignore_msrs and report_ignored_msrs should also apply to feature
MSRs.  Add them in.

Signed-off-by: Peter Xu <peterx@redhat.com>
Message-Id: <20200622220442.21998-3-peterx@redhat.com>
Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
arch/x86/kvm/svm/svm.c
arch/x86/kvm/vmx/vmx.c
arch/x86/kvm/x86.c

index c0da4dd78ac592569ad44731c43d258eb2494ccb..70a8248062742073a5e3ba9cd463875525e1f550 100644 (file)
@@ -2359,7 +2359,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;
index 8411118e51a25ff13ebe8f98907bcde651e5e395..608e992e8db9d7affd0d2058dc74d33a0614490e 100644 (file)
@@ -1815,7 +1815,7 @@ static int vmx_get_msr_feature(struct kvm_msr_entry *msr)
                msr->data = vmx_get_perf_capabilities();
                return 0;
        default:
-               return 1;
+               return KVM_MSR_RET_INVALID;
        }
 }
 
index e7c1567b9501f02fe7bce27637f5955847b1c570..ec9aba133c1cb08a3b46c2cf895b5072662fa84a 100644 (file)
@@ -1412,8 +1412,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;
 }
@@ -1425,6 +1424,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;