aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorWanpeng Li <wanpengli@tencent.com>2018-02-28 01:03:30 -0500
committerRadim Krčmář <rkrcmar@redhat.com>2018-03-01 16:32:44 -0500
commit66421c1ec340096b291af763ed5721314cdd9c5c (patch)
tree38d5e4adcc54d8685f34d15d857c57a9006d91a4
parentd1d93fa90f1afa926cb060b7f78ab01a65705b4d (diff)
KVM: X86: Introduce kvm_get_msr_feature()
Introduce kvm_get_msr_feature() to handle the msrs which are supported by different vendors and sharing the same emulation logic. Cc: Paolo Bonzini <pbonzini@redhat.com> Cc: Radim Krčmář <rkrcmar@redhat.com> Cc: Liran Alon <liran.alon@oracle.com> Cc: Nadav Amit <nadav.amit@gmail.com> Cc: Borislav Petkov <bp@alien8.de> Cc: Tom Lendacky <thomas.lendacky@amd.com> Signed-off-by: Wanpeng Li <wanpengli@tencent.com> Reviewed-by: Paolo Bonzini <pbonzini@redhat.com> Signed-off-by: Radim Krčmář <rkrcmar@redhat.com>
-rw-r--r--arch/x86/kvm/x86.c18
1 files changed, 15 insertions, 3 deletions
diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c
index 54b4ed55945b..d97620eeb394 100644
--- a/arch/x86/kvm/x86.c
+++ b/arch/x86/kvm/x86.c
@@ -1059,13 +1059,25 @@ static u32 msr_based_features[] = {
1059 1059
1060static unsigned int num_msr_based_features; 1060static unsigned int num_msr_based_features;
1061 1061
1062static int kvm_get_msr_feature(struct kvm_msr_entry *msr)
1063{
1064 switch (msr->index) {
1065 default:
1066 if (kvm_x86_ops->get_msr_feature(msr))
1067 return 1;
1068 }
1069 return 0;
1070}
1071
1062static int do_get_msr_feature(struct kvm_vcpu *vcpu, unsigned index, u64 *data) 1072static int do_get_msr_feature(struct kvm_vcpu *vcpu, unsigned index, u64 *data)
1063{ 1073{
1064 struct kvm_msr_entry msr; 1074 struct kvm_msr_entry msr;
1075 int r;
1065 1076
1066 msr.index = index; 1077 msr.index = index;
1067 if (kvm_x86_ops->get_msr_feature(&msr)) 1078 r = kvm_get_msr_feature(&msr);
1068 return 1; 1079 if (r)
1080 return r;
1069 1081
1070 *data = msr.data; 1082 *data = msr.data;
1071 1083
@@ -4522,7 +4534,7 @@ static void kvm_init_msr_list(void)
4522 struct kvm_msr_entry msr; 4534 struct kvm_msr_entry msr;
4523 4535
4524 msr.index = msr_based_features[i]; 4536 msr.index = msr_based_features[i];
4525 if (kvm_x86_ops->get_msr_feature(&msr)) 4537 if (kvm_get_msr_feature(&msr))
4526 continue; 4538 continue;
4527 4539
4528 if (j < i) 4540 if (j < i)