Re: [PATCH v5 17/20] vfio: selftests: Add vfio_pci_liveupdate_kexec_test
From: Vipin Sharma
Date: Tue Jul 28 2026 - 01:40:40 EST
On Sun, Jul 26, 2026 at 05:40:54PM -0700, Zhu Yanjun wrote:
>
> 在 2026/7/14 8:15, Vipin Sharma 写道:
> > 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
> # ls /dev
> autofs disk iommu mem rtc0 tty10 tty21
> tty32 tty43 tty54 tty8 ttyS18 ttyS29 uinput vcs6 vcsu4
> virtio-ports
> block dma_heap kmsg mqueue sg0 tty11 tty22
> tty33 tty44 tty55 tty9 ttyS19 ttyS3 urandom vcsa vcsu5
> vport2p1
> bsg dri kvm net shm tty12 tty23
> tty34 tty45 tty56 ttyS0 ttyS2 ttyS30 usbmon0 vcsa1 vcsu6
> vsock
> btrfs-control fd liveupdate null snapshot tty13 tty24
> tty35 tty46 tty57 ttyS1 ttyS20 ttyS31 usbmon1 vcsa2 vda
> watchdog
> bus full log nvram snd tty14 tty25
> tty36 tty47 tty58 ttyS10 ttyS21 ttyS4 usbmon2 vcsa3 vda1
> watchdog0
> cdrom fuse loop-control port sr0 tty15 tty26
> tty37 tty48 tty59 ttyS11 ttyS22 ttyS5 userfaultfd vcsa4 vda2
> zero
> char hidraw0 lp0 ppp stderr tty16 tty27
> tty38 tty49 tty6 ttyS12 ttyS23 ttyS6 vcs vcsa5 vda3 zram0
> console hpet lp1 ptmx stdin tty17 tty28
> tty39 tty5 tty60 ttyS13 ttyS24 ttyS7 vcs1 vcsa6 vfio
> core hugepages lp2 pts stdout tty18 tty29
> tty4 tty50 tty61 ttyS14 ttyS25 ttyS8 vcs2 vcsu vga_arbiter
> cpu hwrng lp3 random tty tty19 tty3
> tty40 tty51 tty62 ttyS15 ttyS26 ttyS9 vcs3 vcsu1 vhci
> cpu_dma_latency i2c-0 mapper rfkill tty0 tty2 tty30
> tty41 tty52 tty63 ttyS16 ttyS27 udmabuf vcs4 vcsu2 vhost-net
> cuse input mcelog rtc tty1 tty20 tty31
> tty42 tty53 tty7 ttyS17 ttyS28 uhid vcs5 vcsu3 vhost-vsock
>
>
> # tools/testing/selftests/vfio/scripts/setup.sh 0000:00:08.0
>
> + echo "vfio-pci" > /sys/bus/pci/devices/0000:00:08.0/driver_override
> + echo "0000:00:08.0" > /sys/bus/pci/drivers/vfio-pci/bind
> tools/testing/selftests/vfio/scripts/lib.sh: line 9: echo: write error:
> Invalid argument <--- the error is here.
>
>
> # lspci -vvv -s 0000:00:08.0
>
> 00:08.0 Unclassified device [00ff]: Red Hat, Inc. QEMU PCI Test Device
> Subsystem: Red Hat, Inc. QEMU Virtual Machine
> Control: I/O+ Mem+ BusMaster- SpecCycle- MemWINV- VGASnoop- ParErr-
> Stepping- SERR+ FastB2B- DisINTx-
> Status: Cap- 66MHz- UDF- FastB2B- ParErr- DEVSEL=fast >TAbort-
> <TAbort- <MAbort- >SERR- <PERR- INTx-
> Region 0: Memory at fea1f000 (32-bit, non-prefetchable) [size=4K]
> Region 1: I/O ports at c000 [size=256]
>
> Hi, Vipin
>
> I worked with QEMU PCI Test Device. But the following error occur.
>
> "tools/testing/selftests/vfio/scripts/lib.sh: line 9: echo: write error:
> Invalid argument"
>
> Is this a known problem?
>
Can you please check if you have passed iommu device in your QEMU
command? This is what I pass to my QEMU command
-device intel-iommu,intremap=on,caching-mode=on,device-iotlb=on
Also, add the following to your guest kernel commandline
intel_iommu=on
This should fix the issue you are seeing.
Alternatively, you can also enable noiommu mode in VFIO by executing:
echo Y > /sys/module/vfio/parameters/enable_unsafe_noiommu_mode
This should allow device to be bound to VFIO.
If none of the above approach works can you please share your QEMU
command and your guest VM /proc/cmdline.
Thanks
Vipin