On 2021-12-10 09:43:15 -0600, Brijesh Singh wrote: > From: Michael Roth <michael.roth@xxxxxxx> > > Determining which CPUID leafs have significant ECX/index values is > also needed by guest kernel code when doing SEV-SNP-validated CPUID > lookups. Move this to common code to keep future updates in sync. > > Signed-off-by: Michael Roth <michael.roth@xxxxxxx> > Signed-off-by: Brijesh Singh <brijesh.singh@xxxxxxx> Reviewed-by: Venu Busireddy <venu.busireddy@xxxxxxxxxx> > --- > arch/x86/include/asm/cpuid.h | 26 ++++++++++++++++++++++++++ > arch/x86/kvm/cpuid.c | 17 ++--------------- > 2 files changed, 28 insertions(+), 15 deletions(-) > create mode 100644 arch/x86/include/asm/cpuid.h > > diff --git a/arch/x86/include/asm/cpuid.h b/arch/x86/include/asm/cpuid.h > new file mode 100644 > index 000000000000..61426eb1f665 > --- /dev/null > +++ b/arch/x86/include/asm/cpuid.h > @@ -0,0 +1,26 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +#ifndef _ASM_X86_CPUID_H > +#define _ASM_X86_CPUID_H > + > +static __always_inline bool cpuid_function_is_indexed(u32 function) > +{ > + switch (function) { > + case 4: > + case 7: > + case 0xb: > + case 0xd: > + case 0xf: > + case 0x10: > + case 0x12: > + case 0x14: > + case 0x17: > + case 0x18: > + case 0x1f: > + case 0x8000001d: > + return true; > + } > + > + return false; > +} > + > +#endif /* _ASM_X86_CPUID_H */ > diff --git a/arch/x86/kvm/cpuid.c b/arch/x86/kvm/cpuid.c > index 07e9215e911d..6b99e8e87480 100644 > --- a/arch/x86/kvm/cpuid.c > +++ b/arch/x86/kvm/cpuid.c > @@ -19,6 +19,7 @@ > #include <asm/user.h> > #include <asm/fpu/xstate.h> > #include <asm/sgx.h> > +#include <asm/cpuid.h> > #include "cpuid.h" > #include "lapic.h" > #include "mmu.h" > @@ -626,22 +627,8 @@ static struct kvm_cpuid_entry2 *do_host_cpuid(struct kvm_cpuid_array *array, > cpuid_count(entry->function, entry->index, > &entry->eax, &entry->ebx, &entry->ecx, &entry->edx); > > - switch (function) { > - case 4: > - case 7: > - case 0xb: > - case 0xd: > - case 0xf: > - case 0x10: > - case 0x12: > - case 0x14: > - case 0x17: > - case 0x18: > - case 0x1f: > - case 0x8000001d: > + if (cpuid_function_is_indexed(function)) > entry->flags |= KVM_CPUID_FLAG_SIGNIFCANT_INDEX; > - break; > - } > > return entry; > } > -- > 2.25.1 >