]> xenbits.xensource.com Git - qemu-xen-unstable.git/commitdiff
virtio: new post_load hook
authorMichael S. Tsirkin <mst@redhat.com>
Fri, 11 Oct 2019 13:58:03 +0000 (15:58 +0200)
committerJason Wang <jasowang@redhat.com>
Tue, 29 Oct 2019 02:28:07 +0000 (10:28 +0800)
Post load hook in virtio vmsd is called early while device is processed,
and when VirtIODevice core isn't fully initialized.  Most device
specific code isn't ready to deal with a device in such state, and
behaves weirdly.

Add a new post_load hook in a device class instead.  Devices should use
this unless they specifically want to verify the migration stream as
it's processed, e.g. for bounds checking.

Cc: qemu-stable@nongnu.org
Suggested-by: "Dr. David Alan Gilbert" <dgilbert@redhat.com>
Cc: Mikhail Sennikovsky <mikhail.sennikovskii@cloud.ionos.com>
Signed-off-by: Michael S. Tsirkin <mst@redhat.com>
Signed-off-by: Jason Wang <jasowang@redhat.com>
hw/virtio/virtio.c
include/hw/virtio/virtio.h

index 527df03bfd0a88d3a9c5c44f08b17c630698ec0e..54a46e204cb32266d3dbbd32ee027250b8dfda24 100644 (file)
@@ -2291,6 +2291,13 @@ int virtio_load(VirtIODevice *vdev, QEMUFile *f, int version_id)
     }
     rcu_read_unlock();
 
+    if (vdc->post_load) {
+        ret = vdc->post_load(vdev);
+        if (ret) {
+            return ret;
+        }
+    }
+
     return 0;
 }
 
index 48e8d04ff6fc49b3c3bc8dd6aaebe1ad6decd198..ca4f9c0bcc2e31da7d1cd7ecc0dd547dc8bb7393 100644 (file)
@@ -158,6 +158,12 @@ typedef struct VirtioDeviceClass {
      */
     void (*save)(VirtIODevice *vdev, QEMUFile *f);
     int (*load)(VirtIODevice *vdev, QEMUFile *f, int version_id);
+    /* Post load hook in vmsd is called early while device is processed, and
+     * when VirtIODevice isn't fully initialized.  Devices should use this instead,
+     * unless they specifically want to verify the migration stream as it's
+     * processed, e.g. for bounds checking.
+     */
+    int (*post_load)(VirtIODevice *vdev);
     const VMStateDescription *vmsd;
 } VirtioDeviceClass;