[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH v2 14/20] memory-device: ids of virtio based devices
From: |
David Hildenbrand |
Subject: |
[Qemu-devel] [PATCH v2 14/20] memory-device: ids of virtio based devices are special |
Date: |
Wed, 29 Aug 2018 17:36:18 +0200 |
When reporting the id of virtio-based memory devices, we always have to
take the one of the proxy device (parent).
Expose the function, so especially virtio-based memory devices can
reuse the function when filling out the id in MemoryDeviceInfo.
Details:
When the user creates a virtio device (e.g. virtio-balloon-pci), two
devices are actually created.
1. Virtio proxy device (e.g. TYPE_VIRTIO_BALLOON_PCI)
2. The "real" virtio device (e.g. TYPE_VIRTIO_BALLOON).
1. aliases all properties of 2, so 2. can be properly configured using 1.
1. gets the device ID set specified by the user. 2. gets no ID set.
If we want to make 2. a MemoryDevice but report errors/information to the
user, we always have to report the id of 1. (because that's the device the
user instantiated and configured).
Signed-off-by: David Hildenbrand <address@hidden>
---
hw/mem/memory-device.c | 21 +++++++++++++++++++--
include/hw/mem/memory-device.h | 1 +
2 files changed, 20 insertions(+), 2 deletions(-)
diff --git a/hw/mem/memory-device.c b/hw/mem/memory-device.c
index a31ba73ea7..89a0c584be 100644
--- a/hw/mem/memory-device.c
+++ b/hw/mem/memory-device.c
@@ -19,6 +19,22 @@
#include "sysemu/kvm.h"
#include "trace.h"
+const char *memory_device_id(const MemoryDeviceState *md)
+{
+ Object *obj = OBJECT(md);
+
+ /* always use the ID of the proxy device for virtio devices */
+ if (object_dynamic_cast(obj, TYPE_VIRTIO_DEVICE)) {
+ if (obj->parent && object_dynamic_cast(obj->parent, TYPE_DEVICE)) {
+ const DeviceState *parent_dev = DEVICE(obj->parent);
+
+ return parent_dev->id;
+ }
+ return NULL;
+ }
+ return DEVICE(md)->id;
+}
+
static gint memory_device_addr_sort(gconstpointer a, gconstpointer b)
{
const MemoryDeviceState *md_a = MEMORY_DEVICE(a);
@@ -168,6 +184,7 @@ static uint64_t memory_device_get_free_addr(MachineState
*ms,
for (item = list; item; item = g_slist_next(item)) {
MemoryDeviceState *md = item->data;
const MemoryDeviceClass *mdc = MEMORY_DEVICE_GET_CLASS(OBJECT(md));
+ const char *id = memory_device_id(md);
uint64_t md_size, md_addr;
md_addr = mdc->get_addr(md);
@@ -178,8 +195,8 @@ static uint64_t memory_device_get_free_addr(MachineState
*ms,
if (ranges_overlap(md_addr, md_size, new_addr, size)) {
if (hint) {
- const DeviceState *d = DEVICE(md);
- error_setg(errp, "address range conflicts with '%s'", d->id);
+ error_setg(errp, "address range conflicts with '%s'",
+ id ? id : 0);
goto out;
}
new_addr = QEMU_ALIGN_UP(md_addr + md_size, align);
diff --git a/include/hw/mem/memory-device.h b/include/hw/mem/memory-device.h
index 05cb9437b7..324cc45b6f 100644
--- a/include/hw/mem/memory-device.h
+++ b/include/hw/mem/memory-device.h
@@ -54,6 +54,7 @@ typedef struct MemoryDeviceClass {
MemoryDeviceInfo *info);
} MemoryDeviceClass;
+const char *memory_device_id(const MemoryDeviceState *md);
MemoryDeviceInfoList *qmp_memory_device_list(void);
uint64_t get_plugged_memory_size(void);
void memory_device_pre_plug(MemoryDeviceState *md, MachineState *ms,
--
2.17.1
- [Qemu-devel] [PATCH v2 04/20] memory-device: get_region_size()/get_plugged_size() might fail, (continued)
- [Qemu-devel] [PATCH v2 04/20] memory-device: get_region_size()/get_plugged_size() might fail, David Hildenbrand, 2018/08/29
- [Qemu-devel] [PATCH v2 05/20] memory-device: convert get_region_size() to get_memory_region(), David Hildenbrand, 2018/08/29
- [Qemu-devel] [PATCH v2 06/20] memory-device: document MemoryDeviceClass, David Hildenbrand, 2018/08/29
- [Qemu-devel] [PATCH v2 07/20] memory-device: add device class function set_addr(), David Hildenbrand, 2018/08/29
- [Qemu-devel] [PATCH v2 08/20] pc-dimm: implement memory device class function set_addr(), David Hildenbrand, 2018/08/29
- [Qemu-devel] [PATCH v2 09/20] memory-device: complete factoring out pre_plug handling, David Hildenbrand, 2018/08/29
- [Qemu-devel] [PATCH v2 10/20] memory-device: complete factoring out plug handling, David Hildenbrand, 2018/08/29
- [Qemu-devel] [PATCH v2 11/20] memory-device: complete factoring out unplug handling, David Hildenbrand, 2018/08/29
- [Qemu-devel] [PATCH v2 12/20] memory-device: trace when pre_assigning/assigning/unassigning addresses, David Hildenbrand, 2018/08/29
- [Qemu-devel] [PATCH v2 13/20] hw/acpi-build: only indicate nvdimm and pc-dimm, David Hildenbrand, 2018/08/29
- [Qemu-devel] [PATCH v2 14/20] memory-device: ids of virtio based devices are special,
David Hildenbrand <=
- Re: [Qemu-devel] [PATCH v2 14/20] memory-device: ids of virtio based devices are special, Dr. David Alan Gilbert, 2018/08/31
- Re: [Qemu-devel] [PATCH v2 14/20] memory-device: ids of virtio based devices are special, Dr. David Alan Gilbert, 2018/08/31
- Re: [Qemu-devel] [PATCH v2 14/20] memory-device: ids of virtio based devices are special, David Hildenbrand, 2018/08/31
- Re: [Qemu-devel] [PATCH v2 14/20] memory-device: ids of virtio based devices are special, Dr. David Alan Gilbert, 2018/08/31
- Re: [Qemu-devel] [PATCH v2 14/20] memory-device: ids of virtio based devices are special, David Hildenbrand, 2018/08/31
- Re: [Qemu-devel] [PATCH v2 14/20] memory-device: ids of virtio based devices are special, Dr. David Alan Gilbert, 2018/08/31
- Re: [Qemu-devel] [PATCH v2 14/20] memory-device: ids of virtio based devices are special, Eric Blake, 2018/08/31
Re: [Qemu-devel] [PATCH v2 14/20] memory-device: ids of virtio based devices are special, Eduardo Habkost, 2018/08/31