Il 24/09/2014 13:48, Igor Mammedov ha scritto:
> Check if 'handler' implements HOTPLUG_HANDLER interface
> before setting it, if it's not then do nothing and leave
> bus not hotpluggable.
> 
> That would allow to reuse the same code for creating bus
> for example 'scsi_bus_new()' for both hotpluggable and not
> hotpluggable controllers.
> 
> Signed-off-by: Igor Mammedov <[email protected]>
> ---
> PS:
> Keep allow_hotplug = 1 before check to preserve legacy
> behaviour for incremental conversion without breaking
> bisect-ability. I will be removed later in series.
> ---
>  include/hw/qdev-core.h | 7 ++++++-
>  1 file changed, 6 insertions(+), 1 deletion(-)
> 
> diff --git a/include/hw/qdev-core.h b/include/hw/qdev-core.h
> index ba812c5..653ff4a 100644
> --- a/include/hw/qdev-core.h
> +++ b/include/hw/qdev-core.h
> @@ -366,9 +366,14 @@ char *qdev_get_dev_path(DeviceState *dev);
>  static inline void qbus_set_hotplug_handler(BusState *bus, DeviceState 
> *handler,
>                                              Error **errp)
>  {
> +    bus->allow_hotplug = 1;
> +
> +    if (!object_dynamic_cast(OBJECT(handler), TYPE_HOTPLUG_HANDLER)) {
> +        return;
> +    }
> +
>      object_property_set_link(OBJECT(bus), OBJECT(handler),
>                               QDEV_HOTPLUG_HANDLER_PROPERTY, errp);
> -    bus->allow_hotplug = 1;
>  }
>  
>  static inline bool qbus_is_hotpluggable(BusState *bus)
> 

Ok, so scsi won't error_abort, but you are actually breaking
hotplug/unplug on HBAs other than virtio-scsi and pvscsi.  On those HBAs
you can actually do surprise removal and hotplug, but you have to
manually rescan the bus in the virtual machine.

Reviewed-by: Paolo Bonzini <[email protected]>


Reply via email to