From: Zhenzhong Duan <[email protected]>
After CPR transfer, if there are more than one VFIO devices, device is
not added to hwpt->device_list and its reference to hwpt isn't restored
on destination. We still need to call iommufd_cdev_attach_container() to
restore it after a matching container is found, or else SIGSEV triggers.
Fixes: 4296ee07455e ("vfio/iommufd: reconstruct device")
Signed-off-by: Zhenzhong Duan <[email protected]>
Reviewed-by: Steve Sistare <[email protected]>
Link:
https://lore.kernel.org/qemu-devel/[email protected]
Signed-off-by: Cédric Le Goater <[email protected]>
---
hw/vfio/iommufd.c | 5 ++---
1 file changed, 2 insertions(+), 3 deletions(-)
diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c
index
63a16d4dc1795d359ff298bcddda292d1e03028e..24a99efa87f4df268d0df7198f26bba37976874b
100644
--- a/hw/vfio/iommufd.c
+++ b/hw/vfio/iommufd.c
@@ -560,10 +560,9 @@ static bool iommufd_cdev_attach(const char *name,
VFIODevice *vbasedev,
continue;
}
- if (!cpr_is_incoming()) {
+ if (!cpr_is_incoming() ||
+ (vbasedev->cpr.ioas_id == container->ioas_id)) {
res = iommufd_cdev_attach_container(vbasedev, container, &err);
- } else if (vbasedev->cpr.ioas_id == container->ioas_id) {
- res = true;
} else {
continue;
}
--
2.51.0