Signed-off-by: Vladimir Sementsov-Ogievskiy <[email protected]>
---
hw/pci/pci.c | 58 ++++++++++++++++++++++++++++------------------------
1 file changed, 31 insertions(+), 27 deletions(-)
diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index 76d006fa1d7..0f70f0f7af8 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -807,8 +807,9 @@ int pci_bus_numa_node(PCIBus *bus)
return PCI_BUS_GET_CLASS(bus)->numa_node(bus);
}
-static int get_pci_config_device(QEMUFile *f, void *pv, size_t size,
- const VMStateField *field)
+static bool load_pci_config_device(QEMUFile *f, void *pv, size_t size,
+ const VMStateField *field,
+ Error **errp)
{
PCIDevice *s = container_of(pv, PCIDevice, config);
uint8_t *config;
@@ -821,12 +822,12 @@ static int get_pci_config_device(QEMUFile *f, void *pv,
size_t size,
for (i = 0; i < size; ++i) {
if ((config[i] ^ s->config[i]) &
s->cmask[i] & ~s->wmask[i] & ~s->w1cmask[i]) {
- error_report("%s: Bad config data: i=0x%x read: %x device: %x "
- "cmask: %x wmask: %x w1cmask:%x", __func__,
- i, config[i], s->config[i],
- s->cmask[i], s->wmask[i], s->w1cmask[i]);
+ error_setg(errp, "%s: Bad config data: i=0x%x read: %x device: %x "
+ "cmask: %x wmask: %x w1cmask:%x", __func__,
+ i, config[i], s->config[i],
+ s->cmask[i], s->wmask[i], s->w1cmask[i]);
g_free(config);
- return -EINVAL;
+ return false;
}
}
memcpy(s->config, config, size);
@@ -840,28 +841,30 @@ static int get_pci_config_device(QEMUFile *f, void *pv,
size_t size,
& PCI_COMMAND_MASTER);
g_free(config);
- return 0;
+ return true;
}
/* just put buffer */
-static int put_pci_config_device(QEMUFile *f, void *pv, size_t size,
- const VMStateField *field, JSONWriter *vmdesc)
+static bool save_pci_config_device(QEMUFile *f, void *pv, size_t size,
+ const VMStateField *field,
+ JSONWriter *vmdesc, Error **errp)
{
const uint8_t **v = pv;
assert(size == pci_config_size(container_of(pv, PCIDevice, config)));
qemu_put_buffer(f, *v, size);
- return 0;
+ return true;
}
static const VMStateInfo vmstate_info_pci_config = {
.name = "pci config",
- .get = get_pci_config_device,
- .put = put_pci_config_device,
+ .load = load_pci_config_device,
+ .save = save_pci_config_device,
};
-static int get_pci_irq_state(QEMUFile *f, void *pv, size_t size,
- const VMStateField *field)
+static bool load_pci_irq_state(QEMUFile *f, void *pv, size_t size,
+ const VMStateField *field,
+ Error **errp)
{
PCIDevice *s = container_of(pv, PCIDevice, irq_state);
uint32_t irq_state[PCI_NUM_PINS];
@@ -869,9 +872,9 @@ static int get_pci_irq_state(QEMUFile *f, void *pv, size_t
size,
for (i = 0; i < PCI_NUM_PINS; ++i) {
irq_state[i] = qemu_get_be32(f);
if (irq_state[i] != 0x1 && irq_state[i] != 0) {
- fprintf(stderr, "irq state %d: must be 0 or 1.\n",
- irq_state[i]);
- return -EINVAL;
+ error_setg(errp, "irq state %d: must be 0 or 1.",
+ irq_state[i]);
+ return false;
}
}
@@ -879,11 +882,12 @@ static int get_pci_irq_state(QEMUFile *f, void *pv,
size_t size,
pci_set_irq_state(s, i, irq_state[i]);
}
- return 0;
+ return true;
}
-static int put_pci_irq_state(QEMUFile *f, void *pv, size_t size,
- const VMStateField *field, JSONWriter *vmdesc)
+static bool save_pci_irq_state(QEMUFile *f, void *pv, size_t size,
+ const VMStateField *field, JSONWriter *vmdesc,
+ Error **errp)
{
int i;
PCIDevice *s = container_of(pv, PCIDevice, irq_state);
@@ -892,13 +896,13 @@ static int put_pci_irq_state(QEMUFile *f, void *pv,
size_t size,
qemu_put_be32(f, pci_irq_state(s, i));
}
- return 0;
+ return true;
}
static const VMStateInfo vmstate_info_pci_irq_state = {
.name = "pci irq state",
- .get = get_pci_irq_state,
- .put = put_pci_irq_state,
+ .load = load_pci_irq_state,
+ .save = save_pci_irq_state,
};
static bool migrate_is_pcie(void *opaque, int version_id)
@@ -911,17 +915,17 @@ static bool migrate_is_not_pcie(void *opaque, int
version_id)
return !pci_is_express((PCIDevice *)opaque);
}
-static int pci_post_load(void *opaque, int version_id)
+static bool pci_post_load(void *opaque, int version_id, Error **errp)
{
pcie_sriov_pf_post_load(opaque);
- return 0;
+ return true;
}
const VMStateDescription vmstate_pci_device = {
.name = "PCIDevice",
.version_id = 2,
.minimum_version_id = 1,
- .post_load = pci_post_load,
+ .post_load_errp = pci_post_load,
.fields = (const VMStateField[]) {
VMSTATE_INT32_POSITIVE_LE(version_id, PCIDevice),
VMSTATE_BUFFER_UNSAFE_INFO_TEST(config, PCIDevice,
--
2.43.0