In the VFIO VM state change handler when stopping the VM, the _RUNNING bit in device_state is cleared which makes the VFIO device stop, including no longer generating interrupts. Then we can save the pending states of all interrupts in the GIC VM state change handler (on ARM). So we have to set the priority of the VFIO VM state change handler explicitly (like virtio devices) to ensure it is called before the GIC's in saving. Signed-off-by: Shenming Lu <lushenming@huawei.com> Reviewed-by: Kirti Wankhede <kwankhede@nvidia.com> Reviewed-by: Cornelia Huck <cohuck@redhat.com> Message-Id: <20210310030233.1133-3-lushenming@huawei.com> Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
42 lines
1.8 KiB
Diff
42 lines
1.8 KiB
Diff
From b9d74bcf6aefe8ab607439ad1c518a453053ccee Mon Sep 17 00:00:00 2001
|
|
From: Shenming Lu <lushenming@huawei.com>
|
|
Date: Wed, 10 Mar 2021 11:02:32 +0800
|
|
Subject: [PATCH] vfio: Set the priority of the VFIO VM state change handler
|
|
explicitly
|
|
|
|
In the VFIO VM state change handler when stopping the VM, the _RUNNING
|
|
bit in device_state is cleared which makes the VFIO device stop, including
|
|
no longer generating interrupts. Then we can save the pending states of
|
|
all interrupts in the GIC VM state change handler (on ARM).
|
|
|
|
So we have to set the priority of the VFIO VM state change handler
|
|
explicitly (like virtio devices) to ensure it is called before the
|
|
GIC's in saving.
|
|
|
|
Signed-off-by: Shenming Lu <lushenming@huawei.com>
|
|
Reviewed-by: Kirti Wankhede <kwankhede@nvidia.com>
|
|
Reviewed-by: Cornelia Huck <cohuck@redhat.com>
|
|
Message-Id: <20210310030233.1133-3-lushenming@huawei.com>
|
|
Signed-off-by: Alex Williamson <alex.williamson@redhat.com>
|
|
---
|
|
hw/vfio/migration.c | 3 ++-
|
|
1 file changed, 2 insertions(+), 1 deletion(-)
|
|
|
|
diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c
|
|
index ea36ae5225..1a97784486 100644
|
|
--- a/hw/vfio/migration.c
|
|
+++ b/hw/vfio/migration.c
|
|
@@ -862,7 +862,8 @@ static int vfio_migration_init(VFIODevice *vbasedev,
|
|
register_savevm_live(id, VMSTATE_INSTANCE_ID_ANY, 1, &savevm_vfio_handlers,
|
|
vbasedev);
|
|
|
|
- migration->vm_state = qemu_add_vm_change_state_handler(vfio_vmstate_change,
|
|
+ migration->vm_state = qdev_add_vm_change_state_handler(vbasedev->dev,
|
|
+ vfio_vmstate_change,
|
|
vbasedev);
|
|
migration->migration_state.notify = vfio_migration_state_notifier;
|
|
add_migration_state_change_notifier(&migration->migration_state);
|
|
--
|
|
2.27.0
|
|
|