]> Git Repo - qemu.git/blobdiff - hw/virtio/virtio-balloon.c
balloon: Use only 'pc-dimm' type dimm for ballooning
[qemu.git] / hw / virtio / virtio-balloon.c
index 388e87336a58e5b96cc61f6ba40d536434bdd154..e9c30e9615c204c862deb27e2817c1189a01e359 100644 (file)
@@ -305,15 +305,33 @@ static void virtio_balloon_get_config(VirtIODevice *vdev, uint8_t *config_data)
     memcpy(config_data, &config, sizeof(struct virtio_balloon_config));
 }
 
+static int build_dimm_list(Object *obj, void *opaque)
+{
+    GSList **list = opaque;
+
+    if (object_dynamic_cast(obj, TYPE_PC_DIMM)) {
+        DeviceState *dev = DEVICE(obj);
+        if (dev->realized) { /* only realized DIMMs matter */
+            *list = g_slist_prepend(*list, dev);
+        }
+    }
+
+    object_child_foreach(obj, build_dimm_list, opaque);
+    return 0;
+}
+
 static ram_addr_t get_current_ram_size(void)
 {
     GSList *list = NULL, *item;
     ram_addr_t size = ram_size;
 
-    pc_dimm_build_list(qdev_get_machine(), &list);
+    build_dimm_list(qdev_get_machine(), &list);
     for (item = list; item; item = g_slist_next(item)) {
         Object *obj = OBJECT(item->data);
-        size += object_property_get_int(obj, PC_DIMM_SIZE_PROP, &error_abort);
+        if (!strcmp(object_get_typename(obj), TYPE_PC_DIMM)) {
+            size += object_property_get_int(obj, PC_DIMM_SIZE_PROP,
+                                            &error_abort);
+        }
     }
     g_slist_free(list);
 
This page took 0.019298 seconds and 4 git commands to generate.