* [Qemu-devel] [PATCH v5 01/10] virtio-scsi: don't use pointer for configuration.
2013-03-21 14:15 [Qemu-devel] [PATCH v5 00/10] virtio-scsi refactoring fred.konrad
@ 2013-03-21 14:15 ` fred.konrad
2013-03-21 14:15 ` [Qemu-devel] [PATCH v5 02/10] virtio-scsi: allocate cmd_vqs array separately fred.konrad
` (11 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: fred.konrad @ 2013-03-21 14:15 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] 14+ messages in thread
* [Qemu-devel] [PATCH v5 02/10] virtio-scsi: allocate cmd_vqs array separately.
2013-03-21 14:15 [Qemu-devel] [PATCH v5 00/10] virtio-scsi refactoring fred.konrad
2013-03-21 14:15 ` [Qemu-devel] [PATCH v5 01/10] virtio-scsi: don't use pointer for configuration fred.konrad
@ 2013-03-21 14:15 ` fred.konrad
2013-03-21 14:15 ` [Qemu-devel] [PATCH v5 03/10] virtio-scsi: moving host_features from properties to transport properties fred.konrad
` (10 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: fred.konrad @ 2013-03-21 14:15 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] 14+ messages in thread
* [Qemu-devel] [PATCH v5 03/10] virtio-scsi: moving host_features from properties to transport properties.
2013-03-21 14:15 [Qemu-devel] [PATCH v5 00/10] virtio-scsi refactoring fred.konrad
2013-03-21 14:15 ` [Qemu-devel] [PATCH v5 01/10] virtio-scsi: don't use pointer for configuration fred.konrad
2013-03-21 14:15 ` [Qemu-devel] [PATCH v5 02/10] virtio-scsi: allocate cmd_vqs array separately fred.konrad
@ 2013-03-21 14:15 ` fred.konrad
2013-03-21 14:15 ` [Qemu-devel] [PATCH v5 04/10] virtio-scsi: add the virtio-scsi device fred.konrad
` (9 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: fred.konrad @ 2013-03-21 14:15 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 | 3 ++-
hw/s390x/virtio-ccw.c | 3 ++-
hw/virtio-pci.c | 3 ++-
hw/virtio-scsi.h | 18 +++++++++++-------
4 files changed, 17 insertions(+), 10 deletions(-)
diff --git a/hw/s390x/s390-virtio-bus.c b/hw/s390x/s390-virtio-bus.c
index 76bc99a..68db7b9 100644
--- a/hw/s390x/s390-virtio-bus.c
+++ b/hw/s390x/s390-virtio-bus.c
@@ -543,7 +543,8 @@ 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_SCSI_FEATURES(VirtIOS390Device, host_features),
DEFINE_PROP_END_OF_LIST(),
};
diff --git a/hw/s390x/virtio-ccw.c b/hw/s390x/virtio-ccw.c
index 9688835..f852721 100644
--- a/hw/s390x/virtio-ccw.c
+++ b/hw/s390x/virtio-ccw.c
@@ -836,7 +836,8 @@ 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_SCSI_FEATURES(VirtioCcwDevice, host_features[0]),
DEFINE_PROP_END_OF_LIST(),
};
diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
index f3ece78..0cf8b2e 100644
--- a/hw/virtio-pci.c
+++ b/hw/virtio-pci.c
@@ -1221,7 +1221,8 @@ 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_SCSI_FEATURES(VirtIOPCIProxy, host_features),
+ 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..da02f08 100644
--- a/hw/virtio-scsi.h
+++ b/hw/virtio-scsi.h
@@ -47,12 +47,16 @@ 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_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 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 DEFINE_VIRTIO_SCSI_FEATURES(_state, _feature_field) \
+ DEFINE_VIRTIO_COMMON_FEATURES(_state, _feature_field), \
+ DEFINE_PROP_BIT("hotplug", _state, _feature_field, VIRTIO_SCSI_F_HOTPLUG, \
+ true), \
+ DEFINE_PROP_BIT("param_change", _state, _feature_field, \
+ VIRTIO_SCSI_F_CHANGE, true)
#endif /* _QEMU_VIRTIO_SCSI_H */
--
1.7.11.7
^ permalink raw reply related [flat|nested] 14+ messages in thread
* [Qemu-devel] [PATCH v5 04/10] virtio-scsi: add the virtio-scsi device.
2013-03-21 14:15 [Qemu-devel] [PATCH v5 00/10] virtio-scsi refactoring fred.konrad
` (2 preceding siblings ...)
2013-03-21 14:15 ` [Qemu-devel] [PATCH v5 03/10] virtio-scsi: moving host_features from properties to transport properties fred.konrad
@ 2013-03-21 14:15 ` fred.konrad
2013-03-21 14:15 ` [Qemu-devel] [PATCH v5 05/10] virtio-scsi-pci: switch to new API fred.konrad
` (8 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: fred.konrad @ 2013-03-21 14:15 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..56d1b27 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-scsi-pci device, and the
+ * refactored virtio-scsi.
+ */
+
+ 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 da02f08..758c29b 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] 14+ messages in thread
* [Qemu-devel] [PATCH v5 05/10] virtio-scsi-pci: switch to new API.
2013-03-21 14:15 [Qemu-devel] [PATCH v5 00/10] virtio-scsi refactoring fred.konrad
` (3 preceding siblings ...)
2013-03-21 14:15 ` [Qemu-devel] [PATCH v5 04/10] virtio-scsi: add the virtio-scsi device fred.konrad
@ 2013-03-21 14:15 ` fred.konrad
2013-03-21 14:15 ` [Qemu-devel] [PATCH v5 06/10] virtio-scsi-s390: switch to the " fred.konrad
` (7 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: fred.konrad @ 2013-03-21 14:15 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 | 116 ++++++++++++++++++++++++++++----------------------------
hw/virtio-pci.h | 15 +++++++-
2 files changed, 71 insertions(+), 60 deletions(-)
diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
index 0cf8b2e..668060d 100644
--- a/hw/virtio-pci.c
+++ b/hw/virtio-pci.c
@@ -1190,64 +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_SCSI_FEATURES(VirtIOPCIProxy, host_features),
- 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)
{
@@ -1454,6 +1396,62 @@ 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_SCSI_FEATURES(VirtIOPCIProxy, host_features),
+ 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)
@@ -1495,7 +1493,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);
@@ -1503,6 +1500,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] 14+ messages in thread
* [Qemu-devel] [PATCH v5 06/10] virtio-scsi-s390: switch to the new API.
2013-03-21 14:15 [Qemu-devel] [PATCH v5 00/10] virtio-scsi refactoring fred.konrad
` (4 preceding siblings ...)
2013-03-21 14:15 ` [Qemu-devel] [PATCH v5 05/10] virtio-scsi-pci: switch to new API fred.konrad
@ 2013-03-21 14:15 ` fred.konrad
2013-03-21 14:15 ` [Qemu-devel] [PATCH v5 07/10] virtio-scsi-ccw: switch to " fred.konrad
` (6 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: fred.konrad @ 2013-03-21 14:15 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 68db7b9..2dd1c63 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_SCSI_FEATURES(VirtIOS390Device, host_features),
DEFINE_PROP_END_OF_LIST(),
};
@@ -558,9 +566,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] 14+ messages in thread
* [Qemu-devel] [PATCH v5 07/10] virtio-scsi-ccw: switch to new API
2013-03-21 14:15 [Qemu-devel] [PATCH v5 00/10] virtio-scsi refactoring fred.konrad
` (5 preceding siblings ...)
2013-03-21 14:15 ` [Qemu-devel] [PATCH v5 06/10] virtio-scsi-s390: switch to the " fred.konrad
@ 2013-03-21 14:15 ` fred.konrad
2013-03-21 14:15 ` [Qemu-devel] [PATCH v5 08/10] virtio-scsi: cleanup: use QOM casts fred.konrad
` (5 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: fred.konrad @ 2013-03-21 14:15 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 f852721..bbe92f5 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_SCSI_FEATURES(VirtioCcwDevice, host_features[0]),
DEFINE_PROP_END_OF_LIST(),
};
@@ -847,15 +849,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] 14+ messages in thread
* [Qemu-devel] [PATCH v5 08/10] virtio-scsi: cleanup: use QOM casts.
2013-03-21 14:15 [Qemu-devel] [PATCH v5 00/10] virtio-scsi refactoring fred.konrad
` (6 preceding siblings ...)
2013-03-21 14:15 ` [Qemu-devel] [PATCH v5 07/10] virtio-scsi-ccw: switch to " fred.konrad
@ 2013-03-21 14:15 ` fred.konrad
2013-03-21 14:15 ` [Qemu-devel] [PATCH v5 09/10] virtio-scsi: cleanup: init and exit functions fred.konrad
` (4 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: fred.konrad @ 2013-03-21 14:15 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 56d1b27..c341d24 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 758c29b..fe2c7d6 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] 14+ messages in thread
* [Qemu-devel] [PATCH v5 09/10] virtio-scsi: cleanup: init and exit functions.
2013-03-21 14:15 [Qemu-devel] [PATCH v5 00/10] virtio-scsi refactoring fred.konrad
` (7 preceding siblings ...)
2013-03-21 14:15 ` [Qemu-devel] [PATCH v5 08/10] virtio-scsi: cleanup: use QOM casts fred.konrad
@ 2013-03-21 14:15 ` fred.konrad
2013-03-21 14:15 ` [Qemu-devel] [PATCH v5 10/10] virtio-scsi: cleanup: remove qdev field fred.konrad
` (3 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: fred.konrad @ 2013-03-21 14:15 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 c341d24..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-scsi-pci device, and the
- * refactored virtio-scsi.
- */
+ 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] 14+ messages in thread
* [Qemu-devel] [PATCH v5 10/10] virtio-scsi: cleanup: remove qdev field.
2013-03-21 14:15 [Qemu-devel] [PATCH v5 00/10] virtio-scsi refactoring fred.konrad
` (8 preceding siblings ...)
2013-03-21 14:15 ` [Qemu-devel] [PATCH v5 09/10] virtio-scsi: cleanup: init and exit functions fred.konrad
@ 2013-03-21 14:15 ` fred.konrad
2013-03-22 9:25 ` [Qemu-devel] [PATCH v5 00/10] virtio-scsi refactoring Cornelia Huck
` (2 subsequent siblings)
12 siblings, 0 replies; 14+ messages in thread
From: fred.konrad @ 2013-03-21 14:15 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 fe2c7d6..31e97bb 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] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v5 00/10] virtio-scsi refactoring.
2013-03-21 14:15 [Qemu-devel] [PATCH v5 00/10] virtio-scsi refactoring fred.konrad
` (9 preceding siblings ...)
2013-03-21 14:15 ` [Qemu-devel] [PATCH v5 10/10] virtio-scsi: cleanup: remove qdev field fred.konrad
@ 2013-03-22 9:25 ` Cornelia Huck
2013-03-26 11:12 ` Peter Maydell
2013-03-26 18:33 ` Anthony Liguori
12 siblings, 0 replies; 14+ messages in thread
From: Cornelia Huck @ 2013-03-22 9:25 UTC (permalink / raw)
To: fred.konrad; +Cc: peter.maydell, aliguori, mark.burton, qemu-devel
On Thu, 21 Mar 2013 15:15:10 +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-v5
>
> Note that it is nearly the same series as virtio-blk refactoring. Though the 2nd
> and the 3rd steps are a virtio-scsi specific.
Reviewed-by: Cornelia Huck <cornelia.huck@de.ibm.com>
>
> I made basic tests (with linux guests) on:
> * qemu-system-i386
On s390 (both s390-virtio and virtio-ccw):
Tested-by: Cornelia Huck <cornelia.huck@de.ibm.com>
>
> Changes v4 -> v5:
> * Added macro for features properties.
> * Fixed the bad comment in virtio-scsi.c spotted by Cornelia.
>
> 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 | 26 +++++++---
> hw/s390x/s390-virtio-bus.h | 11 +++-
> hw/s390x/virtio-ccw.c | 28 ++++++-----
> hw/s390x/virtio-ccw.h | 12 ++++-
> hw/virtio-pci.c | 115 +++++++++++++++++++++---------------------
> hw/virtio-pci.h | 15 +++++-
> hw/virtio-scsi.c | 122 ++++++++++++++++++++++++++++++---------------
> hw/virtio-scsi.h | 30 +++++++----
> 8 files changed, 226 insertions(+), 133 deletions(-)
>
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v5 00/10] virtio-scsi refactoring.
2013-03-21 14:15 [Qemu-devel] [PATCH v5 00/10] virtio-scsi refactoring fred.konrad
` (10 preceding siblings ...)
2013-03-22 9:25 ` [Qemu-devel] [PATCH v5 00/10] virtio-scsi refactoring Cornelia Huck
@ 2013-03-26 11:12 ` Peter Maydell
2013-03-26 18:33 ` Anthony Liguori
12 siblings, 0 replies; 14+ messages in thread
From: Peter Maydell @ 2013-03-26 11:12 UTC (permalink / raw)
To: fred.konrad; +Cc: cornelia.huck, aliguori, mark.burton, qemu-devel
On 21 March 2013 14:15, <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.
Series:
Reviewed-by: Peter Maydell <peter.maydell@linaro.org>
-- PMM
^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [Qemu-devel] [PATCH v5 00/10] virtio-scsi refactoring.
2013-03-21 14:15 [Qemu-devel] [PATCH v5 00/10] virtio-scsi refactoring fred.konrad
` (11 preceding siblings ...)
2013-03-26 11:12 ` Peter Maydell
@ 2013-03-26 18:33 ` Anthony Liguori
12 siblings, 0 replies; 14+ messages in thread
From: Anthony Liguori @ 2013-03-26 18:33 UTC (permalink / raw)
To: fred.konrad, qemu-devel, aliguori
Cc: cornelia.huck, peter.maydell, mark.burton
Applied. Thanks.
Regards,
Anthony Liguori
^ permalink raw reply [flat|nested] 14+ messages in thread