From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:58611) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UIeMm-0002x0-M6 for qemu-devel@nongnu.org; Thu, 21 Mar 2013 08:13:12 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UIeMi-0000c4-QI for qemu-devel@nongnu.org; Thu, 21 Mar 2013 08:13:08 -0400 Received: from e06smtp14.uk.ibm.com ([195.75.94.110]:54246) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UIeMi-0000bl-IW for qemu-devel@nongnu.org; Thu, 21 Mar 2013 08:13:04 -0400 Received: from /spool/local by e06smtp14.uk.ibm.com with IBM ESMTP SMTP Gateway: Authorized Use Only! Violators will be prosecuted for from ; Thu, 21 Mar 2013 12:09:02 -0000 Received: from b06cxnps3075.portsmouth.uk.ibm.com (d06relay10.portsmouth.uk.ibm.com [9.149.109.195]) by d06dlp01.portsmouth.uk.ibm.com (Postfix) with ESMTP id 6FDCD17D801B for ; Thu, 21 Mar 2013 12:13:41 +0000 (GMT) Received: from d06av06.portsmouth.uk.ibm.com (d06av06.portsmouth.uk.ibm.com [9.149.37.217]) by b06cxnps3075.portsmouth.uk.ibm.com (8.13.8/8.13.8/NCO v10.0) with ESMTP id r2LCCnsx52690990 for ; Thu, 21 Mar 2013 12:12:49 GMT Received: from d06av06.portsmouth.uk.ibm.com (loopback [127.0.0.1]) by d06av06.portsmouth.uk.ibm.com (8.14.4/8.13.1/NCO v10.0 AVout) with ESMTP id r2LCCwlJ003925 for ; Thu, 21 Mar 2013 06:12:58 -0600 Date: Thu, 21 Mar 2013 13:12:56 +0100 From: Cornelia Huck Message-ID: <20130321131256.366805d3@gondolin> In-Reply-To: <1363788463-27462-5-git-send-email-fred.konrad@greensocs.com> References: <1363788463-27462-1-git-send-email-fred.konrad@greensocs.com> <1363788463-27462-5-git-send-email-fred.konrad@greensocs.com> Mime-Version: 1.0 Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: 7bit Subject: Re: [Qemu-devel] [PATCH v4 04/10] virtio-scsi: add the virtio-scsi device. List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: fred.konrad@greensocs.com Cc: peter.maydell@linaro.org, aliguori@us.ibm.com, mark.burton@greensocs.com, qemu-devel@nongnu.org, Paolo Bonzini On Wed, 20 Mar 2013 15:07:37 +0100 fred.konrad@greensocs.com wrote: > From: KONRAD Frederic > > Create virtio-scsi which extends virtio-device, so it can be connected on > virtio-bus. > > Signed-off-by: KONRAD Frederic > --- > hw/virtio-scsi.c | 85 ++++++++++++++++++++++++++++++++++++++++++++++++++++---- > hw/virtio-scsi.h | 5 ++++ > 2 files changed, 85 insertions(+), 5 deletions(-) > > diff --git a/hw/virtio-scsi.c b/hw/virtio-scsi.c > index 08fcb80..ca9ceb1 100644 > --- a/hw/virtio-scsi.c > +++ b/hw/virtio-scsi.c > @@ -17,6 +17,7 @@ > #include "qemu/error-report.h" > #include > #include > +#include "hw/virtio-bus.h" > > #define VIRTIO_SCSI_VQ_SIZE 128 > #define VIRTIO_SCSI_CDB_SIZE 32 > @@ -686,15 +687,30 @@ static struct SCSIBusInfo virtio_scsi_scsi_info = { > .load_request = virtio_scsi_load_request, > }; > > -VirtIODevice *virtio_scsi_init(DeviceState *dev, VirtIOSCSIConf *proxyconf) > +static VirtIODevice *virtio_scsi_common_init(DeviceState *dev, > + VirtIOSCSIConf *proxyconf, > + VirtIOSCSI **ps) > { > - VirtIOSCSI *s; > + VirtIOSCSI *s = *ps; > static int virtio_scsi_id; > int i; > > - s = (VirtIOSCSI *)virtio_common_init("virtio-scsi", VIRTIO_ID_SCSI, > - sizeof(VirtIOSCSIConfig), > - sizeof(VirtIOSCSI)); > + /* > + * We have two cases here: the old virtio-net-pci device, and the > + * refactored virtio-net. Confusing comment: Neither is this dealing with virtio-net, nor do we have only virtio-net-pci :) > + */ > + > + if (s == NULL) { > + /* virtio-scsi-pci */ > + s = (VirtIOSCSI *)virtio_common_init("virtio-scsi", VIRTIO_ID_SCSI, > + sizeof(VirtIOSCSIConfig), > + sizeof(VirtIOSCSI)); > + } else { > + /* virtio-scsi */ > + virtio_init(VIRTIO_DEVICE(s), "virtio-scsi", VIRTIO_ID_SCSI, > + sizeof(VirtIOSCSIConfig)); > + } > + > s->cmd_vqs = g_malloc0(proxyconf->num_queues * sizeof(VirtQueue *)); > > s->qdev = dev; > @@ -726,6 +742,12 @@ VirtIODevice *virtio_scsi_init(DeviceState *dev, VirtIOSCSIConf *proxyconf) > return &s->vdev; > } > > +VirtIODevice *virtio_scsi_init(DeviceState *dev, VirtIOSCSIConf *proxyconf) > +{ > + VirtIOSCSI *s = NULL; > + return virtio_scsi_common_init(dev, proxyconf, &s); > +} > + > void virtio_scsi_exit(VirtIODevice *vdev) > { > VirtIOSCSI *s = (VirtIOSCSI *)vdev; > @@ -733,3 +755,56 @@ void virtio_scsi_exit(VirtIODevice *vdev) > g_free(s->cmd_vqs); > virtio_cleanup(vdev); > } > + > +static int virtio_scsi_device_init(VirtIODevice *vdev) > +{ > + DeviceState *qdev = DEVICE(vdev); > + VirtIOSCSI *s = VIRTIO_SCSI(vdev); > + if (virtio_scsi_common_init(qdev, &(s->conf), &s) == NULL) { > + return -1; > + } > + return 0; > +} > + > +static int virtio_scsi_device_exit(DeviceState *qdev) > +{ > + VirtIOSCSI *s = VIRTIO_SCSI(qdev); > + VirtIODevice *vdev = VIRTIO_DEVICE(qdev); > + > + unregister_savevm(qdev, "virtio-scsi", s); > + g_free(s->cmd_vqs); > + virtio_common_cleanup(vdev); > + return 0; > +} > + > +static Property virtio_scsi_properties[] = { > + DEFINE_VIRTIO_SCSI_PROPERTIES(VirtIOSCSI, conf), > + DEFINE_PROP_END_OF_LIST(), > +}; > + > +static void virtio_scsi_class_init(ObjectClass *klass, void *data) > +{ > + DeviceClass *dc = DEVICE_CLASS(klass); > + VirtioDeviceClass *vdc = VIRTIO_DEVICE_CLASS(klass); > + dc->exit = virtio_scsi_device_exit; > + dc->props = virtio_scsi_properties; > + vdc->init = virtio_scsi_device_init; > + vdc->get_config = virtio_scsi_get_config; > + vdc->set_config = virtio_scsi_set_config; > + vdc->get_features = virtio_scsi_get_features; > + vdc->reset = virtio_scsi_reset; > +} > + > +static const TypeInfo virtio_scsi_info = { > + .name = TYPE_VIRTIO_SCSI, > + .parent = TYPE_VIRTIO_DEVICE, > + .instance_size = sizeof(VirtIOSCSI), > + .class_init = virtio_scsi_class_init, > +}; > + > +static void virtio_register_types(void) > +{ > + type_register_static(&virtio_scsi_info); > +} > + > +type_init(virtio_register_types) > diff --git a/hw/virtio-scsi.h b/hw/virtio-scsi.h > index 536c4c3..9ff639e 100644 > --- a/hw/virtio-scsi.h > +++ b/hw/virtio-scsi.h > @@ -18,6 +18,11 @@ > #include "hw/pci/pci.h" > #include "hw/scsi.h" > > +#define TYPE_VIRTIO_SCSI "virtio-scsi" > +#define VIRTIO_SCSI(obj) \ > + OBJECT_CHECK(VirtIOSCSI, (obj), TYPE_VIRTIO_SCSI) > + > + > /* The ID for virtio_scsi */ > #define VIRTIO_ID_SCSI 8 >