[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [Qemu-devel] [PATCH v2 14/20] memory-device: ids of virtio based dev
From: |
Dr. David Alan Gilbert |
Subject: |
Re: [Qemu-devel] [PATCH v2 14/20] memory-device: ids of virtio based devices are special |
Date: |
Fri, 31 Aug 2018 11:38:56 +0100 |
User-agent: |
Mutt/1.10.1 (2018-07-13) |
Actually on second thoughts, a question:
* David Hildenbrand (address@hidden) wrote:
> 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);
What's that 'id ? id : 0' trick for?
Dave
> 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
>
--
Dr. David Alan Gilbert / address@hidden / Manchester, UK
- [Qemu-devel] [PATCH v2 06/20] memory-device: document MemoryDeviceClass, (continued)
- [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, 2018/08/29
- 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 <=
- 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
[Qemu-devel] [PATCH v2 15/20] virtio-pmem: prototype, David Hildenbrand, 2018/08/29