On 2023/1/27 3:28, Alex Williamson wrote:
On Fri, 20 Jan 2023 11:29:30 +0800 Longfang Liu liulongfang@huawei.com wrote:
migration debugfs needs to perform debug operations based on the status of the current device. If the device is not loaded or has stopped, debugfs does not allow operations.
so, after the live migration function is executed and the device is turned off, the device no longer needs to be accessed. At this time, the status of the device needs to be set to stop.
Signed-off-by: Longfang Liu liulongfang@huawei.com
drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c | 3 +++ drivers/vfio/pci/mlx5/main.c | 3 +++ 2 files changed, 6 insertions(+)
diff --git a/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c b/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c index 96e2a021a956..bdb9043f88f1 100644 --- a/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c +++ b/drivers/vfio/pci/hisilicon/hisi_acc_vfio_pci.c @@ -1607,6 +1607,9 @@ static void hisi_acc_vfio_pci_close_device(struct vfio_device *core_vdev) struct hisi_acc_vf_core_device *hisi_acc_vdev = hisi_acc_get_vf_dev(core_vdev); struct hisi_qm *vf_qm = &hisi_acc_vdev->vf_qm;
- if (core_vdev->mig_ops)
hisi_acc_vdev->mig_state = VFIO_DEVICE_STATE_STOP;
- iounmap(vf_qm->io_base); vfio_pci_core_close_device(core_vdev);
} diff --git a/drivers/vfio/pci/mlx5/main.c b/drivers/vfio/pci/mlx5/main.c index 031ac8cc215d..64b2fe58355a 100644 --- a/drivers/vfio/pci/mlx5/main.c +++ b/drivers/vfio/pci/mlx5/main.c @@ -1092,6 +1092,9 @@ static void mlx5vf_pci_close_device(struct vfio_device *core_vdev) struct mlx5vf_pci_core_device *mvdev = container_of( core_vdev, struct mlx5vf_pci_core_device, core_device.vdev);
- if (mvdev->migrate_cap)
mvdev->mig_state = VFIO_DEVICE_STATE_STOP;
- mlx5vf_cmd_close_migratable(mvdev); vfio_pci_core_close_device(core_vdev);
}
It seems prone to issues to manipulate the migration state outside of the driver state machine. If the device is closed, shouldn't the debugfs state interface return -EINVAL? Thanks,
This operation itself should be paired with the operation of setting mig_state to the VFIO_DEVICE_STATE_RUNNING state in the open_device of vfio_device_ops. It's just that this problem was not found when the debugfs function was not added. In addition, this setting mig_state to VFIO_DEVICE_STATE_STOP state will be used in hisi_acc_vf_debug_check, which is to prevent the wrong operation of debugfs through this state, and return -EINVAL.
Alex
Thanks, Longfang.
.