From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:37114) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UmeLV-000576-CQ for qemu-devel@nongnu.org; Wed, 12 Jun 2013 02:15:51 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UmeLT-0001ue-Vx for qemu-devel@nongnu.org; Wed, 12 Jun 2013 02:15:49 -0400 From: fred.konrad@greensocs.com Date: Wed, 12 Jun 2013 08:15:17 +0200 Message-Id: <1371017717-5439-1-git-send-email-fred.konrad@greensocs.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [RESEND PATCH] virtio-scsi: forward scsibus for virtio-scsi-pci. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: aliguori@us.ibm.com, qemu-devel@nongnu.org Cc: mst@redhat.com, aik@ozlabs.ru, mark.burton@greensocs.com, qemu-stable@nongnu.org, pbonzini@redhat.com, fred.konrad@greensocs.com From: KONRAD Frederic This fix a bug with scsi hotplug on virtio-scsi-pci: As virtio-scsi-pci doesn't have any scsi bus, we need to forward scsi-hot= -add to the virtio-scsi-device plugged on the virtio-bus. Cc: qemu-stable@nongnu.org Reported-by: Alexey Kardashevskiy Reviewed-by: Andreas F=C3=A4rber Signed-off-by: KONRAD Frederic --- hw/pci/pci-hotplug.c | 19 +++++++++++++++++-- 1 file changed, 17 insertions(+), 2 deletions(-) diff --git a/hw/pci/pci-hotplug.c b/hw/pci/pci-hotplug.c index 12287d1..c708752 100644 --- a/hw/pci/pci-hotplug.c +++ b/hw/pci/pci-hotplug.c @@ -30,6 +30,8 @@ #include "monitor/monitor.h" #include "hw/scsi/scsi.h" #include "hw/virtio/virtio-blk.h" +#include "hw/virtio/virtio-scsi.h" +#include "hw/virtio/virtio-pci.h" #include "qemu/config-file.h" #include "sysemu/blockdev.h" #include "qapi/error.h" @@ -79,13 +81,26 @@ static int scsi_hot_add(Monitor *mon, DeviceState *ad= apter, { SCSIBus *scsibus; SCSIDevice *scsidev; + VirtIOPCIProxy *virtio_proxy; =20 scsibus =3D (SCSIBus *) object_dynamic_cast(OBJECT(QLIST_FIRST(&adapter->child_bus)), TYPE_SCSI_BUS); if (!scsibus) { - error_report("Device is not a SCSI adapter"); - return -1; + /* + * Check if the adapter is a virtio-scsi-pci, and forward scsi_h= ot_add + * to the virtio-scsi-device. + */ + if (!object_dynamic_cast(OBJECT(adapter), TYPE_VIRTIO_SCSI_PCI))= { + error_report("Device is not a SCSI adapter"); + return -1; + } + virtio_proxy =3D VIRTIO_PCI(adapter); + adapter =3D DEVICE(virtio_proxy->bus.vdev); + scsibus =3D (SCSIBus *) + object_dynamic_cast(OBJECT(QLIST_FIRST(&adapter->child= _bus)), + TYPE_SCSI_BUS); + assert(scsibus); } =20 /* --=20 1.8.1.4