@@ -383,6 +383,7 @@ void x86_cpu_pre_plug(HotplugHandler *hotplug_dev,
CPUArchId *cpu_slot;
X86CPUTopoIDs topo_ids;
X86CPU *cpu = X86_CPU(dev);
+ CPUX86State *env = &cpu->env;
MachineState *ms = MACHINE(hotplug_dev);
X86MachineState *x86ms = X86_MACHINE(hotplug_dev);
X86ApicidTopoInfo apicid_topo;
@@ -564,6 +565,9 @@ void x86_cpu_pre_plug(HotplugHandler *hotplug_dev,
return;
}
+ env->hybrid_core_type =
+ machine_topo_get_hybrid_core_type(ms, cpu->cluster_id, cpu->core_id);
+
cs = CPU(cpu);
cs->cpu_index = idx;
@@ -6845,6 +6845,7 @@ static void x86_cpu_initfn(Object *obj)
X86CPUClass *xcc = X86_CPU_GET_CLASS(obj);
CPUX86State *env = &cpu->env;
+ env->hybrid_core_type = INVALID_HYBRID_TYPE;
cpu_set_cpustate_pointers(cpu);
object_property_add(obj, "feature-words", "X86CPUFeatureWordInfo",
@@ -1543,6 +1543,12 @@ typedef struct CPUCaches {
CPUCacheInfo *l3_cache;
} CPUCaches;
+typedef enum {
+ INVALID_HYBRID_TYPE = 0,
+ INTEL_ATOM_TYPE,
+ INTEL_CORE_TYPE,
+} X86HybridCoreType;
+
typedef struct HVFX86LazyFlags {
target_ulong result;
target_ulong auxbits;
@@ -1825,6 +1831,8 @@ typedef struct CPUArchState {
uint32_t umwait;
TPRAccess tpr_access_type;
+
+ X86HybridCoreType hybrid_core_type;
} CPUX86State;
struct kvm_msrs;