On Thu, Jul 25, 2019 at 11:12:40AM +0800, Yang Weijiang wrote: > To make the code look clean, wrap CPUID(0xD,n>=1) enumeration > code in a helper function now. > > Signed-off-by: Yang Weijiang <weijiang.yang@xxxxxxxxx> > --- > arch/x86/kvm/cpuid.c | 44 ++++++++++++++++++++++++++++++++++++++++++++ > 1 file changed, 44 insertions(+) > > diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c > index 4992e7c99588..29cbde7538a3 100644 > --- a/arch/x86/kvm/cpuid.c > +++ b/arch/x86/kvm/cpuid.c > @@ -313,6 +313,50 @@ static int __do_cpuid_ent_emulated(struct kvm_cpuid_entry2 *entry, > return 0; > } > > +static inline int __do_cpuid_dx_leaf(struct kvm_cpuid_entry2 *entry, int *nent, 'dx' makes me think of the generic reference to RDX vs EDX. Maybe __do_cpuid_0xd_leaf()? > + int maxnent, u64 xss_mask, u64 xcr0_mask, > + u32 eax_mask) > +{ > + int idx, i; > + u64 mask; > + u64 supported; > + > + for (idx = 1, i = 1; idx < 64; ++idx) { Rather than loop here, I think it makes sense to loop in the caller to make the code consistent with do_cpuid_7_mask() added by commit 54d360d41211 ("KVM: cpuid: extract do_cpuid_7_mask and support multiple subleafs") > + mask = ((u64)1 << idx); > + if (*nent >= maxnent) > + return -EINVAL; > + > + do_cpuid_1_ent(&entry[i], 0xD, idx); > + if (idx == 1) { > + entry[i].eax &= eax_mask; > + cpuid_mask(&entry[i].eax, CPUID_D_1_EAX); > + supported = xcr0_mask | xss_mask; > + entry[i].ebx = 0; > + entry[i].edx = 0; > + entry[i].ecx &= xss_mask; > + if (entry[i].eax & (F(XSAVES) | F(XSAVEC))) { > + entry[i].ebx = > + xstate_required_size(supported, > + true); > + } > + } else { > + supported = (entry[i].ecx & 1) ? xss_mask : > + xcr0_mask; > + if (entry[i].eax == 0 || !(supported & mask)) > + continue; > + entry[i].ecx &= 1; > + entry[i].edx = 0; > + if (entry[i].ecx) > + entry[i].ebx = 0; > + } > + entry[i].flags |= > + KVM_CPUID_FLAG_SIGNIFCANT_INDEX; > + ++*nent; > + ++i; > + } > + return 0; > +} > + Extracting code into a helper should be done in the same patch that the existing code is replaced with a call to the helper, i.e. the chunk of the next patch that invokes the helper should be squashed with this patch. > static inline int __do_cpuid_ent(struct kvm_cpuid_entry2 *entry, u32 function, > u32 index, int *nent, int maxnent) > { > -- > 2.17.2 >