Stop ignoring the error on save path.
Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
---
hw/virtio/virtio-mmio.c | 21 ++++++---------------
hw/virtio/virtio-pci.c | 21 ++++++---------------
hw/virtio/virtio.c | 24 +++++++++++++-----------
include/hw/virtio/virtio-bus.h | 4 ++--
4 files changed, 27 insertions(+), 43 deletions(-)
diff --git a/hw/virtio/virtio-mmio.c b/hw/virtio/virtio-mmio.c
index 55ceaeef5fc..559363e4438 100644
--- a/hw/virtio/virtio-mmio.c
+++ b/hw/virtio/virtio-mmio.c
@@ -606,29 +606,20 @@ static const VMStateDescription vmstate_virtio_mmio = {
}
};
-static void virtio_mmio_save_extra_state(DeviceState *opaque, QEMUFile *f)
+static bool virtio_mmio_save_extra_state(DeviceState *opaque, QEMUFile *f,
+ Error **errp)
{
VirtIOMMIOProxy *proxy = VIRTIO_MMIO(opaque);
- Error *local_err = NULL;
- int ret;
- ret = vmstate_save_state(f, &vmstate_virtio_mmio, proxy, NULL, &local_err);
- if (ret < 0) {
- error_report_err(local_err);
- }
+ return vmstate_save_vmsd(f, &vmstate_virtio_mmio, proxy, NULL, errp);
}
-static int virtio_mmio_load_extra_state(DeviceState *opaque, QEMUFile *f)
+static bool virtio_mmio_load_extra_state(DeviceState *opaque, QEMUFile *f,
+ Error **errp)
{
VirtIOMMIOProxy *proxy = VIRTIO_MMIO(opaque);
- Error *local_err = NULL;
- int ret;
- ret = vmstate_load_state(f, &vmstate_virtio_mmio, proxy, 1, &local_err);
- if (ret < 0) {
- error_report_err(local_err);
- }
- return ret;
+ return vmstate_load_vmsd(f, &vmstate_virtio_mmio, proxy, 1, errp);
}
static bool virtio_mmio_has_extra_state(DeviceState *opaque)
diff --git a/hw/virtio/virtio-pci.c b/hw/virtio/virtio-pci.c
index 6f5db5fc42b..7a5d4f35e33 100644
--- a/hw/virtio/virtio-pci.c
+++ b/hw/virtio/virtio-pci.c
@@ -184,29 +184,20 @@ static bool virtio_pci_has_extra_state(DeviceState *d)
return true;
}
-static void virtio_pci_save_extra_state(DeviceState *d, QEMUFile *f)
+static bool virtio_pci_save_extra_state(DeviceState *d, QEMUFile *f,
+ Error **errp)
{
VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d);
- Error *local_err = NULL;
- int ret;
- ret = vmstate_save_state(f, &vmstate_virtio_pci, proxy, NULL, &local_err);
- if (ret < 0) {
- error_report_err(local_err);
- }
+ return vmstate_save_vmsd(f, &vmstate_virtio_pci, proxy, NULL, errp);
}
-static int virtio_pci_load_extra_state(DeviceState *d, QEMUFile *f)
+static bool virtio_pci_load_extra_state(DeviceState *d, QEMUFile *f,
+ Error **errp)
{
VirtIOPCIProxy *proxy = to_virtio_pci_proxy(d);
- Error *local_err = NULL;
- int ret;
- ret = vmstate_load_state(f, &vmstate_virtio_pci, proxy, 1, &local_err);
- if (ret < 0) {
- error_report_err(local_err);
- }
- return ret;
+ return vmstate_load_vmsd(f, &vmstate_virtio_pci, proxy, 1, errp);
}
static void virtio_pci_save_queue(DeviceState *d, int n, QEMUFile *f)
diff --git a/hw/virtio/virtio.c b/hw/virtio/virtio.c
index daa5607338c..8230a383aff 100644
--- a/hw/virtio/virtio.c
+++ b/hw/virtio/virtio.c
@@ -2914,35 +2914,37 @@ static const VMStateDescription vmstate_virtio_ringsize
= {
}
};
-static int get_extra_state(QEMUFile *f, void *pv, size_t size,
- const VMStateField *field)
+static bool load_extra_state(QEMUFile *f, void *pv, size_t size,
+ const VMStateField *field,
+ Error **errp)
{
VirtIODevice *vdev = pv;
BusState *qbus = qdev_get_parent_bus(DEVICE(vdev));
VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(qbus);
if (!k->load_extra_state) {
- return -1;
- } else {
- return k->load_extra_state(qbus->parent, f);
+ error_setg(errp, "extra state is unsupported");
+ return false;
}
+
+ return k->load_extra_state(qbus->parent, f, errp);
}
-static int put_extra_state(QEMUFile *f, void *pv, size_t size,
- const VMStateField *field, JSONWriter *vmdesc)
+static bool save_extra_state(QEMUFile *f, void *pv, size_t size,
+ const VMStateField *field, JSONWriter *vmdesc,
+ Error **errp)
{
VirtIODevice *vdev = pv;
BusState *qbus = qdev_get_parent_bus(DEVICE(vdev));
VirtioBusClass *k = VIRTIO_BUS_GET_CLASS(qbus);
- k->save_extra_state(qbus->parent, f);
- return 0;
+ return k->save_extra_state(qbus->parent, f, errp);
}
static const VMStateInfo vmstate_info_extra_state = {
.name = "virtqueue_extra_state",
- .get = get_extra_state,
- .put = put_extra_state,
+ .load = load_extra_state,
+ .save = save_extra_state,
};
static const VMStateDescription vmstate_virtio_extra_state = {
diff --git a/include/hw/virtio/virtio-bus.h b/include/hw/virtio/virtio-bus.h
index f80fd714244..255ecb2fcb2 100644
--- a/include/hw/virtio/virtio-bus.h
+++ b/include/hw/virtio/virtio-bus.h
@@ -43,11 +43,11 @@ struct VirtioBusClass {
void (*notify)(DeviceState *d, uint16_t vector);
void (*save_config)(DeviceState *d, QEMUFile *f);
void (*save_queue)(DeviceState *d, int n, QEMUFile *f);
- void (*save_extra_state)(DeviceState *d, QEMUFile *f);
+ bool (*save_extra_state)(DeviceState *d, QEMUFile *f, Error **errp);
int (*load_config)(DeviceState *d, QEMUFile *f);
int (*load_queue)(DeviceState *d, int n, QEMUFile *f);
int (*load_done)(DeviceState *d, QEMUFile *f);
- int (*load_extra_state)(DeviceState *d, QEMUFile *f);
+ bool (*load_extra_state)(DeviceState *d, QEMUFile *f, Error **errp);
bool (*has_extra_state)(DeviceState *d);
bool (*query_guest_notifiers)(DeviceState *d);
int (*set_guest_notifiers)(DeviceState *d, int nvqs, bool assign);
--
2.43.0