mirror of
https://github.com/raspberrypi/linux.git
synced 2026-01-02 15:53:42 +00:00
KVM: x86: Extract code for generating per-entry emulated CPUID information
Extract the meat of __do_cpuid_func_emulated() into a separate helper, cpuid_func_emulated(), so that cpuid_func_emulated() can be used with a single CPUID entry. This will allow marking emulated features as fully supported in the guest cpu_caps without needing to hardcode the set of emulated features in multiple locations. No functional change intended. Reviewed-by: Maxim Levitsky <mlevitsk@redhat.com> Link: https://lore.kernel.org/r/20241128013424.4096668-43-seanjc@google.com Signed-off-by: Sean Christopherson <seanjc@google.com>
This commit is contained in:
@@ -1213,14 +1213,10 @@ static struct kvm_cpuid_entry2 *do_host_cpuid(struct kvm_cpuid_array *array,
|
||||
return entry;
|
||||
}
|
||||
|
||||
static int __do_cpuid_func_emulated(struct kvm_cpuid_array *array, u32 func)
|
||||
static int cpuid_func_emulated(struct kvm_cpuid_entry2 *entry, u32 func)
|
||||
{
|
||||
struct kvm_cpuid_entry2 *entry;
|
||||
memset(entry, 0, sizeof(*entry));
|
||||
|
||||
if (array->nent >= array->maxnent)
|
||||
return -E2BIG;
|
||||
|
||||
entry = &array->entries[array->nent];
|
||||
entry->function = func;
|
||||
entry->index = 0;
|
||||
entry->flags = 0;
|
||||
@@ -1228,23 +1224,27 @@ static int __do_cpuid_func_emulated(struct kvm_cpuid_array *array, u32 func)
|
||||
switch (func) {
|
||||
case 0:
|
||||
entry->eax = 7;
|
||||
++array->nent;
|
||||
break;
|
||||
return 1;
|
||||
case 1:
|
||||
entry->ecx = feature_bit(MOVBE);
|
||||
++array->nent;
|
||||
break;
|
||||
return 1;
|
||||
case 7:
|
||||
entry->flags |= KVM_CPUID_FLAG_SIGNIFCANT_INDEX;
|
||||
entry->eax = 0;
|
||||
if (kvm_cpu_cap_has(X86_FEATURE_RDTSCP))
|
||||
entry->ecx = feature_bit(RDPID);
|
||||
++array->nent;
|
||||
break;
|
||||
return 1;
|
||||
default:
|
||||
break;
|
||||
return 0;
|
||||
}
|
||||
}
|
||||
|
||||
static int __do_cpuid_func_emulated(struct kvm_cpuid_array *array, u32 func)
|
||||
{
|
||||
if (array->nent >= array->maxnent)
|
||||
return -E2BIG;
|
||||
|
||||
array->nent += cpuid_func_emulated(&array->entries[array->nent], func);
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user