From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([208.118.235.92]:37189) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UIer3-0002u6-P8 for qemu-devel@nongnu.org; Thu, 21 Mar 2013 08:44:33 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1UIer1-0003EI-SZ for qemu-devel@nongnu.org; Thu, 21 Mar 2013 08:44:25 -0400 Received: from greensocs.com ([87.106.252.221]:38457 helo=s15328186.onlinehome-server.info) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1UIer1-0003E7-Jh for qemu-devel@nongnu.org; Thu, 21 Mar 2013 08:44:23 -0400 Message-ID: <514B00A3.2030000@greensocs.com> Date: Thu, 21 Mar 2013 13:44:19 +0100 From: =?ISO-8859-1?Q?KONRAD_Fr=E9d=E9ric?= MIME-Version: 1.0 References: <1363788463-27462-1-git-send-email-fred.konrad@greensocs.com> <1363788463-27462-5-git-send-email-fred.konrad@greensocs.com> <20130321131256.366805d3@gondolin> In-Reply-To: <20130321131256.366805d3@gondolin> Content-Type: text/plain; charset=ISO-8859-1; format=flowed 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: Cornelia Huck Cc: peter.maydell@linaro.org, aliguori@us.ibm.com, mark.burton@greensocs.com, qemu-devel@nongnu.org, "Paolo Bonzini (supporter:SCSI)" On 21/03/2013 13:12, Cornelia Huck wrote: > 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 :) oops, sorry for that.. I copied the comment from virtio-net and forgot to change the name :). Note that it is removed in the step 09/10. Thanks, Fred > >> + */ >> + >> + 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 >>