On 28/02/2018 07:03, Wanpeng Li wrote: > From: Wanpeng Li <wanpengli@xxxxxxxxxxx> > > 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@xxxxxxxxxx> > Cc: Radim Krčmář <rkrcmar@xxxxxxxxxx> > Cc: Liran Alon <liran.alon@xxxxxxxxxx> > Cc: Nadav Amit <nadav.amit@xxxxxxxxx> > Cc: Borislav Petkov <bp@xxxxxxxxx> > Cc: Tom Lendacky <thomas.lendacky@xxxxxxx> > Signed-off-by: Wanpeng Li <wanpengli@xxxxxxxxxxx> > --- > arch/x86/kvm/x86.c | 18 +++++++++++++++--- > 1 file changed, 15 insertions(+), 3 deletions(-) > > diff --git a/arch/x86/kvm/x86.c b/arch/x86/kvm/x86.c > index d4985a9..efc8554 100644 > --- a/arch/x86/kvm/x86.c > +++ b/arch/x86/kvm/x86.c > @@ -1062,13 +1062,25 @@ static u32 msr_based_features[] = { > > static unsigned int num_msr_based_features; > > +static int kvm_get_msr_feature(struct kvm_msr_entry *msr) > +{ > + switch (msr->index) { > + default: > + if (kvm_x86_ops->get_msr_feature(msr)) > + return 1; > + } > + return 0; > +} > + > static int do_get_msr_feature(struct kvm_vcpu *vcpu, unsigned index, u64 *data) > { > struct kvm_msr_entry msr; > + int r; > > msr.index = index; > - if (kvm_x86_ops->get_msr_feature(&msr)) > - return 1; > + r = kvm_get_msr_feature(&msr); > + if (r) > + return r; > > *data = msr.data; > > @@ -4538,7 +4550,7 @@ static void kvm_init_msr_list(void) > struct kvm_msr_entry msr; > > msr.index = msr_based_features[i]; > - if (kvm_x86_ops->get_msr_feature(&msr)) > + if (kvm_get_msr_feature(&msr)) > continue; > > if (j < i) > Reviewed-by: Paolo Bonzini <pbonzini@xxxxxxxxxx>