[Top][All Lists]
[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
[Qemu-devel] [PATCH 13/13] virtio: convert virtio_save/virtio_load inter
From: |
Michael Roth |
Subject: |
[Qemu-devel] [PATCH 13/13] virtio: convert virtio_save/virtio_load interfaces to accept Visitors |
Date: |
Thu, 27 Oct 2011 13:17:25 -0500 |
With all virtio_save/virtio_load users converted to visitors, modify the
interface to accept a Visitor directly, along with an Error** for error
propagation.
Signed-off-by: Michael Roth <address@hidden>
---
hw/virtio-balloon.c | 4 ++--
hw/virtio-blk.c | 4 ++--
hw/virtio-net.c | 4 ++--
hw/virtio-pci.c | 12 ++++--------
hw/virtio-serial-bus.c | 4 ++--
hw/virtio.c | 37 +++++++++++++++++++------------------
hw/virtio.h | 14 +++++++-------
7 files changed, 38 insertions(+), 41 deletions(-)
diff --git a/hw/virtio-balloon.c b/hw/virtio-balloon.c
index 242c58d..2ba8c91 100644
--- a/hw/virtio-balloon.c
+++ b/hw/virtio-balloon.c
@@ -251,7 +251,7 @@ static void virtio_balloon_save(QEMUFile *f, void *opaque)
visit_start_struct(v, NULL, NULL, "virtio_balloon", 0, &err);
- virtio_save(&s->vdev, f);
+ virtio_save(&s->vdev, v, &err);
visit_type_uint32(v, &s->num_pages, "num_pages", &err);
visit_type_uint32(v, &s->actual, "actual", &err);
@@ -275,7 +275,7 @@ static int virtio_balloon_load(QEMUFile *f, void *opaque,
int version_id)
visit_start_struct(v, NULL, NULL, "virtio_balloon", 0, &err);
- virtio_load(&s->vdev, f);
+ virtio_load(&s->vdev, v, &err);
visit_type_uint32(v, &s->num_pages, "num_pages", &err);
visit_type_uint32(v, &s->actual, "actual", &err);
diff --git a/hw/virtio-blk.c b/hw/virtio-blk.c
index 2ddcc1e..4efc70e 100644
--- a/hw/virtio-blk.c
+++ b/hw/virtio-blk.c
@@ -518,7 +518,7 @@ static void virtio_blk_save(QEMUFile *f, void *opaque)
visit_start_struct(v, NULL, NULL, "virtio_blk", 0, &err);
- virtio_save(&s->vdev, f);
+ virtio_save(&s->vdev, v, &err);
visit_start_list(v, "requests", &err);
while (req) {
@@ -564,7 +564,7 @@ static int virtio_blk_load(QEMUFile *f, void *opaque, int
version_id)
visit_start_struct(v, NULL, NULL, "virtio_blk", 0, &err);
- virtio_load(&s->vdev, f);
+ virtio_load(&s->vdev, v, &err);
visit_start_list(v, "requests", &err);
while (1) {
diff --git a/hw/virtio-net.c b/hw/virtio-net.c
index 974af5c..a4ea61e 100644
--- a/hw/virtio-net.c
+++ b/hw/virtio-net.c
@@ -873,7 +873,7 @@ static void virtio_net_save(QEMUFile *f, void *opaque)
visit_start_struct(v, NULL, NULL, "virtio_net", 0, &err);
- virtio_save(&n->vdev, f);
+ virtio_save(&n->vdev, v, &err);
visit_start_array(v, NULL, "mac", ETH_ALEN, 1, &err);
for (i = 0; i < ETH_ALEN; i++) {
@@ -932,7 +932,7 @@ static int virtio_net_load(QEMUFile *f, void *opaque, int
version_id)
visit_start_struct(v, NULL, NULL, "virtio_net", 0, &err);
- virtio_load(&n->vdev, f);
+ virtio_load(&n->vdev, v, &err);
visit_start_array(v, NULL, "mac", ETH_ALEN, 1, &err);
for (i = 0; i < ETH_ALEN; i++) {
diff --git a/hw/virtio-pci.c b/hw/virtio-pci.c
index cede802..051bcad 100644
--- a/hw/virtio-pci.c
+++ b/hw/virtio-pci.c
@@ -100,10 +100,9 @@ static void virtio_pci_notify(void *opaque, uint16_t
vector)
qemu_set_irq(proxy->pci_dev.irq[0], proxy->vdev->isr & 1);
}
-static void virtio_pci_save_config(void * opaque, QEMUFile *f)
+static void virtio_pci_save_config(void * opaque, Visitor *v, Error **errp)
{
VirtIOPCIProxy *proxy = opaque;
- Visitor *v = qemu_file_get_visitor(f);
Error *err = NULL;
pci_device_save(&proxy->pci_dev, v, &err);
@@ -119,10 +118,9 @@ static void virtio_pci_save_config(void * opaque, QEMUFile
*f)
}
}
-static void virtio_pci_save_queue(void * opaque, int n, QEMUFile *f)
+static void virtio_pci_save_queue(void * opaque, int n, Visitor *v, Error
**errp)
{
VirtIOPCIProxy *proxy = opaque;
- Visitor *v = qemu_file_get_visitor(f);
Error *err = NULL;
uint16_t vector;
@@ -137,10 +135,9 @@ static void virtio_pci_save_queue(void * opaque, int n,
QEMUFile *f)
}
}
-static int virtio_pci_load_config(void * opaque, QEMUFile *f)
+static int virtio_pci_load_config(void * opaque, Visitor *v, Error **errp)
{
VirtIOPCIProxy *proxy = opaque;
- Visitor *v = qemu_file_get_visitor(f);
Error *err = NULL;
int ret;
@@ -167,10 +164,9 @@ out:
return ret;
}
-static int virtio_pci_load_queue(void * opaque, int n, QEMUFile *f)
+static int virtio_pci_load_queue(void * opaque, int n, Visitor *v, Error
**errp)
{
VirtIOPCIProxy *proxy = opaque;
- Visitor *v = qemu_file_get_visitor(f);
Error *err = NULL;
uint16_t vector;
int ret = 0;
diff --git a/hw/virtio-serial-bus.c b/hw/virtio-serial-bus.c
index 78cd643..97d389f 100644
--- a/hw/virtio-serial-bus.c
+++ b/hw/virtio-serial-bus.c
@@ -528,7 +528,7 @@ static void virtio_serial_save(QEMUFile *f, void *opaque)
visit_start_struct(v, NULL, NULL, "virtio_serial", 0, &err);
/* The virtio device */
- virtio_save(&s->vdev, f);
+ virtio_save(&s->vdev, v, &err);
/* The config space */
visit_type_uint16(v, &s->config.cols, "config.cols", &err);
@@ -612,7 +612,7 @@ static int virtio_serial_load(QEMUFile *f, void *opaque,
int version_id)
visit_start_struct(v, NULL, NULL, "virtio_serial", 0, &err);
/* The virtio device */
- virtio_load(&s->vdev, f);
+ virtio_load(&s->vdev, v, &err);
if (version_id < 2) {
goto out;
diff --git a/hw/virtio.c b/hw/virtio.c
index 0471c54..1791083 100644
--- a/hw/virtio.c
+++ b/hw/virtio.c
@@ -730,10 +730,9 @@ void virtio_notify_config(VirtIODevice *vdev)
virtio_notify_vector(vdev, vdev->config_vector);
}
-void virtio_save(VirtIODevice *vdev, QEMUFile *f)
+void virtio_save(VirtIODevice *vdev, Visitor *v, Error **errp)
{
int i;
- Visitor *v = qemu_file_get_visitor(f);
Error *err = NULL;
uint8_t *config;
uint64_t tmp;
@@ -741,7 +740,7 @@ void virtio_save(VirtIODevice *vdev, QEMUFile *f)
visit_start_struct(v, NULL, NULL, "vdev", 0, &err);
if (vdev->binding->save_config) {
- vdev->binding->save_config(vdev->binding_opaque, f);
+ vdev->binding->save_config(vdev->binding_opaque, v, &err);
}
visit_type_uint8(v, &vdev->status, "status", &err);
@@ -781,7 +780,7 @@ void virtio_save(VirtIODevice *vdev, QEMUFile *f)
visit_type_uint16(v, &vdev->vq[i].last_avail_idx, "last_avail_idx",
&err);
if (vdev->binding->save_queue) {
- vdev->binding->save_queue(vdev->binding_opaque, i, f);
+ vdev->binding->save_queue(vdev->binding_opaque, i, v, &err);
}
visit_end_struct(v, &err);
@@ -792,17 +791,16 @@ void virtio_save(VirtIODevice *vdev, QEMUFile *f)
if (err) {
error_report("error saving virtio state: %s", error_get_pretty(err));
- error_free(err);
+ error_propagate(errp, err);
}
}
-int virtio_load(VirtIODevice *vdev, QEMUFile *f)
+int virtio_load(VirtIODevice *vdev, Visitor *v, Error **errp)
{
uint32_t num, i, ret;
uint32_t features;
uint32_t supported_features =
vdev->binding->get_features(vdev->binding_opaque);
- Visitor *v = qemu_file_get_visitor(f);
Error *err = NULL;
uint8_t *config;
uint64_t tmp;
@@ -810,9 +808,9 @@ int virtio_load(VirtIODevice *vdev, QEMUFile *f)
visit_start_struct(v, NULL, NULL, "vdev", 0, &err);
if (vdev->binding->load_config) {
- ret = vdev->binding->load_config(vdev->binding_opaque, f);
+ ret = vdev->binding->load_config(vdev->binding_opaque, v, &err);
if (ret) {
- return ret;
+ goto out;
}
}
@@ -823,7 +821,8 @@ int virtio_load(VirtIODevice *vdev, QEMUFile *f)
if (features & ~supported_features) {
error_report("Features 0x%x unsupported. Allowed features: 0x%x",
features, supported_features);
- return -1;
+ ret = -1;
+ goto out;
}
if (vdev->set_features)
vdev->set_features(vdev, features);
@@ -862,18 +861,20 @@ int virtio_load(VirtIODevice *vdev, QEMUFile *f)
i, vdev->vq[i].vring.num,
vring_avail_idx(&vdev->vq[i]),
vdev->vq[i].last_avail_idx, nheads);
- return -1;
+ ret = -1;
+ goto out;
}
} else if (vdev->vq[i].last_avail_idx) {
error_report("VQ %d address 0x0 "
"inconsistent with Host index 0x%x",
i, vdev->vq[i].last_avail_idx);
- return -1;
+ ret = -1;
+ goto out;
}
if (vdev->binding->load_queue) {
- ret = vdev->binding->load_queue(vdev->binding_opaque, i, f);
+ ret = vdev->binding->load_queue(vdev->binding_opaque, i, v, &err);
if (ret) {
- return ret;
+ goto out;
}
}
visit_end_struct(v, &err);
@@ -882,14 +883,14 @@ int virtio_load(VirtIODevice *vdev, QEMUFile *f)
visit_end_struct(v, &err);
+ virtio_notify_vector(vdev, VIRTIO_NO_VECTOR);
+out:
if (err) {
error_report("error loading virtio state: %s", error_get_pretty(err));
- error_free(err);
- return -1;
+ error_propagate(errp, err);
}
- virtio_notify_vector(vdev, VIRTIO_NO_VECTOR);
- return 0;
+ return ret;
}
void virtio_cleanup(VirtIODevice *vdev)
diff --git a/hw/virtio.h b/hw/virtio.h
index 2d18209..0695606 100644
--- a/hw/virtio.h
+++ b/hw/virtio.h
@@ -93,11 +93,11 @@ typedef struct VirtQueueElement
typedef struct {
void (*notify)(void * opaque, uint16_t vector);
- void (*save_config)(void * opaque, QEMUFile *f);
- void (*save_queue)(void * opaque, int n, QEMUFile *f);
- int (*load_config)(void * opaque, QEMUFile *f);
- int (*load_queue)(void * opaque, int n, QEMUFile *f);
- int (*load_done)(void * opaque, QEMUFile *f);
+ void (*save_config)(void * opaque, Visitor *v, Error **errp);
+ void (*save_queue)(void * opaque, int n, Visitor *v, Error **errp);
+ int (*load_config)(void * opaque, Visitor *v, Error **errp);
+ int (*load_queue)(void * opaque, int n, Visitor *v, Error **errp);
+ int (*load_done)(void * opaque, Visitor *v, Error **errp);
unsigned (*get_features)(void * opaque);
bool (*query_guest_notifiers)(void * opaque);
int (*set_guest_notifiers)(void * opaque, bool assigned);
@@ -152,9 +152,9 @@ int virtqueue_avail_bytes(VirtQueue *vq, int in_bytes, int
out_bytes);
void virtio_notify(VirtIODevice *vdev, VirtQueue *vq);
-void virtio_save(VirtIODevice *vdev, QEMUFile *f);
+void virtio_save(VirtIODevice *vdev, Visitor *v, Error **errp);
-int virtio_load(VirtIODevice *vdev, QEMUFile *f);
+int virtio_load(VirtIODevice *vdev, Visitor *v, Error **errp);
void virtio_cleanup(VirtIODevice *vdev);
--
1.7.4.1
- [Qemu-devel] [PATCH 02/13] ivshmem: convert save/load to visitor, (continued)
- [Qemu-devel] [PATCH 02/13] ivshmem: convert save/load to visitor, Michael Roth, 2011/10/27
- [Qemu-devel] [PATCH 05/13] openpic: convert save/load to visitors, Michael Roth, 2011/10/27
- [Qemu-devel] [PATCH 06/13] i440fx: convert save/load to visitors, Michael Roth, 2011/10/27
- [Qemu-devel] [PATCH 03/13] virtio-pci: convert save/load to visitors, Michael Roth, 2011/10/27
- [Qemu-devel] [PATCH 08/13] virtio: convert common virtio save/load to visitors, Michael Roth, 2011/10/27
- [Qemu-devel] [PATCH 09/13] virtio-balloon: convert save/load to visitors, Michael Roth, 2011/10/27
- [Qemu-devel] [PATCH 07/13] pci: convert pci_device_(save|load) interfaces to accept Visitors, Michael Roth, 2011/10/27
- [Qemu-devel] [PATCH 12/13] virtio-serial: convert save/load to visitors, Michael Roth, 2011/10/27
- [Qemu-devel] [PATCH 01/13] slirp: convert save/load function to visitor interface, Michael Roth, 2011/10/27
- [Qemu-devel] [PATCH 10/13] virtio-blk: convert save/load to visitors, Michael Roth, 2011/10/27
- [Qemu-devel] [PATCH 13/13] virtio: convert virtio_save/virtio_load interfaces to accept Visitors,
Michael Roth <=
- [Qemu-devel] [PATCH 11/13] virtio-net: convert save/load to visitors, Michael Roth, 2011/10/27