mirror of
https://github.com/izzy2lost/xemu.git
synced 2026-07-06 00:20:22 -07:00
vfio/iommufd: invariant device name
cpr-transfer will use the device name as a key to find the value of the device descriptor in new QEMU. However, if the descriptor number is specified by a command-line fd parameter, then vfio_device_get_name creates a name that includes the fd number. This causes a chicken-and-egg problem: new QEMU must know the fd number to construct a name to find the fd number. To fix, create an invariant name based on the id command-line parameter, if id is defined. The user will need to provide such an id to use CPR. Signed-off-by: Steve Sistare <steven.sistare@oracle.com> Reviewed-by: Cédric Le Goater <clg@redhat.com> Reviewed-by: Zhenzhong Duan <zhenzhong.duan@intel.com> Link: https://lore.kernel.org/qemu-devel/1751493538-202042-10-git-send-email-steven.sistare@oracle.com Signed-off-by: Cédric Le Goater <clg@redhat.com>
This commit is contained in:
committed by
Cédric Le Goater
parent
fb32965b6d
commit
b9b389b9e0
+10
-5
@@ -316,12 +316,17 @@ bool vfio_device_get_name(VFIODevice *vbasedev, Error **errp)
|
||||
error_setg(errp, "Use FD passing only with iommufd backend");
|
||||
return false;
|
||||
}
|
||||
/*
|
||||
* Give a name with fd so any function printing out vbasedev->name
|
||||
* will not break.
|
||||
*/
|
||||
if (!vbasedev->name) {
|
||||
vbasedev->name = g_strdup_printf("VFIO_FD%d", vbasedev->fd);
|
||||
|
||||
if (vbasedev->dev->id) {
|
||||
vbasedev->name = g_strdup(vbasedev->dev->id);
|
||||
return true;
|
||||
} else {
|
||||
/*
|
||||
* Assign a name so any function printing it will not break.
|
||||
*/
|
||||
vbasedev->name = g_strdup_printf("VFIO_FD%d", vbasedev->fd);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user