Signed-off-by: Vladimir Sementsov-Ogievskiy <vsementsov@yandex-team.ru>
---
hw/pci/pci.c | 66 +++++++++++++++++++++++++++-------------------------
1 file changed, 34 insertions(+), 32 deletions(-)
diff --git a/hw/pci/pci.c b/hw/pci/pci.c
index acc03fd470..c66bfd96fa 100644
--- a/hw/pci/pci.c
+++ b/hw/pci/pci.c
@@ -786,8 +786,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;
@@ -800,12 +801,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);
@@ -819,28 +820,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];
@@ -848,9 +851,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;
}
}
@@ -858,11 +861,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);
@@ -871,13 +875,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)
@@ -890,17 +894,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,
@@ -926,19 +930,17 @@ void pci_device_save(PCIDevice *s, QEMUFile *f)
* This makes us compatible with old devices
* which never set or clear this bit. */
s->config[PCI_STATUS] &= ~PCI_STATUS_INTERRUPT;
- vmstate_save_state(f, &vmstate_pci_device, s, NULL, &error_fatal);
+ vmstate_save_vmsd(f, &vmstate_pci_device, s, NULL, &error_fatal);
/* Restore the interrupt status bit. */
pci_update_irq_status(s);
}
int pci_device_load(PCIDevice *s, QEMUFile *f)
{
- int ret;
- ret = vmstate_load_state(f, &vmstate_pci_device, s, s->version_id,
- &error_fatal);
+ vmstate_load_vmsd(f, &vmstate_pci_device, s, s->version_id, &error_fatal);
/* Restore the interrupt status bit. */
pci_update_irq_status(s);
- return ret;
+ return 0;
}
static void pci_set_default_subsystem_id(PCIDevice *pci_dev)
--
2.48.1