On 31.08.2018 13:23, Eduardo Habkost wrote: > On Wed, Aug 29, 2018 at 05:36:18PM +0200, David Hildenbrand 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 <da...@redhat.com> >> --- >> 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; > > I don't like having virtio-specific code on memory-device.c. > What about making it generic? Let device 2 register a read-only > property for the user-visible ID, and make memory_device_id() use > that property if it's present.
Valid point. Or avoid properties and add a function to the memory-device class? -- Thanks, David / dhildenb