On Wed, Aug 10, 2022, Paolo Bonzini wrote: > On 8/5/22 19:29, Sean Christopherson wrote: > > +static void kvm_proble_feature_msr(u32 msr_index) > > +{ > > + struct kvm_msr_entry msr = { > > + .index = msr_index, > > + }; > > + > > + if (kvm_get_msr_feature(&msr)) > > + return; > > + > > + msr_based_features[num_msr_based_features++] = msr_index; > > +} > > + > > static void kvm_init_msr_list(void) > > { > > u32 dummy[2]; > > @@ -6954,15 +6949,11 @@ static void kvm_init_msr_list(void) > > emulated_msrs[num_emulated_msrs++] = emulated_msrs_all[i]; > > } > > - for (i = 0; i < ARRAY_SIZE(msr_based_features_all); i++) { > > - struct kvm_msr_entry msr; > > + for (i = KVM_FIRST_EMULATED_VMX_MSR; i <= KVM_LAST_EMULATED_VMX_MSR; i++) > > + kvm_proble_feature_msr(i); > > - msr.index = msr_based_features_all[i]; > > - if (kvm_get_msr_feature(&msr)) > > - continue; > > - > > - msr_based_features[num_msr_based_features++] = msr_based_features_all[i]; > > - } > > + for (i = 0; i < ARRAY_SIZE(msr_based_features_all_except_vmx); i++) > > + kvm_proble_feature_msr(msr_based_features_all_except_vmx[i]); > > I'd rather move all the code to a new function kvm_init_feature_msr_list() > instead, and call it from kvm_arch_hardware_setup(). Would it make sense to also split out kvm_init_emulated_msr_list()? Hmm, and rename this to kvm_init_virtualized_msr_list()? I can't tell if that would be helpful or confusing.