@@ -1163,6 +1163,11 @@ static void machine_initfn(Object *obj)
ms->smp.cores = 1;
ms->smp.threads = 1;
+ ms->smp_cache.l1d = CPU_TOPO_LEVEL_INVALID;
+ ms->smp_cache.l1i = CPU_TOPO_LEVEL_INVALID;
+ ms->smp_cache.l2 = CPU_TOPO_LEVEL_INVALID;
+ ms->smp_cache.l3 = CPU_TOPO_LEVEL_INVALID;
+
machine_copy_boot_config(ms, &(BootConfiguration){ 0 });
}
@@ -10,6 +10,7 @@
#include "qemu/module.h"
#include "qom/object.h"
#include "hw/core/cpu.h"
+#include "hw/core/cpu-topology.h"
#define TYPE_MACHINE_SUFFIX "-machine"
@@ -144,6 +145,12 @@ typedef struct {
* @books_supported - whether books are supported by the machine
* @drawers_supported - whether drawers are supported by the machine
* @modules_supported - whether modules are supported by the machine
+ * @l1_separated_cache_supported - whether l1 data and instruction cache
+ * topology are supported by the machine
+ * @l2_unified_cache_supported - whether l2 unified cache topology are
+ * supported by the machine
+ * @l3_unified_cache_supported - whether l3 unified cache topology are
+ * supported by the machine
*/
typedef struct {
bool prefer_sockets;
@@ -153,6 +160,9 @@ typedef struct {
bool books_supported;
bool drawers_supported;
bool modules_supported;
+ bool l1_separated_cache_supported;
+ bool l2_unified_cache_supported;
+ bool l3_unified_cache_supported;
} SMPCompatProps;
/**
@@ -358,6 +368,20 @@ typedef struct CPUTopology {
unsigned int max_cpus;
} CPUTopology;
+/**
+ * CPUTopology:
+ * @l1d: the CPU topology hierarchy the L1 data cache is shared at.
+ * @l1i: the CPU topology hierarchy the L1 instruction cache is shared at.
+ * @l2: the CPU topology hierarchy the L2 (unified) cache is shared at.
+ * @l3: the CPU topology hierarchy the L3 (unified) cache is shared at.
+ */
+typedef struct CacheTopology {
+ CPUTopoLevel l1d;
+ CPUTopoLevel l1i;
+ CPUTopoLevel l2;
+ CPUTopoLevel l3;
+} CacheTopology;
+
/**
* MachineState:
*/
@@ -408,6 +432,7 @@ struct MachineState {
AccelState *accelerator;
CPUArchIdList *possible_cpus;
CPUTopology smp;
+ CacheTopology smp_cache;
struct NVDIMMState *nvdimms_state;
struct NumaState *numa_state;
};