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