From: David Matlack <dmatlack@google.com>
To: kvm@vger.kernel.org, linux-kernel@vger.kernel.org,
linux-kselftest@vger.kernel.org
Cc: Alex Williamson <alex@shazbot.org>,
David Matlack <dmatlack@google.com>,
Paolo Bonzini <pbonzini@redhat.com>,
Sean Christopherson <seanjc@google.com>,
Shuah Khan <shuah@kernel.org>
Subject: [PATCH 0/3] vfio: selftests: Automatically detect the IOMMU mode
Date: Thu, 29 Oct 2026 22:17:07 +0000 [thread overview]
Message-ID: <20261029221710.1871112-1-dmatlack@google.com> (raw)
This series makes the VFIO selftests library automatically detect which
IOMMU mode to use, rather than hardcoding iommufd as the default, and
makes tests skip, rather than fail, when the IOMMU mode they need is not
available. This was suggested by Sean while reviewing the KVM IRQ test,
which currently has to probe for the IOMMU mode itself [1].
iommufd is an optional feature, and VFIO's iommufd support additionally
requires CONFIG_VFIO_DEVICE_CDEV. On otherwise functional kernels that
only support the legacy VFIO container, the VFIO selftests (and the KVM
IRQ test, when using a VFIO device) currently fail with an unhelpful
assert:
tools/testing/selftests/vfio/lib/iommu.c:448: Assertion Failure
Expression: iommu->iommufd > 0
Observed: 0xffffffffffffffff > 0
[errno: 2 - No such file or directory]
Patch 1 makes iommu_init(NULL) pick the most preferred IOMMU mode that is
available on the current system, and drops the global default_iommu_mode.
iommu_modes[] is now ordered by preference: iommufd, vfio_type1v2_iommu,
vfio_type1_iommu, iommufd_compat_type1v2, iommufd_compat_type1. A mode is
considered available if its container (or /dev/iommu) can be opened and,
for container modes, if VFIO_CHECK_EXTENSION reports support for the
mode's IOMMU type. iommufd mode additionally requires VFIO device cdevs.
Patch 2 adds iommu_mode_is_available() and
SKIP_IF_IOMMU_MODE_UNAVAILABLE(), and uses them to skip tests when the
IOMMU mode they need is not available. Tests skip via the kselftest
harness's SKIP() rather than iommu_init() calling ksft_exit_skip(), since
the latter produces malformed TAP output when called from within a
harness test.
Patch 3 converts the KVM IRQ test to use the VFIO selftests library to
pick the IOMMU mode, and drops its probe_iommu_type().
This series is based on vfio/next (vfio-v7.4-rc1).
[1] https://lore.kernel.org/kvm/aiIG2L_KdPwuxYA1@google.com/
Testing
-----------------------------------------------------------------------
Tested in a QEMU VM with an emulated igb device behind an emulated Intel
IOMMU, bound to vfio-pci, on a kernel with CONFIG_IOMMUFD=y,
CONFIG_VFIO_DEVICE_CDEV=y, and CONFIG_VFIO_CONTAINER=y. To simulate
kernels with fewer IOMMU modes available, /dev/iommu and /dev/vfio/vfio
were deleted in the VM:
- All IOMMU modes available: All VFIO selftests pass. irq_test -d passes
using iommufd.
- Only the legacy VFIO container available (/dev/iommu deleted): All
VFIO selftests pass, with the iommufd and iommufd_compat variants
skipped instead of failing. irq_test -d passes using
vfio_type1v2_iommu, and skips if -t iommufd is passed.
- No IOMMU mode available (/dev/iommu and /dev/vfio/vfio deleted):
vfio_pci_device_test, vfio_pci_driver_test, and irq_test -d all skip
with a message explaining why, and with well-formed TAP output.
David Matlack (3):
vfio: selftests: Automatically detect the IOMMU mode in iommu_init()
vfio: selftests: Skip tests when the IOMMU mode is not available
KVM: selftests: Use VFIO selftests library to pick IOMMU mode in IRQ
test
tools/testing/selftests/kvm/irq_test.c | 19 +----
.../vfio/lib/include/libvfio/iommu.h | 30 +++++++-
tools/testing/selftests/vfio/lib/iommu.c | 75 ++++++++++++++++---
.../vfio/vfio_dma_mapping_mmio_test.c | 2 +
.../selftests/vfio/vfio_dma_mapping_test.c | 4 +
.../vfio/vfio_pci_device_init_perf_test.c | 2 +
.../selftests/vfio/vfio_pci_device_test.c | 8 +-
.../selftests/vfio/vfio_pci_driver_test.c | 9 ++-
.../selftests/vfio/vfio_pci_sriov_uapi_test.c | 4 +
9 files changed, 118 insertions(+), 35 deletions(-)
base-commit: 076d7e989cb69f6ded7d60f2a080eb909930061b
--
2.56.0.317.g454f8302e1-goog
next reply other threads:[~2026-10-29 22:17 UTC|newest]
Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-10-29 22:17 David Matlack [this message]
2026-10-29 22:17 ` [PATCH 1/3] vfio: selftests: Automatically detect the IOMMU mode in iommu_init() David Matlack
2026-10-29 22:17 ` [PATCH 2/3] vfio: selftests: Skip tests when the IOMMU mode is not available David Matlack
2026-10-29 22:17 ` [PATCH 3/3] KVM: selftests: Use VFIO selftests library to pick IOMMU mode in IRQ test David Matlack
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20261029221710.1871112-1-dmatlack@google.com \
--to=dmatlack@google.com \
--cc=alex@shazbot.org \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-kselftest@vger.kernel.org \
--cc=pbonzini@redhat.com \
--cc=seanjc@google.com \
--cc=shuah@kernel.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox
all inboxes | Powered by JetHome®