|
@@ -907,6 +907,40 @@ static void machine_set_smp(Object *obj, Visitor *v, const char *name,
|
|
|
machine_parse_smp_config(ms, config, errp);
|
|
|
}
|
|
|
|
|
|
+static void machine_get_smp_cache(Object *obj, Visitor *v, const char *name,
|
|
|
+ void *opaque, Error **errp)
|
|
|
+{
|
|
|
+ MachineState *ms = MACHINE(obj);
|
|
|
+ SmpCache *cache = &ms->smp_cache;
|
|
|
+ SmpCachePropertiesList *head = NULL;
|
|
|
+ SmpCachePropertiesList **tail = &head;
|
|
|
+
|
|
|
+ for (int i = 0; i < CACHE_LEVEL_AND_TYPE__MAX; i++) {
|
|
|
+ SmpCacheProperties *node = g_new(SmpCacheProperties, 1);
|
|
|
+
|
|
|
+ node->cache = cache->props[i].cache;
|
|
|
+ node->topology = cache->props[i].topology;
|
|
|
+ QAPI_LIST_APPEND(tail, node);
|
|
|
+ }
|
|
|
+
|
|
|
+ visit_type_SmpCachePropertiesList(v, name, &head, errp);
|
|
|
+ qapi_free_SmpCachePropertiesList(head);
|
|
|
+}
|
|
|
+
|
|
|
+static void machine_set_smp_cache(Object *obj, Visitor *v, const char *name,
|
|
|
+ void *opaque, Error **errp)
|
|
|
+{
|
|
|
+ MachineState *ms = MACHINE(obj);
|
|
|
+ SmpCachePropertiesList *caches;
|
|
|
+
|
|
|
+ if (!visit_type_SmpCachePropertiesList(v, name, &caches, errp)) {
|
|
|
+ return;
|
|
|
+ }
|
|
|
+
|
|
|
+ machine_parse_smp_cache(ms, caches, errp);
|
|
|
+ qapi_free_SmpCachePropertiesList(caches);
|
|
|
+}
|
|
|
+
|
|
|
static void machine_get_boot(Object *obj, Visitor *v, const char *name,
|
|
|
void *opaque, Error **errp)
|
|
|
{
|
|
@@ -1067,6 +1101,11 @@ static void machine_class_init(ObjectClass *oc, void *data)
|
|
|
object_class_property_set_description(oc, "smp",
|
|
|
"CPU topology");
|
|
|
|
|
|
+ object_class_property_add(oc, "smp-cache", "SmpCachePropertiesWrapper",
|
|
|
+ machine_get_smp_cache, machine_set_smp_cache, NULL, NULL);
|
|
|
+ object_class_property_set_description(oc, "smp-cache",
|
|
|
+ "Cache properties list for SMP machine");
|
|
|
+
|
|
|
object_class_property_add(oc, "phandle-start", "int",
|
|
|
machine_get_phandle_start, machine_set_phandle_start,
|
|
|
NULL, NULL);
|
|
@@ -1205,6 +1244,11 @@ static void machine_initfn(Object *obj)
|
|
|
ms->smp.cores = 1;
|
|
|
ms->smp.threads = 1;
|
|
|
|
|
|
+ for (int i = 0; i < CACHE_LEVEL_AND_TYPE__MAX; i++) {
|
|
|
+ ms->smp_cache.props[i].cache = (CacheLevelAndType)i;
|
|
|
+ ms->smp_cache.props[i].topology = CPU_TOPOLOGY_LEVEL_DEFAULT;
|
|
|
+ }
|
|
|
+
|
|
|
machine_copy_boot_config(ms, &(BootConfiguration){ 0 });
|
|
|
}
|
|
|
|