On 12.05.2018 16:47, Paolo Bonzini wrote:
> On 11/05/2018 15:19, David Hildenbrand wrote:
>> + if (dev->parent_bus) {
>> + if (object_dynamic_cast(OBJECT(dev), TYPE_MEMORY_DEVICE)) {
>> + return HOTPLUG_HANDLER(machine);
>> + }
>> + }
>> +
>
> How do you get here with a MemoryDevice that has !dev->parent_bus?
>
Excellent question :)
This is for now (for pc and spapr) a theoretical case, but I
included it to make all hotplug handler look alike and also show for
other potential device (interfaces) how it should be handled.
I'll give you the s390x example I had in mind:
s390x cannot hotplug dimms. dimms, however are busless devices that
implement the MemoryDevice interface.
If we would simply always indicate this way that we have a hotplug
handler, e.g. the check in qdev_device_add() would not trigger:
...
if (bus) {
qdev_set_parent_bus(dev, bus);
} else if (qdev_hotplug && !qdev_get_machine_hotplug_handler(dev)) {
/* No bus, no machine hotplug handler --> device is not hotpluggable */
error_setg(&err, "Device '%s' can not be hotplugged on this machine",
driver);
goto err_del_dev;
}
...
So the rational is "if its a busless device and I (the machine)
am not able to fully plug it, I must also not partially plug it."
However, right now I am not sure (due to qdev_hotplug) if this
is enough.
> Thanks,
>
> Paolo
>
--
Thanks,
David / dhildenb