qemu-devel.nongnu.org archive mirror
 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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).