tools/testing/selftests/vfio/Makefile | 4 + .../selftests/vfio/lib/include/libvfio.h | 1 + .../vfio/lib/include/libvfio/assert.h | 5 + .../vfio/lib/include/libvfio/sysfs.h | 12 ++ .../lib/include/libvfio/vfio_pci_device.h | 11 + tools/testing/selftests/vfio/lib/libvfio.mk | 1 + tools/testing/selftests/vfio/lib/sysfs.c | 141 ++++++++++++ .../selftests/vfio/lib/vfio_pci_device.c | 156 ++++++++++---- .../selftests/vfio/vfio_dma_mapping_test.c | 6 +- .../selftests/vfio/vfio_pci_device_test.c | 21 +- .../selftests/vfio/vfio_pci_sriov_uapi_test.c | 200 ++++++++++++++++++ 11 files changed, 507 insertions(+), 51 deletions(-) create mode 100644 tools/testing/selftests/vfio/lib/include/libvfio/sysfs.h create mode 100644 tools/testing/selftests/vfio/lib/sysfs.c create mode 100644 tools/testing/selftests/vfio/vfio_pci_sriov_uapi_test.c
Hello,
This series adds a vfio selftest, vfio_pci_sriov_uapi_test.c, to get some
coverage on SR-IOV UAPI handling. Specifically, it includes the
following cases that iterates over all the iommu modes:
- Setting correct/incorrect/NULL tokens during device init.
- Close the PF device immediately after setting the token.
- Change/override the PF's token after device init.
The test takes care of creating/setting up the VF device, and hence, it
can be executed like any other test, simply by passing the PF's BDF to
run.sh. For example,
$ ./scripts/setup.sh 0000:16:00.1
$ ./scripts/run.sh ./vfio_pci_sriov_uapi_test
TAP version 13
1..45
# Starting 45 tests from 15 test cases.
# RUN vfio_pci_sriov_uapi_test.vfio_type1_iommu_same_uuid.init_token_match ...
Created 1 VF (0000:1a:00.0) under the PF: 0000:16:00.1
# OK vfio_pci_sriov_uapi_test.vfio_type1_iommu_same_uuid.init_token_match
ok 1 vfio_pci_sriov_uapi_test.vfio_type1_iommu_same_uuid.init_token_match
# RUN vfio_pci_sriov_uapi_test.vfio_type1_iommu_same_uuid.pf_early_close ...
Created 1 VF (0000:1a:00.0) under the PF: 0000:16:00.1
# OK vfio_pci_sriov_uapi_test.vfio_type1_iommu_same_uuid.pf_early_close
ok 2 vfio_pci_sriov_uapi_test.vfio_type1_iommu_same_uuid.pf_early_close
[...]
# RUN vfio_pci_sriov_uapi_test.iommufd_null_uuid.override_token ...
Created 1 VF (0000:1a:00.0) under the PF: 0000:16:00.1
# OK vfio_pci_sriov_uapi_test.iommufd_null_uuid.override_token
ok 45 vfio_pci_sriov_uapi_test.iommufd_null_uuid.override_token
# PASSED: 45 / 45 tests passed.
# Totals: pass:45 fail:0 xfail:0 xpass:0 skip:0 error:0
Thank you.
Raghavendra
v4: Suggestions by David and Alex
- Assert that the value computed in sysfs_val_get() in an int. Rename the
function to sysfs_val_get_int() to better reflect what the function is doing. (Alex)
- Add the missing Signed-off-by tag in patch-7 (David).
v3: Suggestions by David Matlack (thanks!)
- Introduce a patch to add -Wall and -Werror to the vfio Makefile.
- Use snprintf_assert() where they were missed.
- Rename the functions as suggested in the sysfs lib and the test file.
- Alloc the output char * buffer in the functions sysfs_driver_get() and
sysfs_sriov_vf_bdf_get() instead of relying on the caller to pass one.
The caller is now responsible for freeing these buffers.
- Remove unnecessary initializations of local variables in sysfs and the
vfio_pci_device libraries.
- Move the inclusion of -luuid to the top level Makefile.
- Introduce vfio_pci_device_{alloc|free}() and let the test and the functions in
vfio_pci_device.c use this.
- Return -errno for the ioctl failure in __vfio_device_bind_iommufd() instead of
directly calling ioctl_assert().
- Since the vfio-pci driver sets the 'driver_override' to the driver of PF,
instead of clearing sriov_drivers_autoprobe and binding the VF explicitly to
the 'vfio-pci' driver, only assert that it's already bound.
- By extension to the above point, remove the unnecessary functions from the sysfs
lib.
v2: Suggestions by David Matlack (thank you)
- Introduce snprintf_assert() to check against content trucation.
- Introduce a new sysfs library to handle all the common vfio/pci sysfs
operations.
- Rename vfio_pci_container_get_device_fd() to
vfio_pci_group_get_device_fd().
- Use a fixed size 'arg' array instead of dynamic allocation in
__vfio_pci_group_get_device_fd().
- Exclude vfio_pci_device_init() to accept the 'vf_token' arg.
- Move the vfio_pci_sriov_uapi_test.c global variable to the FIXTURE()
struct or as TEST_F() local variables.
- test_vfio_pci_container_setup() returns 'int' to indicate status.
- Skip the test if nr_vfs != 0.
- Explicitly set "sriov_drivers_autoprobe" for the PF.
- Make sure to bind the VF device to the "vfio-pci" driver.
- Cleanup the things done by FIXTURE_SETUP() in FIXTURE_TEARDOWN().
v3: https://lore.kernel.org/all/20260204010057.1079647-1-rananta@google.com/
v2: https://lore.kernel.org/all/20251210181417.3677674-1-rananta@google.com/
v1: https://lore.kernel.org/all/20251104003536.3601931-1-rananta@google.com/
Raghavendra Rao Ananta (8):
vfio: selftests: Add -Wall and -Werror to the Makefile
vfio: selftests: Introduce snprintf_assert()
vfio: selftests: Introduce a sysfs lib
vfio: selftests: Extend container/iommufd setup for passing vf_token
vfio: selftests: Expose more vfio_pci_device functions
vfio: selftests: Add helper to set/override a vf_token
vfio: selftests: Add helpers to alloc/free vfio_pci_device
vfio: selftests: Add tests to validate SR-IOV UAPI
tools/testing/selftests/vfio/Makefile | 4 +
.../selftests/vfio/lib/include/libvfio.h | 1 +
.../vfio/lib/include/libvfio/assert.h | 5 +
.../vfio/lib/include/libvfio/sysfs.h | 12 ++
.../lib/include/libvfio/vfio_pci_device.h | 11 +
tools/testing/selftests/vfio/lib/libvfio.mk | 1 +
tools/testing/selftests/vfio/lib/sysfs.c | 141 ++++++++++++
.../selftests/vfio/lib/vfio_pci_device.c | 156 ++++++++++----
.../selftests/vfio/vfio_dma_mapping_test.c | 6 +-
.../selftests/vfio/vfio_pci_device_test.c | 21 +-
.../selftests/vfio/vfio_pci_sriov_uapi_test.c | 200 ++++++++++++++++++
11 files changed, 507 insertions(+), 51 deletions(-)
create mode 100644 tools/testing/selftests/vfio/lib/include/libvfio/sysfs.h
create mode 100644 tools/testing/selftests/vfio/lib/sysfs.c
create mode 100644 tools/testing/selftests/vfio/vfio_pci_sriov_uapi_test.c
base-commit: d721f52e31553a848e0e9947ca15a49c5674aef3
--
2.53.0.414.gf7e9f6c205-goog
On Tue, 24 Feb 2026 18:25:24 +0000
Raghavendra Rao Ananta <rananta@google.com> wrote:
> Hello,
>
> This series adds a vfio selftest, vfio_pci_sriov_uapi_test.c, to get some
> coverage on SR-IOV UAPI handling. Specifically, it includes the
> following cases that iterates over all the iommu modes:
> - Setting correct/incorrect/NULL tokens during device init.
> - Close the PF device immediately after setting the token.
> - Change/override the PF's token after device init.
>
> The test takes care of creating/setting up the VF device, and hence, it
> can be executed like any other test, simply by passing the PF's BDF to
> run.sh. For example,
>
> $ ./scripts/setup.sh 0000:16:00.1
> $ ./scripts/run.sh ./vfio_pci_sriov_uapi_test
>
> TAP version 13
> 1..45
> # Starting 45 tests from 15 test cases.
> # RUN vfio_pci_sriov_uapi_test.vfio_type1_iommu_same_uuid.init_token_match ...
> Created 1 VF (0000:1a:00.0) under the PF: 0000:16:00.1
> # OK vfio_pci_sriov_uapi_test.vfio_type1_iommu_same_uuid.init_token_match
> ok 1 vfio_pci_sriov_uapi_test.vfio_type1_iommu_same_uuid.init_token_match
> # RUN vfio_pci_sriov_uapi_test.vfio_type1_iommu_same_uuid.pf_early_close ...
> Created 1 VF (0000:1a:00.0) under the PF: 0000:16:00.1
> # OK vfio_pci_sriov_uapi_test.vfio_type1_iommu_same_uuid.pf_early_close
> ok 2 vfio_pci_sriov_uapi_test.vfio_type1_iommu_same_uuid.pf_early_close
> [...]
> # RUN vfio_pci_sriov_uapi_test.iommufd_null_uuid.override_token ...
> Created 1 VF (0000:1a:00.0) under the PF: 0000:16:00.1
> # OK vfio_pci_sriov_uapi_test.iommufd_null_uuid.override_token
> ok 45 vfio_pci_sriov_uapi_test.iommufd_null_uuid.override_token
> # PASSED: 45 / 45 tests passed.
> # Totals: pass:45 fail:0 xfail:0 xpass:0 skip:0 error:0
>
> Thank you.
> Raghavendra
>
> v4: Suggestions by David and Alex
> - Assert that the value computed in sysfs_val_get() in an int. Rename the
> function to sysfs_val_get_int() to better reflect what the function is doing. (Alex)
> - Add the missing Signed-off-by tag in patch-7 (David).
>
> v3: Suggestions by David Matlack (thanks!)
> - Introduce a patch to add -Wall and -Werror to the vfio Makefile.
> - Use snprintf_assert() where they were missed.
> - Rename the functions as suggested in the sysfs lib and the test file.
> - Alloc the output char * buffer in the functions sysfs_driver_get() and
> sysfs_sriov_vf_bdf_get() instead of relying on the caller to pass one.
> The caller is now responsible for freeing these buffers.
> - Remove unnecessary initializations of local variables in sysfs and the
> vfio_pci_device libraries.
> - Move the inclusion of -luuid to the top level Makefile.
> - Introduce vfio_pci_device_{alloc|free}() and let the test and the functions in
> vfio_pci_device.c use this.
> - Return -errno for the ioctl failure in __vfio_device_bind_iommufd() instead of
> directly calling ioctl_assert().
> - Since the vfio-pci driver sets the 'driver_override' to the driver of PF,
> instead of clearing sriov_drivers_autoprobe and binding the VF explicitly to
> the 'vfio-pci' driver, only assert that it's already bound.
> - By extension to the above point, remove the unnecessary functions from the sysfs
> lib.
>
> v2: Suggestions by David Matlack (thank you)
> - Introduce snprintf_assert() to check against content trucation.
> - Introduce a new sysfs library to handle all the common vfio/pci sysfs
> operations.
> - Rename vfio_pci_container_get_device_fd() to
> vfio_pci_group_get_device_fd().
> - Use a fixed size 'arg' array instead of dynamic allocation in
> __vfio_pci_group_get_device_fd().
> - Exclude vfio_pci_device_init() to accept the 'vf_token' arg.
> - Move the vfio_pci_sriov_uapi_test.c global variable to the FIXTURE()
> struct or as TEST_F() local variables.
> - test_vfio_pci_container_setup() returns 'int' to indicate status.
> - Skip the test if nr_vfs != 0.
> - Explicitly set "sriov_drivers_autoprobe" for the PF.
> - Make sure to bind the VF device to the "vfio-pci" driver.
> - Cleanup the things done by FIXTURE_SETUP() in FIXTURE_TEARDOWN().
>
> v3: https://lore.kernel.org/all/20260204010057.1079647-1-rananta@google.com/
> v2: https://lore.kernel.org/all/20251210181417.3677674-1-rananta@google.com/
> v1: https://lore.kernel.org/all/20251104003536.3601931-1-rananta@google.com/
>
> Raghavendra Rao Ananta (8):
> vfio: selftests: Add -Wall and -Werror to the Makefile
> vfio: selftests: Introduce snprintf_assert()
> vfio: selftests: Introduce a sysfs lib
> vfio: selftests: Extend container/iommufd setup for passing vf_token
> vfio: selftests: Expose more vfio_pci_device functions
> vfio: selftests: Add helper to set/override a vf_token
> vfio: selftests: Add helpers to alloc/free vfio_pci_device
> vfio: selftests: Add tests to validate SR-IOV UAPI
>
> tools/testing/selftests/vfio/Makefile | 4 +
> .../selftests/vfio/lib/include/libvfio.h | 1 +
> .../vfio/lib/include/libvfio/assert.h | 5 +
> .../vfio/lib/include/libvfio/sysfs.h | 12 ++
> .../lib/include/libvfio/vfio_pci_device.h | 11 +
> tools/testing/selftests/vfio/lib/libvfio.mk | 1 +
> tools/testing/selftests/vfio/lib/sysfs.c | 141 ++++++++++++
> .../selftests/vfio/lib/vfio_pci_device.c | 156 ++++++++++----
> .../selftests/vfio/vfio_dma_mapping_test.c | 6 +-
> .../selftests/vfio/vfio_pci_device_test.c | 21 +-
> .../selftests/vfio/vfio_pci_sriov_uapi_test.c | 200 ++++++++++++++++++
> 11 files changed, 507 insertions(+), 51 deletions(-)
> create mode 100644 tools/testing/selftests/vfio/lib/include/libvfio/sysfs.h
> create mode 100644 tools/testing/selftests/vfio/lib/sysfs.c
> create mode 100644 tools/testing/selftests/vfio/vfio_pci_sriov_uapi_test.c
>
>
> base-commit: d721f52e31553a848e0e9947ca15a49c5674aef3
Please rebase:
$ git log --oneline --no-merges d721f52e31553a848e0e9947ca15a49c5674aef3..v7.0-rc1 tools/testing/selftests/vfio/a55d4bbbe644 vfio: selftests: only build tests on arm64 and x86_64
1c588bca3bd5 vfio: selftests: Drop IOMMU mapping size assertions for VFIO_TYPE1_IOMMU
080723f4d4c3 vfio: selftests: Add vfio_dma_mapping_mmio_test
557dbdf6c4e9 vfio: selftests: Align BAR mmaps for efficient IOMMU mapping
03b7c2d763c9 vfio: selftests: Centralize IOMMU mode name definitions
193120dddd1a vfio: selftests: Drop <uapi/linux/types.h> includes
e6fbd1759c9e selftests: complete kselftest include centralization
Thanks,
Alex
On Fri, Feb 27, 2026 at 2:20 PM Alex Williamson <alex@shazbot.org> wrote: > > > > base-commit: d721f52e31553a848e0e9947ca15a49c5674aef3 > > Please rebase: > > $ git log --oneline --no-merges d721f52e31553a848e0e9947ca15a49c5674aef3..v7.0-rc1 tools/testing/selftests/vfio/a55d4bbbe644 vfio: selftests: only build tests on arm64 and x86_64 > 1c588bca3bd5 vfio: selftests: Drop IOMMU mapping size assertions for VFIO_TYPE1_IOMMU > 080723f4d4c3 vfio: selftests: Add vfio_dma_mapping_mmio_test > 557dbdf6c4e9 vfio: selftests: Align BAR mmaps for efficient IOMMU mapping > 03b7c2d763c9 vfio: selftests: Centralize IOMMU mode name definitions > 193120dddd1a vfio: selftests: Drop <uapi/linux/types.h> includes > e6fbd1759c9e selftests: complete kselftest include centralization > Rebased to v7.0-rc1 in v5: https://lore.kernel.org/all/20260227233928.84530-1-rananta@google.com/ Thank you. Raghavendra
On 2026-02-24 06:25 PM, Raghavendra Rao Ananta wrote: > Raghavendra Rao Ananta (8): > vfio: selftests: Add -Wall and -Werror to the Makefile > vfio: selftests: Introduce snprintf_assert() > vfio: selftests: Introduce a sysfs lib > vfio: selftests: Extend container/iommufd setup for passing vf_token > vfio: selftests: Expose more vfio_pci_device functions > vfio: selftests: Add helper to set/override a vf_token > vfio: selftests: Add helpers to alloc/free vfio_pci_device > vfio: selftests: Add tests to validate SR-IOV UAPI Reviewed-by: David Matlack <dmatlack@google.com>
© 2016 - 2026 Red Hat, Inc.