Re: [PATCH v5 17/20] vfio: selftests: Add vfio_pci_liveupdate_kexec_test
From: Zhu Yanjun
Date: Sat Sep 05 2026 - 00:08:11 EST
在 2026/8/4 23:02, Vipin Sharma 写道:
On Tue, Aug 04, 2026 at 03:19:34PM -0700, Yanjun.Zhu wrote:
On 7/14/26 8:15 AM, Vipin Sharma wrote:I am glad your setup using virsh is working.
Add a selftest to exercise preserving a vfio-pci device across a LiveHi, Vipin
Update. For now the test is extremely simple and just verifies that the
device file can be preserved and retrieved. In the future this test will
be extended to verify more parts about device preservation as they are
implemented.
This test is added to TEST_GEN_PROGS_EXTENDED since it must be run
manually along with a kexec.
To run this test manually:
$ tools/testing/selftests/vfio/scripts/setup.sh 0000:00:04.0
$ tools/testing/selftests/vfio/vfio_pci_liveupdate_kexec_test --stage 1 0000:00:04.0
$ kexec ... # NOTE: Exact method will be distro-dependent
$ tools/testing/selftests/vfio/scripts/setup.sh 0000:00:04.0
$ tools/testing/selftests/vfio/vfio_pci_liveupdate_kexec_test --stage 2 0000:00:04.0
Thanks a lot for your help. I followed your suggestion, vfio-pci setup can
work.
The followings are the test result. In the step 3, after kexec, there areThis is correct output. Test is verifying that open should fail. If it
some fails. I am not sure if these are known problem or not.
1. Before kexec command
+ modprobe -v vfio-pci
+ tools/testing/selftests/vfio/scripts/setup.sh 0000:00:04.0
+ echo "vfio-pci" > /sys/bus/pci/devices/0000:00:04.0/driver_override
+ echo "0000:00:04.0" > /sys/bus/pci/drivers/vfio-pci/bind
+ tools/testing/selftests/vfio/vfio_pci_liveupdate_kexec_test --stage 1
0000:00:04.0
Preserving device in session
Preserving memfd of size 0x40100000 in session
# [STAGE 1] Forking persistent child to hold sessions...
# [STAGE 1] Child PID: 1236. Resources are pinned.
# [STAGE 1] You may now perform kexec reboot.
+ set +x
2. Run kexec command
3. After kexec command
+ echo "vfio-pci" > /sys/bus/pci/devices/0000:00:04.0/driver_override
+ echo "0000:00:04.0" > /sys/bus/pci/drivers/vfio-pci/bind
Checking open(/dev/vfio/devices/vfio0) fails <--- I can confirm that the
/dev/vfio/devices/vfio0 exists. But open this failed.
didn't fail the ntest would have exited with an error. A preserved VFIO
FD can only be retrived using Live Update session ioctls and not through
usual VFIO dev path.
Checking ioctl(group_fd, VFIO_GROUP_GET_DEVICE_FD, "0000:00:04.0") failsThese are all correct output. Test is verifying that userspace should
(vfio_type1_iommu) <--- fails
Checking ioctl(group_fd, VFIO_GROUP_GET_DEVICE_FD, "0000:00:04.0") fails
(vfio_type1v2_iommu). <--- fails
Checking ioctl(group_fd, VFIO_GROUP_GET_DEVICE_FD, "0000:00:04.0") fails
(iommufd_compat_type1) <--- fails
Checking ioctl(group_fd, VFIO_GROUP_GET_DEVICE_FD, "0000:00:04.0") fails
(iommufd_compat_type1v2). <--- fails
not be able to get VFIO device FD only through Live Update session
ioctls and nothing else.
Retrieving memfd from LUOThis is shows VFIO FD is successfully retrived by Live Update ioctl.
Finishing the session before retrieving the device (should fail)
Retrieving the device FD from LUO
Finishing the session before binding to iommufd (should fail)
Binding the device to an iommufd and setting it up
Finishing the session
So, you saw expected output from successful test run. I will change
the message getting printed to avoid confusion. I think current way of
printing ".... fails" is confusing.
Thanks a lot. I have made tests in KVM. I can get the same test results.
Reviewed-and-tested-by: Zhu Yanjun <yanjun.zhu@xxxxxxxxx>
Zhu Yanjun
Thanks
Vipin
--
Best Regards,
Yanjun.Zhu