On 03/07/2018 10:48, Robert Hoo wrote: >> >> However, I suggest adding it to the FeatureWord enum, since everything >> that handles FeatureWord applies to this new kind of MSR as well. >> Currently FeatureWord is only for CPUID leaves, but it doesn't have to >> be like that. >> > I think this will be changing struct FeatureWordInfo, which is designed > for cpuid enumerations. You must not want to do that. May I know more > details about your thought?
The simplest way is to put CPUIDs first and MSRs second in FeatureWord. Then you can do FEAT_XSAVE_COMP_LO, /* CPUID[EAX=0xd,ECX=0].EAX */ FEAT_XSAVE_COMP_HI, /* CPUID[EAX=0xd,ECX=0].EDX */ + FEATURE_WORDS_NUM_CPUID, + FEATURE_WORDS_FIRST_MSR = FEATURE_WORDS_NUM_CPUID, + FEAT_MSR_ARCH_CAPABILITIES = FEATURE_WORDS_FIRST_MSR, FEATURE_WORDS, }; #define FEATURE_WORDS_NUM_MSRS (FEATURE_WORDS - \ FEATURE_WORDS_FIRST_MSR) Then the existing loops that use FeatureWordInfo can go up to FEATURE_WORDS_NUM_CPUID. Thanks, Paolo > And, if I implemented ARCH_CAPABILITIES-bits features in FeatureWord, > then no necessity of having it in kvm_msr_entries, right?