Signed-off-by: Juan Quintela <quint...@redhat.com> --- hw/virtio.c | 27 ++++++++++++++++++++------- 1 files changed, 20 insertions(+), 7 deletions(-)
diff --git a/hw/virtio.c b/hw/virtio.c index 2b36cad..5497716 100644 --- a/hw/virtio.c +++ b/hw/virtio.c @@ -615,6 +615,20 @@ void virtio_notify_config(VirtIODevice *vdev) virtio_notify_vector(vdev, vdev->config_vector); } +static bool is_virtio_pci(void *opaque, int version_id) +{ + VirtIODevice *vdev = opaque; + + return vdev->type == VIRTIO_PCI; +} + +static bool is_virtio_msix(void *opaque, int version_id) +{ + VirtIODevice *vdev = opaque; + return (vdev->type == VIRTIO_PCI) && + virtio_pci_msix_present(vdev->binding_opaque); +} + static void virtio_pre_save(void *opaque) { VirtIODevice *vdev = opaque; @@ -633,7 +647,7 @@ void virtio_save(VirtIODevice *vdev, QEMUFile *f) virtio_pre_save(vdev); - if (vdev->type == VIRTIO_PCI) + if (is_virtio_pci(vdev, 1)) vmstate_save_state(f, &vmstate_virtio_pci_config, vdev->binding_opaque); qemu_put_8s(f, &vdev->status); @@ -649,8 +663,7 @@ void virtio_save(VirtIODevice *vdev, QEMUFile *f) qemu_put_be32s(f, &vdev->vq[i].vring.num); qemu_put_be64s(f, &vdev->vq[i].pa); qemu_put_be16s(f, &vdev->vq[i].last_avail_idx); - if (vdev->type == VIRTIO_PCI && - virtio_pci_msix_present(vdev->binding_opaque)) { + if (is_virtio_msix(vdev, 1)) { qemu_put_be16s(f, &vdev->vq[i].vector); } } @@ -682,11 +695,12 @@ static int virtio_post_load(void *opaque, int version_id) return 0; } + int virtio_load(VirtIODevice *vdev, QEMUFile *f) { int i, ret; - if (vdev->type == VIRTIO_PCI) { + if (is_virtio_pci(vdev, 1)) { ret = vmstate_load_state(f, &vmstate_virtio_pci_config, vdev->binding_opaque, vmstate_virtio_pci_config.version_id); if (ret) @@ -707,9 +721,8 @@ int virtio_load(VirtIODevice *vdev, QEMUFile *f) qemu_get_be64s(f, &vdev->vq[i].pa); qemu_get_be16s(f, &vdev->vq[i].last_avail_idx); - if (vdev->type == VIRTIO_PCI && - virtio_pci_msix_present(vdev->binding_opaque)) { - qemu_get_be16s(f, &vdev->vq[i].vector); + if (is_virtio_msix(vdev, 1)) { + qemu_get_be16s(f, &vdev->vq[i].vector); } } virtio_post_load(vdev, 1); -- 1.6.5.2