在 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:
Add a selftest to exercise preserving a vfio-pci device across a Live
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
Hi, Vipin

Thanks a lot for your help. I followed your suggestion, vfio-pci setup can
work.
I am glad your setup using virsh is working.

The followings are the test result. In the step 3, after kexec, there are
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.
This is correct output. Test is verifying that open should fail. If it
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") fails
(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
These are all correct output. Test is verifying that userspace should
not be able to get VFIO device FD only through Live Update session
ioctls and nothing else.

Retrieving memfd from LUO
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

This is shows VFIO FD is successfully retrived by Live Update ioctl.

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 <[email protected]>

Zhu Yanjun


Thanks
Vipin

--
Best Regards,
Yanjun.Zhu


Reply via email to