qemu-devel
[Top][All Lists]
Advanced

[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: David Hildenbrand
Subject: Re: [Qemu-devel] [PATCH v2 14/20] memory-device: ids of virtio based devices are special
Date: Fri, 31 Aug 2018 13:26:03 +0200
User-agent: Mozilla/5.0 (X11; Linux x86_64; rv:52.0) Gecko/20100101 Thunderbird/52.9.1

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 <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;
> 
> 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



reply via email to

[Prev in Thread] Current Thread [Next in Thread]