All of lore.kernel.org
 help / color / mirror / Atom feed
* [Qemu-devel] [PATCH v4 00/10] virtio-scsi refactoring.
@ 2013-03-20 14:07 fred.konrad
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 01/10] virtio-scsi: don't use pointer for configuration fred.konrad
                   ` (10 more replies)
  0 siblings, 11 replies; 16+ messages in thread
From: fred.konrad @ 2013-03-20 14:07 UTC (permalink / raw)
  To: qemu-devel, aliguori
  Cc: cornelia.huck, peter.maydell, mark.burton, fred.konrad

From: KONRAD Frederic <fred.konrad@greensocs.com>

This is the next part of virtio-refactoring.

Basically it creates virtio-scsi device which extends virtio-device.
Then a virtio-scsi can be connected on a virtio-bus.
virtio-scsi-pci, virtio-scsi-s390x, virtio-scsi-ccw are created too, they extend
respectively virtio-pci, virtio-s390-device, virtio-ccw-device and have a
virtio-scsi.

You can checkout my branch here:

git://project.greensocs.com/qemu-virtio.git virtio-scsi-v4

Note that it is nearly the same series as virtio-blk refactoring. Though the 2nd
and the 3rd steps are a virtio-scsi specific.

I made basic tests (with linux guests) on:
 * qemu-system-i386

Changes v3 -> v4:
    * Added CCW device.
    * Fixed the configuration issue.

Thanks,

Fred

KONRAD Frederic (10):
  virtio-scsi: don't use pointer for configuration.
  virtio-scsi: allocate cmd_vqs array separately.
  virtio-scsi: moving host_features from properties to transport
    properties.
  virtio-scsi: add the virtio-scsi device.
  virtio-scsi-pci: switch to new API.
  virtio-scsi-s390: switch to the new API.
  virtio-scsi-ccw: switch to new API
  virtio-scsi: cleanup: use QOM casts.
  virtio-scsi: cleanup: init and exit functions.
  virtio-scsi: cleanup: remove qdev field.

 hw/s390x/s390-virtio-bus.c |  30 ++++++++---
 hw/s390x/s390-virtio-bus.h |  11 +++-
 hw/s390x/virtio-ccw.c      |  32 +++++++-----
 hw/s390x/virtio-ccw.h      |  12 ++++-
 hw/virtio-pci.c            | 119 ++++++++++++++++++++++---------------------
 hw/virtio-pci.h            |  15 +++++-
 hw/virtio-scsi.c           | 122 ++++++++++++++++++++++++++++++---------------
 hw/virtio-scsi.h           |  21 ++++----
 8 files changed, 230 insertions(+), 132 deletions(-)

-- 
1.7.11.7

^ permalink raw reply	[flat|nested] 16+ messages in thread

* [Qemu-devel] [PATCH v4 01/10] virtio-scsi: don't use pointer for configuration.
  2013-03-20 14:07 [Qemu-devel] [PATCH v4 00/10] virtio-scsi refactoring fred.konrad
@ 2013-03-20 14:07 ` fred.konrad
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 02/10] virtio-scsi: allocate cmd_vqs array separately fred.konrad
                   ` (9 subsequent siblings)
  10 siblings, 0 replies; 16+ messages in thread
From: fred.konrad @ 2013-03-20 14:07 UTC (permalink / raw)
  To: qemu-devel, aliguori
  Cc: cornelia.huck, peter.maydell, Paolo Bonzini, mark.burton, fred.konrad

From: KONRAD Frederic <fred.konrad@greensocs.com>

The configuration field must not be a pointer as it will be used for virtio-scsi
properties. So *conf is replaced by conf.

Signed-off-by: KONRAD Frederic <fred.konrad@greensocs.com>
---
 hw/virtio-scsi.c | 14 +++++++-------
 hw/virtio-scsi.h |  2 +-
 2 files changed, 8 insertions(+), 8 deletions(-)

diff --git a/hw/virtio-scsi.c b/hw/virtio-scsi.c
index 8620712..55191c5 100644
--- a/hw/virtio-scsi.c
+++ b/hw/virtio-scsi.c
@@ -237,7 +237,7 @@ static void virtio_scsi_save_request(QEMUFile *f, SCSIRequest *sreq)
     VirtIOSCSIReq *req = sreq->hba_private;
     uint32_t n = virtio_queue_get_id(req->vq) - 2;
 
-    assert(n < req->dev->conf->num_queues);
+    assert(n < req->dev->conf.num_queues);
     qemu_put_be32s(f, &n);
     qemu_put_buffer(f, (unsigned char *)&req->elem, sizeof(req->elem));
 }
@@ -251,7 +251,7 @@ static void *virtio_scsi_load_request(QEMUFile *f, SCSIRequest *sreq)
 
     req = g_malloc(sizeof(*req));
     qemu_get_be32s(f, &n);
-    assert(n < s->conf->num_queues);
+    assert(n < s->conf.num_queues);
     qemu_get_buffer(f, (unsigned char *)&req->elem, sizeof(req->elem));
     virtio_scsi_parse_req(s, s->cmd_vqs[n], req);
 
@@ -513,10 +513,10 @@ static void virtio_scsi_get_config(VirtIODevice *vdev,
     VirtIOSCSIConfig *scsiconf = (VirtIOSCSIConfig *)config;
     VirtIOSCSI *s = (VirtIOSCSI *)vdev;
 
-    stl_raw(&scsiconf->num_queues, s->conf->num_queues);
+    stl_raw(&scsiconf->num_queues, s->conf.num_queues);
     stl_raw(&scsiconf->seg_max, 128 - 2);
-    stl_raw(&scsiconf->max_sectors, s->conf->max_sectors);
-    stl_raw(&scsiconf->cmd_per_lun, s->conf->cmd_per_lun);
+    stl_raw(&scsiconf->max_sectors, s->conf.max_sectors);
+    stl_raw(&scsiconf->cmd_per_lun, s->conf.cmd_per_lun);
     stl_raw(&scsiconf->event_info_size, sizeof(VirtIOSCSIEvent));
     stl_raw(&scsiconf->sense_size, s->sense_size);
     stl_raw(&scsiconf->cdb_size, s->cdb_size);
@@ -698,7 +698,7 @@ VirtIODevice *virtio_scsi_init(DeviceState *dev, VirtIOSCSIConf *proxyconf)
                                          sizeof(VirtIOSCSIConfig), sz);
 
     s->qdev = dev;
-    s->conf = proxyconf;
+    s->conf = *proxyconf;
 
     /* TODO set up vdev function pointers */
     s->vdev.get_config = virtio_scsi_get_config;
@@ -710,7 +710,7 @@ VirtIODevice *virtio_scsi_init(DeviceState *dev, VirtIOSCSIConf *proxyconf)
                                    virtio_scsi_handle_ctrl);
     s->event_vq = virtio_add_queue(&s->vdev, VIRTIO_SCSI_VQ_SIZE,
                                    virtio_scsi_handle_event);
-    for (i = 0; i < s->conf->num_queues; i++) {
+    for (i = 0; i < s->conf.num_queues; i++) {
         s->cmd_vqs[i] = virtio_add_queue(&s->vdev, VIRTIO_SCSI_VQ_SIZE,
                                          virtio_scsi_handle_cmd);
     }
diff --git a/hw/virtio-scsi.h b/hw/virtio-scsi.h
index ccf1e42..6a0a95e 100644
--- a/hw/virtio-scsi.h
+++ b/hw/virtio-scsi.h
@@ -35,7 +35,7 @@ struct VirtIOSCSIConf {
 typedef struct VirtIOSCSI {
     VirtIODevice vdev;
     DeviceState *qdev;
-    VirtIOSCSIConf *conf;
+    VirtIOSCSIConf conf;
 
     SCSIBus bus;
     uint32_t sense_size;
-- 
1.7.11.7

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [Qemu-devel] [PATCH v4 02/10] virtio-scsi: allocate cmd_vqs array separately.
  2013-03-20 14:07 [Qemu-devel] [PATCH v4 00/10] virtio-scsi refactoring fred.konrad
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 01/10] virtio-scsi: don't use pointer for configuration fred.konrad
@ 2013-03-20 14:07 ` fred.konrad
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 03/10] virtio-scsi: moving host_features from properties to transport properties fred.konrad
                   ` (8 subsequent siblings)
  10 siblings, 0 replies; 16+ messages in thread
From: fred.konrad @ 2013-03-20 14:07 UTC (permalink / raw)
  To: qemu-devel, aliguori
  Cc: cornelia.huck, peter.maydell, Paolo Bonzini, mark.burton, fred.konrad

From: KONRAD Frederic <fred.konrad@greensocs.com>

Allocate/Free the cmd_vqs array separately to have a fixed size device.

Signed-off-by: KONRAD Frederic <fred.konrad@greensocs.com>
---
 hw/virtio-scsi.c | 7 ++++---
 hw/virtio-scsi.h | 2 +-
 2 files changed, 5 insertions(+), 4 deletions(-)

diff --git a/hw/virtio-scsi.c b/hw/virtio-scsi.c
index 55191c5..08fcb80 100644
--- a/hw/virtio-scsi.c
+++ b/hw/virtio-scsi.c
@@ -690,12 +690,12 @@ VirtIODevice *virtio_scsi_init(DeviceState *dev, VirtIOSCSIConf *proxyconf)
 {
     VirtIOSCSI *s;
     static int virtio_scsi_id;
-    size_t sz;
     int i;
 
-    sz = sizeof(VirtIOSCSI) + proxyconf->num_queues * sizeof(VirtQueue *);
     s = (VirtIOSCSI *)virtio_common_init("virtio-scsi", VIRTIO_ID_SCSI,
-                                         sizeof(VirtIOSCSIConfig), sz);
+                                         sizeof(VirtIOSCSIConfig),
+                                         sizeof(VirtIOSCSI));
+    s->cmd_vqs = g_malloc0(proxyconf->num_queues * sizeof(VirtQueue *));
 
     s->qdev = dev;
     s->conf = *proxyconf;
@@ -730,5 +730,6 @@ void virtio_scsi_exit(VirtIODevice *vdev)
 {
     VirtIOSCSI *s = (VirtIOSCSI *)vdev;
     unregister_savevm(s->qdev, "virtio-scsi", s);
+    g_free(s->cmd_vqs);
     virtio_cleanup(vdev);
 }
diff --git a/hw/virtio-scsi.h b/hw/virtio-scsi.h
index 6a0a95e..fb83b67 100644
--- a/hw/virtio-scsi.h
+++ b/hw/virtio-scsi.h
@@ -44,7 +44,7 @@ typedef struct VirtIOSCSI {
     bool events_dropped;
     VirtQueue *ctrl_vq;
     VirtQueue *event_vq;
-    VirtQueue *cmd_vqs[0];
+    VirtQueue **cmd_vqs;
 } VirtIOSCSI;
 
 #define DEFINE_VIRTIO_SCSI_PROPERTIES(_state, _features_field, _conf_field) \
-- 
1.7.11.7

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [Qemu-devel] [PATCH v4 03/10] virtio-scsi: moving host_features from properties to transport properties.
  2013-03-20 14:07 [Qemu-devel] [PATCH v4 00/10] virtio-scsi refactoring fred.konrad
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 01/10] virtio-scsi: don't use pointer for configuration fred.konrad
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 02/10] virtio-scsi: allocate cmd_vqs array separately fred.konrad
@ 2013-03-20 14:07 ` fred.konrad
  2013-03-21 12:10   ` Cornelia Huck
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 04/10] virtio-scsi: add the virtio-scsi device fred.konrad
                   ` (7 subsequent siblings)
  10 siblings, 1 reply; 16+ messages in thread
From: fred.konrad @ 2013-03-20 14:07 UTC (permalink / raw)
  To: qemu-devel, aliguori
  Cc: cornelia.huck, peter.maydell, Paolo Bonzini, mark.burton, fred.konrad

From: KONRAD Frederic <fred.konrad@greensocs.com>

host_features field is part of the transport device. So move all the
host_features related properties into transport device.

Signed-off-by: KONRAD Frederic <fred.konrad@greensocs.com>
---
 hw/s390x/s390-virtio-bus.c | 7 ++++++-
 hw/s390x/virtio-ccw.c      | 7 ++++++-
 hw/virtio-pci.c            | 7 ++++++-
 hw/virtio-scsi.h           | 9 +++------
 4 files changed, 21 insertions(+), 9 deletions(-)

diff --git a/hw/s390x/s390-virtio-bus.c b/hw/s390x/s390-virtio-bus.c
index 76bc99a..265d94f 100644
--- a/hw/s390x/s390-virtio-bus.c
+++ b/hw/s390x/s390-virtio-bus.c
@@ -543,7 +543,12 @@ static const TypeInfo virtio_s390_device_info = {
 };
 
 static Property s390_virtio_scsi_properties[] = {
-    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtIOS390Device, host_features, scsi),
+    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtIOS390Device, scsi),
+    DEFINE_VIRTIO_COMMON_FEATURES(VirtIOS390Device, host_features),
+    DEFINE_PROP_BIT("hotplug", VirtIOS390Device, host_features,
+                    VIRTIO_SCSI_F_HOTPLUG, true),
+    DEFINE_PROP_BIT("param_change", VirtIOS390Device, host_features,
+                    VIRTIO_SCSI_F_CHANGE, true),
     DEFINE_PROP_END_OF_LIST(),
 };
 
diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
index 9688835..71a51d9 100644
--- a/hw/s390x/virtio-ccw.c
+++ b/hw/s390x/virtio-ccw.c
@@ -836,7 +836,12 @@ static const TypeInfo virtio_ccw_balloon = {
 
 static Property virtio_ccw_scsi_properties[] = {
     DEFINE_PROP_STRING("devno", VirtioCcwDevice, bus_id),
-    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtioCcwDevice, host_features[0], scsi),
+    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtioCcwDevice, scsi),
+    DEFINE_VIRTIO_COMMON_FEATURES(VirtioCcwDevice, host_features[0]),
+    DEFINE_PROP_BIT("hotplug", VirtioCcwDevice, host_features[0],
+                    VIRTIO_SCSI_F_HOTPLUG, true),
+    DEFINE_PROP_BIT("param_change", VirtioCcwDevice, host_features[0],
+                    VIRTIO_SCSI_F_CHANGE, true),
     DEFINE_PROP_END_OF_LIST(),
 };
 
diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
index f3ece78..0665b04 100644
--- a/hw/virtio-pci.c
+++ b/hw/virtio-pci.c
@@ -1221,7 +1221,12 @@ static void virtio_scsi_exit_pci(PCIDevice *pci_dev)
 static Property virtio_scsi_properties[] = {
     DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags, VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true),
     DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, DEV_NVECTORS_UNSPECIFIED),
-    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtIOPCIProxy, host_features, scsi),
+    DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features),
+    DEFINE_PROP_BIT("hotplug", VirtIOPCIProxy, host_features,
+                    VIRTIO_SCSI_F_HOTPLUG, true),
+    DEFINE_PROP_BIT("param_change", VirtIOPCIProxy, host_features,
+                    VIRTIO_SCSI_F_CHANGE, true),
+    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtIOPCIProxy, scsi),
     DEFINE_PROP_END_OF_LIST(),
 };
 
diff --git a/hw/virtio-scsi.h b/hw/virtio-scsi.h
index fb83b67..536c4c3 100644
--- a/hw/virtio-scsi.h
+++ b/hw/virtio-scsi.h
@@ -47,12 +47,9 @@ typedef struct VirtIOSCSI {
     VirtQueue **cmd_vqs;
 } VirtIOSCSI;
 
-#define DEFINE_VIRTIO_SCSI_PROPERTIES(_state, _features_field, _conf_field) \
-    DEFINE_VIRTIO_COMMON_FEATURES(_state, _features_field), \
+#define DEFINE_VIRTIO_SCSI_PROPERTIES(_state, _conf_field) \
     DEFINE_PROP_UINT32("num_queues", _state, _conf_field.num_queues, 1), \
-    DEFINE_PROP_UINT32("max_sectors", _state, _conf_field.max_sectors, 0xFFFF), \
-    DEFINE_PROP_UINT32("cmd_per_lun", _state, _conf_field.cmd_per_lun, 128), \
-    DEFINE_PROP_BIT("hotplug", _state, _features_field, VIRTIO_SCSI_F_HOTPLUG, true), \
-    DEFINE_PROP_BIT("param_change", _state, _features_field, VIRTIO_SCSI_F_CHANGE, true)
+    DEFINE_PROP_UINT32("max_sectors", _state, _conf_field.max_sectors, 0xFFFF),\
+    DEFINE_PROP_UINT32("cmd_per_lun", _state, _conf_field.cmd_per_lun, 128)
 
 #endif /* _QEMU_VIRTIO_SCSI_H */
-- 
1.7.11.7

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [Qemu-devel] [PATCH v4 04/10] virtio-scsi: add the virtio-scsi device.
  2013-03-20 14:07 [Qemu-devel] [PATCH v4 00/10] virtio-scsi refactoring fred.konrad
                   ` (2 preceding siblings ...)
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 03/10] virtio-scsi: moving host_features from properties to transport properties fred.konrad
@ 2013-03-20 14:07 ` fred.konrad
  2013-03-21 12:12   ` Cornelia Huck
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 05/10] virtio-scsi-pci: switch to new API fred.konrad
                   ` (6 subsequent siblings)
  10 siblings, 1 reply; 16+ messages in thread
From: fred.konrad @ 2013-03-20 14:07 UTC (permalink / raw)
  To: qemu-devel, aliguori
  Cc: cornelia.huck, peter.maydell, Paolo Bonzini, mark.burton, fred.konrad

From: KONRAD Frederic <fred.konrad@greensocs.com>

Create virtio-scsi which extends virtio-device, so it can be connected on
virtio-bus.

Signed-off-by: KONRAD Frederic <fred.konrad@greensocs.com>
---
 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 <hw/scsi.h>
 #include <hw/scsi-defs.h>
+#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.
+     */
+
+    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
 
-- 
1.7.11.7

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [Qemu-devel] [PATCH v4 05/10] virtio-scsi-pci: switch to new API.
  2013-03-20 14:07 [Qemu-devel] [PATCH v4 00/10] virtio-scsi refactoring fred.konrad
                   ` (3 preceding siblings ...)
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 04/10] virtio-scsi: add the virtio-scsi device fred.konrad
@ 2013-03-20 14:07 ` fred.konrad
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 06/10] virtio-scsi-s390: switch to the " fred.konrad
                   ` (5 subsequent siblings)
  10 siblings, 0 replies; 16+ messages in thread
From: fred.konrad @ 2013-03-20 14:07 UTC (permalink / raw)
  To: qemu-devel, aliguori
  Cc: cornelia.huck, peter.maydell, mark.burton, fred.konrad

From: KONRAD Frederic <fred.konrad@greensocs.com>

Here the virtio-scsi-pci is modified for the new API. The device virtio-scsi-pci
extends virtio-pci. It creates and connects a virtio-scsi during the init.

Signed-off-by: KONRAD Frederic <fred.konrad@greensocs.com>
---
 hw/virtio-pci.c | 124 ++++++++++++++++++++++++++++----------------------------
 hw/virtio-pci.h |  15 ++++++-
 2 files changed, 75 insertions(+), 64 deletions(-)

diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
index 0665b04..3ba702c 100644
--- a/hw/virtio-pci.c
+++ b/hw/virtio-pci.c
@@ -1190,68 +1190,6 @@ static const TypeInfo virtio_rng_info = {
     .class_init    = virtio_rng_class_init,
 };
 
-static int virtio_scsi_init_pci(PCIDevice *pci_dev)
-{
-    VirtIOPCIProxy *proxy = DO_UPCAST(VirtIOPCIProxy, pci_dev, pci_dev);
-    VirtIODevice *vdev;
-
-    vdev = virtio_scsi_init(&pci_dev->qdev, &proxy->scsi);
-    if (!vdev) {
-        return -EINVAL;
-    }
-
-    vdev->nvectors = proxy->nvectors == DEV_NVECTORS_UNSPECIFIED
-                                        ? proxy->scsi.num_queues + 3
-                                        : proxy->nvectors;
-    virtio_init_pci(proxy, vdev);
-
-    /* make the actual value visible */
-    proxy->nvectors = vdev->nvectors;
-    return 0;
-}
-
-static void virtio_scsi_exit_pci(PCIDevice *pci_dev)
-{
-    VirtIOPCIProxy *proxy = DO_UPCAST(VirtIOPCIProxy, pci_dev, pci_dev);
-
-    virtio_scsi_exit(proxy->vdev);
-    virtio_exit_pci(pci_dev);
-}
-
-static Property virtio_scsi_properties[] = {
-    DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags, VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true),
-    DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, DEV_NVECTORS_UNSPECIFIED),
-    DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features),
-    DEFINE_PROP_BIT("hotplug", VirtIOPCIProxy, host_features,
-                    VIRTIO_SCSI_F_HOTPLUG, true),
-    DEFINE_PROP_BIT("param_change", VirtIOPCIProxy, host_features,
-                    VIRTIO_SCSI_F_CHANGE, true),
-    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtIOPCIProxy, scsi),
-    DEFINE_PROP_END_OF_LIST(),
-};
-
-static void virtio_scsi_class_init(ObjectClass *klass, void *data)
-{
-    DeviceClass *dc = DEVICE_CLASS(klass);
-    PCIDeviceClass *k = PCI_DEVICE_CLASS(klass);
-
-    k->init = virtio_scsi_init_pci;
-    k->exit = virtio_scsi_exit_pci;
-    k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
-    k->device_id = PCI_DEVICE_ID_VIRTIO_SCSI;
-    k->revision = 0x00;
-    k->class_id = PCI_CLASS_STORAGE_SCSI;
-    dc->reset = virtio_pci_reset;
-    dc->props = virtio_scsi_properties;
-}
-
-static const TypeInfo virtio_scsi_info = {
-    .name          = "virtio-scsi-pci",
-    .parent        = TYPE_PCI_DEVICE,
-    .instance_size = sizeof(VirtIOPCIProxy),
-    .class_init    = virtio_scsi_class_init,
-};
-
 #ifdef CONFIG_VIRTFS
 static int virtio_9p_init_pci(PCIDevice *pci_dev)
 {
@@ -1458,6 +1396,66 @@ static const TypeInfo virtio_blk_pci_info = {
     .class_init    = virtio_blk_pci_class_init,
 };
 
+/* virtio-scsi-pci */
+
+static Property virtio_scsi_pci_properties[] = {
+    DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags,
+                    VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true),
+    DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors,
+                       DEV_NVECTORS_UNSPECIFIED),
+    DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features),
+    DEFINE_PROP_BIT("hotplug", VirtIOPCIProxy, host_features,
+                    VIRTIO_SCSI_F_HOTPLUG, true),
+    DEFINE_PROP_BIT("param_change", VirtIOPCIProxy, host_features,
+                    VIRTIO_SCSI_F_CHANGE, true),
+    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtIOSCSIPCI, vdev.conf),
+    DEFINE_PROP_END_OF_LIST(),
+};
+
+static int virtio_scsi_pci_init_pci(VirtIOPCIProxy *vpci_dev)
+{
+    VirtIOSCSIPCI *dev = VIRTIO_SCSI_PCI(vpci_dev);
+    DeviceState *vdev = DEVICE(&dev->vdev);
+
+    if (vpci_dev->nvectors == DEV_NVECTORS_UNSPECIFIED) {
+        vpci_dev->nvectors = dev->vdev.conf.num_queues + 3;
+    }
+
+    qdev_set_parent_bus(vdev, BUS(&vpci_dev->bus));
+    if (qdev_init(vdev) < 0) {
+        return -1;
+    }
+    return 0;
+}
+
+static void virtio_scsi_pci_class_init(ObjectClass *klass, void *data)
+{
+    DeviceClass *dc = DEVICE_CLASS(klass);
+    VirtioPCIClass *k = VIRTIO_PCI_CLASS(klass);
+    PCIDeviceClass *pcidev_k = PCI_DEVICE_CLASS(klass);
+    k->init = virtio_scsi_pci_init_pci;
+    dc->props = virtio_scsi_pci_properties;
+    pcidev_k->vendor_id = PCI_VENDOR_ID_REDHAT_QUMRANET;
+    pcidev_k->device_id = PCI_DEVICE_ID_VIRTIO_SCSI;
+    pcidev_k->revision = 0x00;
+    pcidev_k->class_id = PCI_CLASS_STORAGE_SCSI;
+}
+
+static void virtio_scsi_pci_instance_init(Object *obj)
+{
+    VirtIOSCSIPCI *dev = VIRTIO_SCSI_PCI(obj);
+    object_initialize(OBJECT(&dev->vdev), TYPE_VIRTIO_SCSI);
+    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
+}
+
+static const TypeInfo virtio_scsi_pci_info = {
+    .name          = TYPE_VIRTIO_SCSI_PCI,
+    .parent        = TYPE_VIRTIO_PCI,
+    .instance_size = sizeof(VirtIOSCSIPCI),
+    .instance_init = virtio_scsi_pci_instance_init,
+    .class_init    = virtio_scsi_pci_class_init,
+};
+
 /* virtio-pci-bus */
 
 void virtio_pci_bus_new(VirtioBusState *bus, VirtIOPCIProxy *dev)
@@ -1499,7 +1497,6 @@ static void virtio_pci_register_types(void)
     type_register_static(&virtio_net_info);
     type_register_static(&virtio_serial_info);
     type_register_static(&virtio_balloon_info);
-    type_register_static(&virtio_scsi_info);
     type_register_static(&virtio_rng_info);
     type_register_static(&virtio_pci_bus_info);
     type_register_static(&virtio_pci_info);
@@ -1507,6 +1504,7 @@ static void virtio_pci_register_types(void)
     type_register_static(&virtio_9p_info);
 #endif
     type_register_static(&virtio_blk_pci_info);
+    type_register_static(&virtio_scsi_pci_info);
 }
 
 type_init(virtio_pci_register_types)
diff --git a/hw/virtio-pci.h b/hw/virtio-pci.h
index a9dbfff..bfe7a8e 100644
--- a/hw/virtio-pci.h
+++ b/hw/virtio-pci.h
@@ -26,6 +26,7 @@
 
 typedef struct VirtIOPCIProxy VirtIOPCIProxy;
 typedef struct VirtIOBlkPCI VirtIOBlkPCI;
+typedef struct VirtIOSCSIPCI VirtIOSCSIPCI;
 
 /* virtio-pci-bus */
 
@@ -81,7 +82,6 @@ struct VirtIOPCIProxy {
 #endif
     virtio_serial_conf serial;
     virtio_net_conf net;
-    VirtIOSCSIConf scsi;
     VirtIORNGConf rng;
     bool ioeventfd_disabled;
     bool ioeventfd_started;
@@ -90,6 +90,19 @@ struct VirtIOPCIProxy {
     VirtioBusState bus;
 };
 
+
+/*
+ * virtio-scsi-pci: This extends VirtioPCIProxy.
+ */
+#define TYPE_VIRTIO_SCSI_PCI "virtio-scsi-pci"
+#define VIRTIO_SCSI_PCI(obj) \
+        OBJECT_CHECK(VirtIOSCSIPCI, (obj), TYPE_VIRTIO_SCSI_PCI)
+
+struct VirtIOSCSIPCI {
+    VirtIOPCIProxy parent_obj;
+    VirtIOSCSI vdev;
+};
+
 /*
  * virtio-blk-pci: This extends VirtioPCIProxy.
  */
-- 
1.7.11.7

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [Qemu-devel] [PATCH v4 06/10] virtio-scsi-s390: switch to the new API.
  2013-03-20 14:07 [Qemu-devel] [PATCH v4 00/10] virtio-scsi refactoring fred.konrad
                   ` (4 preceding siblings ...)
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 05/10] virtio-scsi-pci: switch to new API fred.konrad
@ 2013-03-20 14:07 ` fred.konrad
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 07/10] virtio-scsi-ccw: switch to " fred.konrad
                   ` (4 subsequent siblings)
  10 siblings, 0 replies; 16+ messages in thread
From: fred.konrad @ 2013-03-20 14:07 UTC (permalink / raw)
  To: qemu-devel, aliguori
  Cc: cornelia.huck, peter.maydell, mark.burton, fred.konrad

From: KONRAD Frederic <fred.konrad@greensocs.com>

Here the virtio-scsi-s390 is modified for the new API. The device
virtio-scsi-s390 extends virtio-s390-device as before. It creates and
connects a virtio-scsi during the init. The properties are not modified.

Signed-off-by: KONRAD Frederic <fred.konrad@greensocs.com>
---
 hw/s390x/s390-virtio-bus.c | 25 +++++++++++++++++--------
 hw/s390x/s390-virtio-bus.h | 11 ++++++++++-
 2 files changed, 27 insertions(+), 9 deletions(-)

diff --git a/hw/s390x/s390-virtio-bus.c b/hw/s390x/s390-virtio-bus.c
index 265d94f..a724090 100644
--- a/hw/s390x/s390-virtio-bus.c
+++ b/hw/s390x/s390-virtio-bus.c
@@ -202,16 +202,24 @@ static int s390_virtio_serial_init(VirtIOS390Device *dev)
     return r;
 }
 
-static int s390_virtio_scsi_init(VirtIOS390Device *dev)
+static int s390_virtio_scsi_init(VirtIOS390Device *s390_dev)
 {
-    VirtIODevice *vdev;
+    VirtIOSCSIS390 *dev = VIRTIO_SCSI_S390(s390_dev);
+    DeviceState *vdev = DEVICE(&dev->vdev);
 
-    vdev = virtio_scsi_init((DeviceState *)dev, &dev->scsi);
-    if (!vdev) {
+    qdev_set_parent_bus(vdev, BUS(&s390_dev->bus));
+    if (qdev_init(vdev) < 0) {
         return -1;
     }
 
-    return s390_virtio_device_init(dev, vdev);
+    return s390_virtio_device_init(s390_dev, VIRTIO_DEVICE(vdev));
+}
+
+static void s390_virtio_scsi_instance_init(Object *obj)
+{
+    VirtIOSCSIS390 *dev = VIRTIO_SCSI_S390(obj);
+    object_initialize(OBJECT(&dev->vdev), TYPE_VIRTIO_SCSI);
+    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
 }
 
 static int s390_virtio_rng_init(VirtIOS390Device *dev)
@@ -543,7 +551,7 @@ static const TypeInfo virtio_s390_device_info = {
 };
 
 static Property s390_virtio_scsi_properties[] = {
-    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtIOS390Device, scsi),
+    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtIOSCSIS390, vdev.conf),
     DEFINE_VIRTIO_COMMON_FEATURES(VirtIOS390Device, host_features),
     DEFINE_PROP_BIT("hotplug", VirtIOS390Device, host_features,
                     VIRTIO_SCSI_F_HOTPLUG, true),
@@ -562,9 +570,10 @@ static void s390_virtio_scsi_class_init(ObjectClass *klass, void *data)
 }
 
 static const TypeInfo s390_virtio_scsi = {
-    .name          = "virtio-scsi-s390",
+    .name          = TYPE_VIRTIO_SCSI_S390,
     .parent        = TYPE_VIRTIO_S390_DEVICE,
-    .instance_size = sizeof(VirtIOS390Device),
+    .instance_size = sizeof(VirtIOSCSIS390),
+    .instance_init = s390_virtio_scsi_instance_init,
     .class_init    = s390_virtio_scsi_class_init,
 };
 
diff --git a/hw/s390x/s390-virtio-bus.h b/hw/s390x/s390-virtio-bus.h
index 1a63411..ebe8794 100644
--- a/hw/s390x/s390-virtio-bus.h
+++ b/hw/s390x/s390-virtio-bus.h
@@ -93,7 +93,6 @@ struct VirtIOS390Device {
     uint32_t host_features;
     virtio_serial_conf serial;
     virtio_net_conf net;
-    VirtIOSCSIConf scsi;
     VirtIORNGConf rng;
     VirtioBusState bus;
 };
@@ -131,5 +130,15 @@ typedef struct VirtIOBlkS390 {
     VirtIOBlkConf blk;
 } VirtIOBlkS390;
 
+/* virtio-scsi-s390 */
+
+#define TYPE_VIRTIO_SCSI_S390 "virtio-scsi-s390"
+#define VIRTIO_SCSI_S390(obj) \
+        OBJECT_CHECK(VirtIOSCSIS390, (obj), TYPE_VIRTIO_SCSI_S390)
+
+typedef struct VirtIOSCSIS390 {
+    VirtIOS390Device parent_obj;
+    VirtIOSCSI vdev;
+} VirtIOSCSIS390;
 
 #endif
-- 
1.7.11.7

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [Qemu-devel] [PATCH v4 07/10] virtio-scsi-ccw: switch to new API
  2013-03-20 14:07 [Qemu-devel] [PATCH v4 00/10] virtio-scsi refactoring fred.konrad
                   ` (5 preceding siblings ...)
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 06/10] virtio-scsi-s390: switch to the " fred.konrad
@ 2013-03-20 14:07 ` fred.konrad
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 08/10] virtio-scsi: cleanup: use QOM casts fred.konrad
                   ` (3 subsequent siblings)
  10 siblings, 0 replies; 16+ messages in thread
From: fred.konrad @ 2013-03-20 14:07 UTC (permalink / raw)
  To: qemu-devel, aliguori
  Cc: cornelia.huck, peter.maydell, mark.burton, fred.konrad

From: KONRAD Frederic <fred.konrad@greensocs.com>

Here the virtio-scsi-ccw is modified for the new API. The device
virtio-scsi-ccw extends virtio-ccw-device as before. It creates and
connects a virtio-scsi during the init. The properties are not modified.

Signed-off-by: KONRAD Frederic <fred.konrad@greensocs.com>
---
 hw/s390x/virtio-ccw.c | 27 +++++++++++++++------------
 hw/s390x/virtio-ccw.h | 12 +++++++++++-
 2 files changed, 26 insertions(+), 13 deletions(-)

diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
index 71a51d9..e46deb7 100644
--- a/hw/s390x/virtio-ccw.c
+++ b/hw/s390x/virtio-ccw.c
@@ -626,22 +626,24 @@ static int virtio_ccw_balloon_exit(VirtioCcwDevice *dev)
     return virtio_ccw_exit(dev);
 }
 
-static int virtio_ccw_scsi_init(VirtioCcwDevice *dev)
+static int virtio_ccw_scsi_init(VirtioCcwDevice *ccw_dev)
 {
-    VirtIODevice *vdev;
+    VirtIOSCSICcw *dev = VIRTIO_SCSI_CCW(ccw_dev);
+    DeviceState *vdev = DEVICE(&dev->vdev);
 
-    vdev = virtio_scsi_init((DeviceState *)dev, &dev->scsi);
-    if (!vdev) {
+    qdev_set_parent_bus(vdev, BUS(&ccw_dev->bus));
+    if (qdev_init(vdev) < 0) {
         return -1;
     }
 
-    return virtio_ccw_device_init(dev, vdev);
+    return virtio_ccw_device_init(ccw_dev, VIRTIO_DEVICE(vdev));
 }
 
-static int virtio_ccw_scsi_exit(VirtioCcwDevice *dev)
+static void virtio_ccw_scsi_instance_init(Object *obj)
 {
-    virtio_scsi_exit(dev->vdev);
-    return virtio_ccw_exit(dev);
+    VirtIOSCSICcw *dev = VIRTIO_SCSI_CCW(obj);
+    object_initialize(OBJECT(&dev->vdev), TYPE_VIRTIO_SCSI);
+    object_property_add_child(obj, "virtio-backend", OBJECT(&dev->vdev), NULL);
 }
 
 static int virtio_ccw_rng_init(VirtioCcwDevice *dev)
@@ -836,7 +838,7 @@ static const TypeInfo virtio_ccw_balloon = {
 
 static Property virtio_ccw_scsi_properties[] = {
     DEFINE_PROP_STRING("devno", VirtioCcwDevice, bus_id),
-    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtioCcwDevice, scsi),
+    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtIOSCSICcw, vdev.conf),
     DEFINE_VIRTIO_COMMON_FEATURES(VirtioCcwDevice, host_features[0]),
     DEFINE_PROP_BIT("hotplug", VirtioCcwDevice, host_features[0],
                     VIRTIO_SCSI_F_HOTPLUG, true),
@@ -851,15 +853,16 @@ static void virtio_ccw_scsi_class_init(ObjectClass *klass, void *data)
     VirtIOCCWDeviceClass *k = VIRTIO_CCW_DEVICE_CLASS(klass);
 
     k->init = virtio_ccw_scsi_init;
-    k->exit = virtio_ccw_scsi_exit;
+    k->exit = virtio_ccw_exit;
     dc->reset = virtio_ccw_reset;
     dc->props = virtio_ccw_scsi_properties;
 }
 
 static const TypeInfo virtio_ccw_scsi = {
-    .name          = "virtio-scsi-ccw",
+    .name          = TYPE_VIRTIO_SCSI_CCW,
     .parent        = TYPE_VIRTIO_CCW_DEVICE,
-    .instance_size = sizeof(VirtioCcwDevice),
+    .instance_size = sizeof(VirtIOSCSICcw),
+    .instance_init = virtio_ccw_scsi_instance_init,
     .class_init    = virtio_ccw_scsi_class_init,
 };
 
diff --git a/hw/s390x/virtio-ccw.h b/hw/s390x/virtio-ccw.h
index 3993bc5..d9f7399 100644
--- a/hw/s390x/virtio-ccw.h
+++ b/hw/s390x/virtio-ccw.h
@@ -76,7 +76,6 @@ struct VirtioCcwDevice {
     uint32_t host_features[VIRTIO_CCW_FEATURE_SIZE];
     virtio_serial_conf serial;
     virtio_net_conf net;
-    VirtIOSCSIConf scsi;
     VirtIORNGConf rng;
     VirtioBusState bus;
     /* Guest provided values: */
@@ -93,6 +92,17 @@ typedef struct VirtualCssBus {
 #define VIRTUAL_CSS_BUS(obj) \
      OBJECT_CHECK(VirtualCssBus, (obj), TYPE_VIRTUAL_CSS_BUS)
 
+/* virtio-scsi-ccw */
+
+#define TYPE_VIRTIO_SCSI_CCW "virtio-scsi-ccw"
+#define VIRTIO_SCSI_CCW(obj) \
+        OBJECT_CHECK(VirtIOSCSICcw, (obj), TYPE_VIRTIO_SCSI_CCW)
+
+typedef struct VirtIOSCSICcw {
+    VirtioCcwDevice parent_obj;
+    VirtIOSCSI vdev;
+} VirtIOSCSICcw;
+
 /* virtio-blk-ccw */
 
 #define TYPE_VIRTIO_BLK_CCW "virtio-blk-ccw"
-- 
1.7.11.7

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [Qemu-devel] [PATCH v4 08/10] virtio-scsi: cleanup: use QOM casts.
  2013-03-20 14:07 [Qemu-devel] [PATCH v4 00/10] virtio-scsi refactoring fred.konrad
                   ` (6 preceding siblings ...)
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 07/10] virtio-scsi-ccw: switch to " fred.konrad
@ 2013-03-20 14:07 ` fred.konrad
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 09/10] virtio-scsi: cleanup: init and exit functions fred.konrad
                   ` (2 subsequent siblings)
  10 siblings, 0 replies; 16+ messages in thread
From: fred.konrad @ 2013-03-20 14:07 UTC (permalink / raw)
  To: qemu-devel, aliguori
  Cc: cornelia.huck, peter.maydell, Paolo Bonzini, mark.burton, fred.konrad

From: KONRAD Frederic <fred.konrad@greensocs.com>

As the virtio-scsi-pci and virtio-scsi-s390 are switched to the new API,
we can use QOM casts.

Signed-off-by: KONRAD Frederic <fred.konrad@greensocs.com>
---
 hw/virtio-scsi.c | 46 ++++++++++++++++++++++++++--------------------
 hw/virtio-scsi.h |  2 +-
 2 files changed, 27 insertions(+), 21 deletions(-)

diff --git a/hw/virtio-scsi.c b/hw/virtio-scsi.c
index ca9ceb1..46ed419 100644
--- a/hw/virtio-scsi.c
+++ b/hw/virtio-scsi.c
@@ -172,6 +172,7 @@ static void virtio_scsi_complete_req(VirtIOSCSIReq *req)
 {
     VirtIOSCSI *s = req->dev;
     VirtQueue *vq = req->vq;
+    VirtIODevice *vdev = VIRTIO_DEVICE(s);
     virtqueue_push(vq, &req->elem, req->qsgl.size + req->elem.in_sg[0].iov_len);
     qemu_sglist_destroy(&req->qsgl);
     if (req->sreq) {
@@ -179,7 +180,7 @@ static void virtio_scsi_complete_req(VirtIOSCSIReq *req)
         scsi_req_unref(req->sreq);
     }
     g_free(req);
-    virtio_notify(&s->vdev, vq);
+    virtio_notify(vdev, vq);
 }
 
 static void virtio_scsi_bad_req(void)
@@ -566,16 +567,16 @@ static void virtio_scsi_reset(VirtIODevice *vdev)
  */
 static void virtio_scsi_save(QEMUFile *f, void *opaque)
 {
-    VirtIOSCSI *s = opaque;
-    virtio_save(&s->vdev, f);
+    VirtIODevice *vdev = VIRTIO_DEVICE(opaque);
+    virtio_save(vdev, f);
 }
 
 static int virtio_scsi_load(QEMUFile *f, void *opaque, int version_id)
 {
-    VirtIOSCSI *s = opaque;
+    VirtIODevice *vdev = VIRTIO_DEVICE(opaque);
     int ret;
 
-    ret = virtio_load(&s->vdev, f);
+    ret = virtio_load(vdev, f);
     if (ret) {
         return ret;
     }
@@ -587,9 +588,10 @@ static void virtio_scsi_push_event(VirtIOSCSI *s, SCSIDevice *dev,
 {
     VirtIOSCSIReq *req = virtio_scsi_pop_req(s, s->event_vq);
     VirtIOSCSIEvent *evt;
+    VirtIODevice *vdev = VIRTIO_DEVICE(s);
     int in_size;
 
-    if (!(s->vdev.status & VIRTIO_CONFIG_S_DRIVER_OK)) {
+    if (!(vdev->status & VIRTIO_CONFIG_S_DRIVER_OK)) {
         return;
     }
 
@@ -633,7 +635,7 @@ static void virtio_scsi_push_event(VirtIOSCSI *s, SCSIDevice *dev,
 
 static void virtio_scsi_handle_event(VirtIODevice *vdev, VirtQueue *vq)
 {
-    VirtIOSCSI *s = (VirtIOSCSI *)vdev;
+    VirtIOSCSI *s = VIRTIO_SCSI(vdev);
 
     if (s->events_dropped) {
         virtio_scsi_push_event(s, NULL, VIRTIO_SCSI_T_NO_EVENT, 0);
@@ -643,8 +645,9 @@ static void virtio_scsi_handle_event(VirtIODevice *vdev, VirtQueue *vq)
 static void virtio_scsi_change(SCSIBus *bus, SCSIDevice *dev, SCSISense sense)
 {
     VirtIOSCSI *s = container_of(bus, VirtIOSCSI, bus);
+    VirtIODevice *vdev = VIRTIO_DEVICE(s);
 
-    if (((s->vdev.guest_features >> VIRTIO_SCSI_F_CHANGE) & 1) &&
+    if (((vdev->guest_features >> VIRTIO_SCSI_F_CHANGE) & 1) &&
         dev->type != TYPE_ROM) {
         virtio_scsi_push_event(s, dev, VIRTIO_SCSI_T_PARAM_CHANGE,
                                sense.asc | (sense.ascq << 8));
@@ -654,8 +657,9 @@ static void virtio_scsi_change(SCSIBus *bus, SCSIDevice *dev, SCSISense sense)
 static void virtio_scsi_hotplug(SCSIBus *bus, SCSIDevice *dev)
 {
     VirtIOSCSI *s = container_of(bus, VirtIOSCSI, bus);
+    VirtIODevice *vdev = VIRTIO_DEVICE(s);
 
-    if ((s->vdev.guest_features >> VIRTIO_SCSI_F_HOTPLUG) & 1) {
+    if ((vdev->guest_features >> VIRTIO_SCSI_F_HOTPLUG) & 1) {
         virtio_scsi_push_event(s, dev, VIRTIO_SCSI_T_TRANSPORT_RESET,
                                VIRTIO_SCSI_EVT_RESET_RESCAN);
     }
@@ -664,8 +668,9 @@ static void virtio_scsi_hotplug(SCSIBus *bus, SCSIDevice *dev)
 static void virtio_scsi_hot_unplug(SCSIBus *bus, SCSIDevice *dev)
 {
     VirtIOSCSI *s = container_of(bus, VirtIOSCSI, bus);
+    VirtIODevice *vdev = VIRTIO_DEVICE(s);
 
-    if ((s->vdev.guest_features >> VIRTIO_SCSI_F_HOTPLUG) & 1) {
+    if ((vdev->guest_features >> VIRTIO_SCSI_F_HOTPLUG) & 1) {
         virtio_scsi_push_event(s, dev, VIRTIO_SCSI_T_TRANSPORT_RESET,
                                VIRTIO_SCSI_EVT_RESET_REMOVED);
     }
@@ -692,6 +697,7 @@ static VirtIODevice *virtio_scsi_common_init(DeviceState *dev,
                                              VirtIOSCSI **ps)
 {
     VirtIOSCSI *s = *ps;
+    VirtIODevice *vdev = VIRTIO_DEVICE(s);
     static int virtio_scsi_id;
     int i;
 
@@ -717,17 +723,17 @@ static VirtIODevice *virtio_scsi_common_init(DeviceState *dev,
     s->conf = *proxyconf;
 
     /* TODO set up vdev function pointers */
-    s->vdev.get_config = virtio_scsi_get_config;
-    s->vdev.set_config = virtio_scsi_set_config;
-    s->vdev.get_features = virtio_scsi_get_features;
-    s->vdev.reset = virtio_scsi_reset;
-
-    s->ctrl_vq = virtio_add_queue(&s->vdev, VIRTIO_SCSI_VQ_SIZE,
-                                   virtio_scsi_handle_ctrl);
-    s->event_vq = virtio_add_queue(&s->vdev, VIRTIO_SCSI_VQ_SIZE,
+    vdev->get_config = virtio_scsi_get_config;
+    vdev->set_config = virtio_scsi_set_config;
+    vdev->get_features = virtio_scsi_get_features;
+    vdev->reset = virtio_scsi_reset;
+
+    s->ctrl_vq = virtio_add_queue(vdev, VIRTIO_SCSI_VQ_SIZE,
+                                  virtio_scsi_handle_ctrl);
+    s->event_vq = virtio_add_queue(vdev, VIRTIO_SCSI_VQ_SIZE,
                                    virtio_scsi_handle_event);
     for (i = 0; i < s->conf.num_queues; i++) {
-        s->cmd_vqs[i] = virtio_add_queue(&s->vdev, VIRTIO_SCSI_VQ_SIZE,
+        s->cmd_vqs[i] = virtio_add_queue(vdev, VIRTIO_SCSI_VQ_SIZE,
                                          virtio_scsi_handle_cmd);
     }
 
@@ -739,7 +745,7 @@ static VirtIODevice *virtio_scsi_common_init(DeviceState *dev,
     register_savevm(dev, "virtio-scsi", virtio_scsi_id++, 1,
                     virtio_scsi_save, virtio_scsi_load, s);
 
-    return &s->vdev;
+    return vdev;
 }
 
 VirtIODevice *virtio_scsi_init(DeviceState *dev, VirtIOSCSIConf *proxyconf)
diff --git a/hw/virtio-scsi.h b/hw/virtio-scsi.h
index 9ff639e..8a1c492 100644
--- a/hw/virtio-scsi.h
+++ b/hw/virtio-scsi.h
@@ -38,7 +38,7 @@ struct VirtIOSCSIConf {
 };
 
 typedef struct VirtIOSCSI {
-    VirtIODevice vdev;
+    VirtIODevice parent_obj;
     DeviceState *qdev;
     VirtIOSCSIConf conf;
 
-- 
1.7.11.7

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [Qemu-devel] [PATCH v4 09/10] virtio-scsi: cleanup: init and exit functions.
  2013-03-20 14:07 [Qemu-devel] [PATCH v4 00/10] virtio-scsi refactoring fred.konrad
                   ` (7 preceding siblings ...)
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 08/10] virtio-scsi: cleanup: use QOM casts fred.konrad
@ 2013-03-20 14:07 ` fred.konrad
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 10/10] virtio-scsi: cleanup: remove qdev field fred.konrad
  2013-03-20 15:54 ` [Qemu-devel] [PATCH v4 00/10] virtio-scsi refactoring Cornelia Huck
  10 siblings, 0 replies; 16+ messages in thread
From: fred.konrad @ 2013-03-20 14:07 UTC (permalink / raw)
  To: qemu-devel, aliguori
  Cc: cornelia.huck, peter.maydell, Paolo Bonzini, mark.burton, fred.konrad

From: KONRAD Frederic <fred.konrad@greensocs.com>

This remove old init and exit function as they are no longer needed.

Signed-off-by: KONRAD Frederic <fred.konrad@greensocs.com>
---
 hw/virtio-scsi.c | 60 ++++++++++----------------------------------------------
 1 file changed, 10 insertions(+), 50 deletions(-)

diff --git a/hw/virtio-scsi.c b/hw/virtio-scsi.c
index 46ed419..96e3688 100644
--- a/hw/virtio-scsi.c
+++ b/hw/virtio-scsi.c
@@ -692,35 +692,19 @@ static struct SCSIBusInfo virtio_scsi_scsi_info = {
     .load_request = virtio_scsi_load_request,
 };
 
-static VirtIODevice *virtio_scsi_common_init(DeviceState *dev,
-                                             VirtIOSCSIConf *proxyconf,
-                                             VirtIOSCSI **ps)
+static int virtio_scsi_device_init(VirtIODevice *vdev)
 {
-    VirtIOSCSI *s = *ps;
-    VirtIODevice *vdev = VIRTIO_DEVICE(s);
+    DeviceState *qdev = DEVICE(vdev);
+    VirtIOSCSI *s = VIRTIO_SCSI(vdev);
     static int virtio_scsi_id;
     int i;
 
-    /*
-     * We have two cases here: the old virtio-net-pci device, and the
-     * refactored virtio-net.
-     */
+    virtio_init(VIRTIO_DEVICE(s), "virtio-scsi", VIRTIO_ID_SCSI,
+                sizeof(VirtIOSCSIConfig));
 
-    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(s->conf.num_queues * sizeof(VirtQueue *));
 
-    s->cmd_vqs = g_malloc0(proxyconf->num_queues * sizeof(VirtQueue *));
-
-    s->qdev = dev;
-    s->conf = *proxyconf;
+    s->qdev = qdev;
 
     /* TODO set up vdev function pointers */
     vdev->get_config = virtio_scsi_get_config;
@@ -737,38 +721,14 @@ static VirtIODevice *virtio_scsi_common_init(DeviceState *dev,
                                          virtio_scsi_handle_cmd);
     }
 
-    scsi_bus_new(&s->bus, dev, &virtio_scsi_scsi_info);
-    if (!dev->hotplugged) {
+    scsi_bus_new(&s->bus, qdev, &virtio_scsi_scsi_info);
+    if (!qdev->hotplugged) {
         scsi_bus_legacy_handle_cmdline(&s->bus);
     }
 
-    register_savevm(dev, "virtio-scsi", virtio_scsi_id++, 1,
+    register_savevm(qdev, "virtio-scsi", virtio_scsi_id++, 1,
                     virtio_scsi_save, virtio_scsi_load, s);
 
-    return 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;
-    unregister_savevm(s->qdev, "virtio-scsi", s);
-    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;
 }
 
-- 
1.7.11.7

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* [Qemu-devel] [PATCH v4 10/10] virtio-scsi: cleanup: remove qdev field.
  2013-03-20 14:07 [Qemu-devel] [PATCH v4 00/10] virtio-scsi refactoring fred.konrad
                   ` (8 preceding siblings ...)
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 09/10] virtio-scsi: cleanup: init and exit functions fred.konrad
@ 2013-03-20 14:07 ` fred.konrad
  2013-03-20 15:54 ` [Qemu-devel] [PATCH v4 00/10] virtio-scsi refactoring Cornelia Huck
  10 siblings, 0 replies; 16+ messages in thread
From: fred.konrad @ 2013-03-20 14:07 UTC (permalink / raw)
  To: qemu-devel, aliguori
  Cc: cornelia.huck, peter.maydell, Paolo Bonzini, mark.burton, fred.konrad

From: KONRAD Frederic <fred.konrad@greensocs.com>

The qdev field is no longer needed. Just drop it.

Signed-off-by: KONRAD Frederic <fred.konrad@greensocs.com>
---
 hw/virtio-scsi.c | 2 --
 hw/virtio-scsi.h | 1 -
 2 files changed, 3 deletions(-)

diff --git a/hw/virtio-scsi.c b/hw/virtio-scsi.c
index 96e3688..06a58a6 100644
--- a/hw/virtio-scsi.c
+++ b/hw/virtio-scsi.c
@@ -704,8 +704,6 @@ static int virtio_scsi_device_init(VirtIODevice *vdev)
 
     s->cmd_vqs = g_malloc0(s->conf.num_queues * sizeof(VirtQueue *));
 
-    s->qdev = qdev;
-
     /* TODO set up vdev function pointers */
     vdev->get_config = virtio_scsi_get_config;
     vdev->set_config = virtio_scsi_set_config;
diff --git a/hw/virtio-scsi.h b/hw/virtio-scsi.h
index 8a1c492..8399ac0 100644
--- a/hw/virtio-scsi.h
+++ b/hw/virtio-scsi.h
@@ -39,7 +39,6 @@ struct VirtIOSCSIConf {
 
 typedef struct VirtIOSCSI {
     VirtIODevice parent_obj;
-    DeviceState *qdev;
     VirtIOSCSIConf conf;
 
     SCSIBus bus;
-- 
1.7.11.7

^ permalink raw reply related	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH v4 00/10] virtio-scsi refactoring.
  2013-03-20 14:07 [Qemu-devel] [PATCH v4 00/10] virtio-scsi refactoring fred.konrad
                   ` (9 preceding siblings ...)
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 10/10] virtio-scsi: cleanup: remove qdev field fred.konrad
@ 2013-03-20 15:54 ` Cornelia Huck
  10 siblings, 0 replies; 16+ messages in thread
From: Cornelia Huck @ 2013-03-20 15:54 UTC (permalink / raw)
  To: fred.konrad; +Cc: peter.maydell, aliguori, mark.burton, qemu-devel

On Wed, 20 Mar 2013 15:07:33 +0100
fred.konrad@greensocs.com wrote:

> From: KONRAD Frederic <fred.konrad@greensocs.com>
> 
> This is the next part of virtio-refactoring.
> 
> Basically it creates virtio-scsi device which extends virtio-device.
> Then a virtio-scsi can be connected on a virtio-bus.
> virtio-scsi-pci, virtio-scsi-s390x, virtio-scsi-ccw are created too, they extend
> respectively virtio-pci, virtio-s390-device, virtio-ccw-device and have a
> virtio-scsi.
> 
> You can checkout my branch here:
> 
> git://project.greensocs.com/qemu-virtio.git virtio-scsi-v4

I have not looked at the code yet, but with this tree I can create
virtio-scsi-ccw and virtio-scsi-s390 devices that look sane at first
glance. On virtio-ccw, the device also detaches without creating a
hiccup in qemu.

> 
> Note that it is nearly the same series as virtio-blk refactoring. Though the 2nd
> and the 3rd steps are a virtio-scsi specific.
> 
> I made basic tests (with linux guests) on:
>  * qemu-system-i386
> 
> Changes v3 -> v4:
>     * Added CCW device.
>     * Fixed the configuration issue.
> 
> Thanks,
> 
> Fred
> 
> KONRAD Frederic (10):
>   virtio-scsi: don't use pointer for configuration.
>   virtio-scsi: allocate cmd_vqs array separately.
>   virtio-scsi: moving host_features from properties to transport
>     properties.
>   virtio-scsi: add the virtio-scsi device.
>   virtio-scsi-pci: switch to new API.
>   virtio-scsi-s390: switch to the new API.
>   virtio-scsi-ccw: switch to new API
>   virtio-scsi: cleanup: use QOM casts.
>   virtio-scsi: cleanup: init and exit functions.
>   virtio-scsi: cleanup: remove qdev field.
> 
>  hw/s390x/s390-virtio-bus.c |  30 ++++++++---
>  hw/s390x/s390-virtio-bus.h |  11 +++-
>  hw/s390x/virtio-ccw.c      |  32 +++++++-----
>  hw/s390x/virtio-ccw.h      |  12 ++++-
>  hw/virtio-pci.c            | 119 ++++++++++++++++++++++---------------------
>  hw/virtio-pci.h            |  15 +++++-
>  hw/virtio-scsi.c           | 122 ++++++++++++++++++++++++++++++---------------
>  hw/virtio-scsi.h           |  21 ++++----
>  8 files changed, 230 insertions(+), 132 deletions(-)
> 

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH v4 03/10] virtio-scsi: moving host_features from properties to transport properties.
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 03/10] virtio-scsi: moving host_features from properties to transport properties fred.konrad
@ 2013-03-21 12:10   ` Cornelia Huck
  2013-03-21 12:42     ` KONRAD Frédéric
  0 siblings, 1 reply; 16+ messages in thread
From: Cornelia Huck @ 2013-03-21 12:10 UTC (permalink / raw)
  To: fred.konrad
  Cc: peter.maydell, aliguori, mark.burton, qemu-devel, Paolo Bonzini

On Wed, 20 Mar 2013 15:07:36 +0100
fred.konrad@greensocs.com wrote:

> From: KONRAD Frederic <fred.konrad@greensocs.com>
> 
> host_features field is part of the transport device. So move all the
> host_features related properties into transport device.
> 
> Signed-off-by: KONRAD Frederic <fred.konrad@greensocs.com>
> ---
>  hw/s390x/s390-virtio-bus.c | 7 ++++++-
>  hw/s390x/virtio-ccw.c      | 7 ++++++-
>  hw/virtio-pci.c            | 7 ++++++-
>  hw/virtio-scsi.h           | 9 +++------
>  4 files changed, 21 insertions(+), 9 deletions(-)
> 
> diff --git a/hw/s390x/s390-virtio-bus.c b/hw/s390x/s390-virtio-bus.c
> index 76bc99a..265d94f 100644
> --- a/hw/s390x/s390-virtio-bus.c
> +++ b/hw/s390x/s390-virtio-bus.c
> @@ -543,7 +543,12 @@ static const TypeInfo virtio_s390_device_info = {
>  };
> 
>  static Property s390_virtio_scsi_properties[] = {
> -    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtIOS390Device, host_features, scsi),
> +    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtIOS390Device, scsi),
> +    DEFINE_VIRTIO_COMMON_FEATURES(VirtIOS390Device, host_features),
> +    DEFINE_PROP_BIT("hotplug", VirtIOS390Device, host_features,
> +                    VIRTIO_SCSI_F_HOTPLUG, true),
> +    DEFINE_PROP_BIT("param_change", VirtIOS390Device, host_features,
> +                    VIRTIO_SCSI_F_CHANGE, true),
>      DEFINE_PROP_END_OF_LIST(),
>  };
> 
> diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
> index 9688835..71a51d9 100644
> --- a/hw/s390x/virtio-ccw.c
> +++ b/hw/s390x/virtio-ccw.c
> @@ -836,7 +836,12 @@ static const TypeInfo virtio_ccw_balloon = {
> 
>  static Property virtio_ccw_scsi_properties[] = {
>      DEFINE_PROP_STRING("devno", VirtioCcwDevice, bus_id),
> -    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtioCcwDevice, host_features[0], scsi),
> +    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtioCcwDevice, scsi),
> +    DEFINE_VIRTIO_COMMON_FEATURES(VirtioCcwDevice, host_features[0]),
> +    DEFINE_PROP_BIT("hotplug", VirtioCcwDevice, host_features[0],
> +                    VIRTIO_SCSI_F_HOTPLUG, true),
> +    DEFINE_PROP_BIT("param_change", VirtioCcwDevice, host_features[0],
> +                    VIRTIO_SCSI_F_CHANGE, true),
>      DEFINE_PROP_END_OF_LIST(),
>  };
> 
> diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
> index f3ece78..0665b04 100644
> --- a/hw/virtio-pci.c
> +++ b/hw/virtio-pci.c
> @@ -1221,7 +1221,12 @@ static void virtio_scsi_exit_pci(PCIDevice *pci_dev)
>  static Property virtio_scsi_properties[] = {
>      DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags, VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true),
>      DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, DEV_NVECTORS_UNSPECIFIED),
> -    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtIOPCIProxy, host_features, scsi),
> +    DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features),
> +    DEFINE_PROP_BIT("hotplug", VirtIOPCIProxy, host_features,
> +                    VIRTIO_SCSI_F_HOTPLUG, true),
> +    DEFINE_PROP_BIT("param_change", VirtIOPCIProxy, host_features,
> +                    VIRTIO_SCSI_F_CHANGE, true),
> +    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtIOPCIProxy, scsi),
>      DEFINE_PROP_END_OF_LIST(),
>  };
> 
> diff --git a/hw/virtio-scsi.h b/hw/virtio-scsi.h
> index fb83b67..536c4c3 100644
> --- a/hw/virtio-scsi.h
> +++ b/hw/virtio-scsi.h
> @@ -47,12 +47,9 @@ typedef struct VirtIOSCSI {
>      VirtQueue **cmd_vqs;
>  } VirtIOSCSI;
> 
> -#define DEFINE_VIRTIO_SCSI_PROPERTIES(_state, _features_field, _conf_field) \
> -    DEFINE_VIRTIO_COMMON_FEATURES(_state, _features_field), \
> +#define DEFINE_VIRTIO_SCSI_PROPERTIES(_state, _conf_field) \
>      DEFINE_PROP_UINT32("num_queues", _state, _conf_field.num_queues, 1), \
> -    DEFINE_PROP_UINT32("max_sectors", _state, _conf_field.max_sectors, 0xFFFF), \
> -    DEFINE_PROP_UINT32("cmd_per_lun", _state, _conf_field.cmd_per_lun, 128), \
> -    DEFINE_PROP_BIT("hotplug", _state, _features_field, VIRTIO_SCSI_F_HOTPLUG, true), \
> -    DEFINE_PROP_BIT("param_change", _state, _features_field, VIRTIO_SCSI_F_CHANGE, true)
> +    DEFINE_PROP_UINT32("max_sectors", _state, _conf_field.max_sectors, 0xFFFF),\
> +    DEFINE_PROP_UINT32("cmd_per_lun", _state, _conf_field.cmd_per_lun, 128)

Would it make sense to add

#define DEFINE_VIRTIO_SCSI_FEATURES(_state, _features_field) \
	DEFINE_VIRTIO_COMMON_FEATURES(_state, _features_field), \
	DEFINE_PROP_BIT("hotplug", _state, _features_field, VIRTIO_SCSI_F_HOTPLUG, true), \
	DEFINE_PROP_BIT("param_change", _state, _features_field, VIRTIO_SCSI_F_CHANGE, true)

to avoid code duplication?

> 
>  #endif /* _QEMU_VIRTIO_SCSI_H */

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH v4 04/10] virtio-scsi: add the virtio-scsi device.
  2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 04/10] virtio-scsi: add the virtio-scsi device fred.konrad
@ 2013-03-21 12:12   ` Cornelia Huck
  2013-03-21 12:44     ` KONRAD Frédéric
  0 siblings, 1 reply; 16+ messages in thread
From: Cornelia Huck @ 2013-03-21 12:12 UTC (permalink / raw)
  To: fred.konrad
  Cc: peter.maydell, aliguori, mark.burton, qemu-devel, Paolo Bonzini

On Wed, 20 Mar 2013 15:07:37 +0100
fred.konrad@greensocs.com wrote:

> From: KONRAD Frederic <fred.konrad@greensocs.com>
> 
> Create virtio-scsi which extends virtio-device, so it can be connected on
> virtio-bus.
> 
> Signed-off-by: KONRAD Frederic <fred.konrad@greensocs.com>
> ---
>  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 <hw/scsi.h>
>  #include <hw/scsi-defs.h>
> +#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
> 

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH v4 03/10] virtio-scsi: moving host_features from properties to transport properties.
  2013-03-21 12:10   ` Cornelia Huck
@ 2013-03-21 12:42     ` KONRAD Frédéric
  0 siblings, 0 replies; 16+ messages in thread
From: KONRAD Frédéric @ 2013-03-21 12:42 UTC (permalink / raw)
  To: Cornelia Huck
  Cc: peter.maydell, aliguori, mark.burton, qemu-devel,
	Paolo Bonzini (supporter:SCSI)

On 21/03/2013 13:10, Cornelia Huck wrote:
> On Wed, 20 Mar 2013 15:07:36 +0100
> fred.konrad@greensocs.com wrote:
>
>> From: KONRAD Frederic <fred.konrad@greensocs.com>
>>
>> host_features field is part of the transport device. So move all the
>> host_features related properties into transport device.
>>
>> Signed-off-by: KONRAD Frederic <fred.konrad@greensocs.com>
>> ---
>>   hw/s390x/s390-virtio-bus.c | 7 ++++++-
>>   hw/s390x/virtio-ccw.c      | 7 ++++++-
>>   hw/virtio-pci.c            | 7 ++++++-
>>   hw/virtio-scsi.h           | 9 +++------
>>   4 files changed, 21 insertions(+), 9 deletions(-)
>>
>> diff --git a/hw/s390x/s390-virtio-bus.c b/hw/s390x/s390-virtio-bus.c
>> index 76bc99a..265d94f 100644
>> --- a/hw/s390x/s390-virtio-bus.c
>> +++ b/hw/s390x/s390-virtio-bus.c
>> @@ -543,7 +543,12 @@ static const TypeInfo virtio_s390_device_info = {
>>   };
>>
>>   static Property s390_virtio_scsi_properties[] = {
>> -    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtIOS390Device, host_features, scsi),
>> +    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtIOS390Device, scsi),
>> +    DEFINE_VIRTIO_COMMON_FEATURES(VirtIOS390Device, host_features),
>> +    DEFINE_PROP_BIT("hotplug", VirtIOS390Device, host_features,
>> +                    VIRTIO_SCSI_F_HOTPLUG, true),
>> +    DEFINE_PROP_BIT("param_change", VirtIOS390Device, host_features,
>> +                    VIRTIO_SCSI_F_CHANGE, true),
>>       DEFINE_PROP_END_OF_LIST(),
>>   };
>>
>> diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
>> index 9688835..71a51d9 100644
>> --- a/hw/s390x/virtio-ccw.c
>> +++ b/hw/s390x/virtio-ccw.c
>> @@ -836,7 +836,12 @@ static const TypeInfo virtio_ccw_balloon = {
>>
>>   static Property virtio_ccw_scsi_properties[] = {
>>       DEFINE_PROP_STRING("devno", VirtioCcwDevice, bus_id),
>> -    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtioCcwDevice, host_features[0], scsi),
>> +    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtioCcwDevice, scsi),
>> +    DEFINE_VIRTIO_COMMON_FEATURES(VirtioCcwDevice, host_features[0]),
>> +    DEFINE_PROP_BIT("hotplug", VirtioCcwDevice, host_features[0],
>> +                    VIRTIO_SCSI_F_HOTPLUG, true),
>> +    DEFINE_PROP_BIT("param_change", VirtioCcwDevice, host_features[0],
>> +                    VIRTIO_SCSI_F_CHANGE, true),
>>       DEFINE_PROP_END_OF_LIST(),
>>   };
>>
>> diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
>> index f3ece78..0665b04 100644
>> --- a/hw/virtio-pci.c
>> +++ b/hw/virtio-pci.c
>> @@ -1221,7 +1221,12 @@ static void virtio_scsi_exit_pci(PCIDevice *pci_dev)
>>   static Property virtio_scsi_properties[] = {
>>       DEFINE_PROP_BIT("ioeventfd", VirtIOPCIProxy, flags, VIRTIO_PCI_FLAG_USE_IOEVENTFD_BIT, true),
>>       DEFINE_PROP_UINT32("vectors", VirtIOPCIProxy, nvectors, DEV_NVECTORS_UNSPECIFIED),
>> -    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtIOPCIProxy, host_features, scsi),
>> +    DEFINE_VIRTIO_COMMON_FEATURES(VirtIOPCIProxy, host_features),
>> +    DEFINE_PROP_BIT("hotplug", VirtIOPCIProxy, host_features,
>> +                    VIRTIO_SCSI_F_HOTPLUG, true),
>> +    DEFINE_PROP_BIT("param_change", VirtIOPCIProxy, host_features,
>> +                    VIRTIO_SCSI_F_CHANGE, true),
>> +    DEFINE_VIRTIO_SCSI_PROPERTIES(VirtIOPCIProxy, scsi),
>>       DEFINE_PROP_END_OF_LIST(),
>>   };
>>
>> diff --git a/hw/virtio-scsi.h b/hw/virtio-scsi.h
>> index fb83b67..536c4c3 100644
>> --- a/hw/virtio-scsi.h
>> +++ b/hw/virtio-scsi.h
>> @@ -47,12 +47,9 @@ typedef struct VirtIOSCSI {
>>       VirtQueue **cmd_vqs;
>>   } VirtIOSCSI;
>>
>> -#define DEFINE_VIRTIO_SCSI_PROPERTIES(_state, _features_field, _conf_field) \
>> -    DEFINE_VIRTIO_COMMON_FEATURES(_state, _features_field), \
>> +#define DEFINE_VIRTIO_SCSI_PROPERTIES(_state, _conf_field) \
>>       DEFINE_PROP_UINT32("num_queues", _state, _conf_field.num_queues, 1), \
>> -    DEFINE_PROP_UINT32("max_sectors", _state, _conf_field.max_sectors, 0xFFFF), \
>> -    DEFINE_PROP_UINT32("cmd_per_lun", _state, _conf_field.cmd_per_lun, 128), \
>> -    DEFINE_PROP_BIT("hotplug", _state, _features_field, VIRTIO_SCSI_F_HOTPLUG, true), \
>> -    DEFINE_PROP_BIT("param_change", _state, _features_field, VIRTIO_SCSI_F_CHANGE, true)
>> +    DEFINE_PROP_UINT32("max_sectors", _state, _conf_field.max_sectors, 0xFFFF),\
>> +    DEFINE_PROP_UINT32("cmd_per_lun", _state, _conf_field.cmd_per_lun, 128)
> Would it make sense to add
>
> #define DEFINE_VIRTIO_SCSI_FEATURES(_state, _features_field) \
> 	DEFINE_VIRTIO_COMMON_FEATURES(_state, _features_field), \
> 	DEFINE_PROP_BIT("hotplug", _state, _features_field, VIRTIO_SCSI_F_HOTPLUG, true), \
> 	DEFINE_PROP_BIT("param_change", _state, _features_field, VIRTIO_SCSI_F_CHANGE, true)
>
> to avoid code duplication?

Sure, so I'll put it in virtio-blk.h.
>
>>   #endif /* _QEMU_VIRTIO_SCSI_H */

^ permalink raw reply	[flat|nested] 16+ messages in thread

* Re: [Qemu-devel] [PATCH v4 04/10] virtio-scsi: add the virtio-scsi device.
  2013-03-21 12:12   ` Cornelia Huck
@ 2013-03-21 12:44     ` KONRAD Frédéric
  0 siblings, 0 replies; 16+ messages in thread
From: KONRAD Frédéric @ 2013-03-21 12:44 UTC (permalink / raw)
  To: Cornelia Huck
  Cc: peter.maydell, aliguori, mark.burton, qemu-devel,
	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 <fred.konrad@greensocs.com>
>>
>> Create virtio-scsi which extends virtio-device, so it can be connected on
>> virtio-bus.
>>
>> Signed-off-by: KONRAD Frederic <fred.konrad@greensocs.com>
>> ---
>>   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 <hw/scsi.h>
>>   #include <hw/scsi-defs.h>
>> +#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
>>

^ permalink raw reply	[flat|nested] 16+ messages in thread

end of thread, other threads:[~2013-03-21 12:44 UTC | newest]

Thread overview: 16+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-03-20 14:07 [Qemu-devel] [PATCH v4 00/10] virtio-scsi refactoring fred.konrad
2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 01/10] virtio-scsi: don't use pointer for configuration fred.konrad
2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 02/10] virtio-scsi: allocate cmd_vqs array separately fred.konrad
2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 03/10] virtio-scsi: moving host_features from properties to transport properties fred.konrad
2013-03-21 12:10   ` Cornelia Huck
2013-03-21 12:42     ` KONRAD Frédéric
2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 04/10] virtio-scsi: add the virtio-scsi device fred.konrad
2013-03-21 12:12   ` Cornelia Huck
2013-03-21 12:44     ` KONRAD Frédéric
2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 05/10] virtio-scsi-pci: switch to new API fred.konrad
2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 06/10] virtio-scsi-s390: switch to the " fred.konrad
2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 07/10] virtio-scsi-ccw: switch to " fred.konrad
2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 08/10] virtio-scsi: cleanup: use QOM casts fred.konrad
2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 09/10] virtio-scsi: cleanup: init and exit functions fred.konrad
2013-03-20 14:07 ` [Qemu-devel] [PATCH v4 10/10] virtio-scsi: cleanup: remove qdev field fred.konrad
2013-03-20 15:54 ` [Qemu-devel] [PATCH v4 00/10] virtio-scsi refactoring Cornelia Huck

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.