Comments
Patch
@@ -656,6 +656,32 @@ void virtio_save(VirtIODevice *vdev, QEMUFile *f)
}
}
+static int virtio_post_load(void *opaque, int version_id)
+{
+ VirtIODevice *vdev = opaque;
+ int i, ret;
+
+ for (i = 0; i < vdev->num_pci_queues; i++) {
+ if (vdev->vq[i].pa) {
+ virtqueue_init(&vdev->vq[i]);
+ }
+ if (vdev->type == VIRTIO_PCI) {
+ if (!virtio_pci_msix_present(vdev->binding_opaque)) {
+ vdev->vq[i].vector = VIRTIO_NO_VECTOR;
+ }
+ if (vdev->vq[i].vector != VIRTIO_NO_VECTOR) {
+ ret = virtio_pci_msix_vector_use(vdev->binding_opaque,
+ vdev->vq[i].vector);
+ if (ret)
+ return ret;
+ }
+ }
+ }
+
+ virtio_notify_vector(vdev, VIRTIO_NO_VECTOR);
+ return 0;
+}
+
int virtio_load(VirtIODevice *vdev, QEMUFile *f)
{
int i, ret;
@@ -681,25 +707,12 @@ int virtio_load(VirtIODevice *vdev, QEMUFile *f)
vdev->vq[i].pa = qemu_get_be64(f);
qemu_get_be16s(f, &vdev->vq[i].last_avail_idx);
- if (vdev->vq[i].pa) {
- virtqueue_init(&vdev->vq[i]);
- }
- if (vdev->type == VIRTIO_PCI) {
- if (virtio_pci_msix_present(vdev->binding_opaque)) {
+ if (vdev->type == VIRTIO_PCI &&
+ virtio_pci_msix_present(vdev->binding_opaque)) {
qemu_get_be16s(f, &vdev->vq[i].vector);
- } else {
- vdev->vq[i].vector = VIRTIO_NO_VECTOR;
- }
- if (vdev->vq[i].vector != VIRTIO_NO_VECTOR) {
- ret = virtio_pci_msix_vector_use(vdev->binding_opaque,
- vdev->vq[i].vector);
- if (ret)
- return ret;
- }
}
}
-
- virtio_notify_vector(vdev, VIRTIO_NO_VECTOR);
+ virtio_post_load(vdev, 1);
return 0;
}
Signed-off-by: Juan Quintela <quintela@redhat.com> --- hw/virtio.c | 45 +++++++++++++++++++++++++++++---------------- 1 files changed, 29 insertions(+), 16 deletions(-)