mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
target/i386: nvmm, whpx: add accel/CPU class that sets host vendor
NVMM and WHPX are virtualizers, and therefore they need to use (at least by default) the host vendor for the guest CPUID. Add a cpu_instance_init implementation to these accelerators. Signed-off-by: Paolo Bonzini <pbonzini@redhat.com>
This commit is contained in:
+2
-1
@@ -44,6 +44,7 @@
|
||||
#include "hw/boards.h"
|
||||
#include "hw/i386/sgx-epc.h"
|
||||
#endif
|
||||
#include "system/qtest.h"
|
||||
#include "tcg/tcg-cpu.h"
|
||||
|
||||
#include "disas/capstone.h"
|
||||
@@ -1943,7 +1944,7 @@ uint32_t xsave_area_size(uint64_t mask, bool compacted)
|
||||
|
||||
static inline bool accel_uses_host_cpuid(void)
|
||||
{
|
||||
return kvm_enabled() || hvf_enabled();
|
||||
return !tcg_enabled() && !qtest_enabled();
|
||||
}
|
||||
|
||||
static inline uint64_t x86_cpu_xsave_xcr0_components(X86CPU *cpu)
|
||||
|
||||
@@ -11,6 +11,8 @@ i386_ss.add(when: 'CONFIG_SEV', if_true: files('host-cpu.c', 'confidential-guest
|
||||
# x86 cpu type
|
||||
i386_ss.add(when: 'CONFIG_KVM', if_true: files('host-cpu.c'))
|
||||
i386_ss.add(when: 'CONFIG_HVF', if_true: files('host-cpu.c'))
|
||||
i386_ss.add(when: 'CONFIG_WHPX', if_true: files('host-cpu.c'))
|
||||
i386_ss.add(when: 'CONFIG_NVMM', if_true: files('host-cpu.c'))
|
||||
|
||||
i386_system_ss = ss.source_set()
|
||||
i386_system_ss.add(files(
|
||||
|
||||
@@ -19,6 +19,8 @@
|
||||
#include "qemu/error-report.h"
|
||||
#include "qapi/error.h"
|
||||
#include "qemu/queue.h"
|
||||
#include "accel/accel-cpu-target.h"
|
||||
#include "host-cpu.h"
|
||||
#include "migration/blocker.h"
|
||||
#include "strings.h"
|
||||
|
||||
@@ -1207,10 +1209,33 @@ static const TypeInfo nvmm_accel_type = {
|
||||
.class_init = nvmm_accel_class_init,
|
||||
};
|
||||
|
||||
static void nvmm_cpu_instance_init(CPUState *cs)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(cs);
|
||||
|
||||
host_cpu_instance_init(cpu);
|
||||
}
|
||||
|
||||
static void nvmm_cpu_accel_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
AccelCPUClass *acc = ACCEL_CPU_CLASS(oc);
|
||||
|
||||
acc->cpu_instance_init = nvmm_cpu_instance_init;
|
||||
}
|
||||
|
||||
static const TypeInfo nvmm_cpu_accel_type = {
|
||||
.name = ACCEL_CPU_NAME("nvmm"),
|
||||
|
||||
.parent = TYPE_ACCEL_CPU,
|
||||
.class_init = nvmm_cpu_accel_class_init,
|
||||
.abstract = true,
|
||||
};
|
||||
|
||||
static void
|
||||
nvmm_type_init(void)
|
||||
{
|
||||
type_register_static(&nvmm_accel_type);
|
||||
type_register_static(&nvmm_cpu_accel_type);
|
||||
}
|
||||
|
||||
type_init(nvmm_type_init);
|
||||
|
||||
@@ -26,6 +26,8 @@
|
||||
#include "qapi/qapi-types-common.h"
|
||||
#include "qapi/qapi-visit-common.h"
|
||||
#include "migration/blocker.h"
|
||||
#include "host-cpu.h"
|
||||
#include "accel/accel-cpu-target.h"
|
||||
#include <winerror.h>
|
||||
|
||||
#include "whpx-internal.h"
|
||||
@@ -2500,6 +2502,28 @@ static void whpx_set_kernel_irqchip(Object *obj, Visitor *v,
|
||||
}
|
||||
}
|
||||
|
||||
static void whpx_cpu_instance_init(CPUState *cs)
|
||||
{
|
||||
X86CPU *cpu = X86_CPU(cs);
|
||||
|
||||
host_cpu_instance_init(cpu);
|
||||
}
|
||||
|
||||
static void whpx_cpu_accel_class_init(ObjectClass *oc, const void *data)
|
||||
{
|
||||
AccelCPUClass *acc = ACCEL_CPU_CLASS(oc);
|
||||
|
||||
acc->cpu_instance_init = whpx_cpu_instance_init;
|
||||
}
|
||||
|
||||
static const TypeInfo whpx_cpu_accel_type = {
|
||||
.name = ACCEL_CPU_NAME("whpx"),
|
||||
|
||||
.parent = TYPE_ACCEL_CPU,
|
||||
.class_init = whpx_cpu_accel_class_init,
|
||||
.abstract = true,
|
||||
};
|
||||
|
||||
/*
|
||||
* Partition support
|
||||
*/
|
||||
@@ -2726,6 +2750,7 @@ static const TypeInfo whpx_accel_type = {
|
||||
static void whpx_type_init(void)
|
||||
{
|
||||
type_register_static(&whpx_accel_type);
|
||||
type_register_static(&whpx_cpu_accel_type);
|
||||
}
|
||||
|
||||
bool init_whp_dispatch(void)
|
||||
|
||||
Reference in New Issue
Block a user