From: David Matlack <dmatlack@google.com>
To: Raghavendra Rao Ananta <rananta@google.com>
Cc: Alex Williamson <alex@shazbot.org>,
Alex Williamson <alex.williamson@redhat.com>,
Josh Hilke <jrhilke@google.com>,
kvm@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: Re: [PATCH v2 4/6] vfio: selftests: Export more vfio_pci functions
Date: Wed, 7 Jan 2026 22:55:05 +0000 [thread overview]
Message-ID: <aV7kScUBdrYdKCPE@google.com> (raw)
In-Reply-To: <20251210181417.3677674-5-rananta@google.com>
On 2025-12-10 06:14 PM, Raghavendra Rao Ananta wrote:
shotlog nit: "Expose more vfio_pci_device functions"
> Refactor and make the functions called under device initialization
> public. A later patch adds a test that calls these functions to validate
> the UAPI of SR-IOV devices. Opportunistically, to test the success
> and failure cases of the UAPI, split the functions dealing with
> VFIO_GROUP_GET_DEVICE_FD and VFIO_DEVICE_BIND_IOMMUFD into a core
> function and another one that asserts the ioctl. The former will be
> used for testing the SR-IOV UAPI, hence only export these.
>
> Signed-off-by: Raghavendra Rao Ananta <rananta@google.com>
> ---
> .../lib/include/libvfio/vfio_pci_device.h | 7 +++
> .../selftests/vfio/lib/vfio_pci_device.c | 44 ++++++++++++++-----
> 2 files changed, 39 insertions(+), 12 deletions(-)
>
> diff --git a/tools/testing/selftests/vfio/lib/include/libvfio/vfio_pci_device.h b/tools/testing/selftests/vfio/lib/include/libvfio/vfio_pci_device.h
> index 2858885a89bbb..6186ca463ca6e 100644
> --- a/tools/testing/selftests/vfio/lib/include/libvfio/vfio_pci_device.h
> +++ b/tools/testing/selftests/vfio/lib/include/libvfio/vfio_pci_device.h
> @@ -122,4 +122,11 @@ static inline bool vfio_pci_device_match(struct vfio_pci_device *device,
>
> const char *vfio_pci_get_cdev_path(const char *bdf);
>
> +void vfio_pci_group_setup(struct vfio_pci_device *device, const char *bdf);
> +void __vfio_pci_group_get_device_fd(struct vfio_pci_device *device,
> + const char *bdf, const char *vf_token);
> +void vfio_container_set_iommu(struct vfio_pci_device *device);
> +void vfio_pci_iommufd_cdev_open(struct vfio_pci_device *device, const char *bdf);
> +int __vfio_device_bind_iommufd(int device_fd, int iommufd, const char *vf_token);
> +
> #endif /* SELFTESTS_VFIO_LIB_INCLUDE_LIBVFIO_VFIO_PCI_DEVICE_H */
> diff --git a/tools/testing/selftests/vfio/lib/vfio_pci_device.c b/tools/testing/selftests/vfio/lib/vfio_pci_device.c
> index ac9a5244ddc46..208da2704d9e2 100644
> --- a/tools/testing/selftests/vfio/lib/vfio_pci_device.c
> +++ b/tools/testing/selftests/vfio/lib/vfio_pci_device.c
> @@ -180,7 +180,7 @@ void vfio_pci_device_reset(struct vfio_pci_device *device)
> ioctl_assert(device->fd, VFIO_DEVICE_RESET, NULL);
> }
>
> -static void vfio_pci_group_setup(struct vfio_pci_device *device, const char *bdf)
> +void vfio_pci_group_setup(struct vfio_pci_device *device, const char *bdf)
> {
> struct vfio_group_status group_status = {
> .argsz = sizeof(group_status),
> @@ -200,8 +200,8 @@ static void vfio_pci_group_setup(struct vfio_pci_device *device, const char *bdf
> ioctl_assert(device->group_fd, VFIO_GROUP_SET_CONTAINER, &device->iommu->container_fd);
> }
>
> -static void vfio_pci_group_get_device_fd(struct vfio_pci_device *device,
> - const char *bdf, const char *vf_token)
> +void __vfio_pci_group_get_device_fd(struct vfio_pci_device *device,
> + const char *bdf, const char *vf_token)
> {
> char arg[64] = {0};
>
> @@ -216,18 +216,21 @@ static void vfio_pci_group_get_device_fd(struct vfio_pci_device *device,
> snprintf(arg, ARRAY_SIZE(arg), "%s", bdf);
>
> device->fd = ioctl(device->group_fd, VFIO_GROUP_GET_DEVICE_FD, arg);
> +}
> +
> +static void vfio_pci_group_get_device_fd(struct vfio_pci_device *device,
> + const char *bdf, const char *vf_token)
> +{
> + __vfio_pci_group_get_device_fd(device, bdf, vf_token);
> VFIO_ASSERT_GE(device->fd, 0);
> }
>
> -static void vfio_pci_container_setup(struct vfio_pci_device *device,
> - const char *bdf, const char *vf_token)
> +void vfio_container_set_iommu(struct vfio_pci_device *device)
> {
> struct iommu *iommu = device->iommu;
> unsigned long iommu_type = iommu->mode->iommu_type;
> int ret;
>
> - vfio_pci_group_setup(device, bdf);
> -
> ret = ioctl(iommu->container_fd, VFIO_CHECK_EXTENSION, iommu_type);
> VFIO_ASSERT_GT(ret, 0, "VFIO IOMMU type %lu not supported\n", iommu_type);
>
> @@ -237,7 +240,13 @@ static void vfio_pci_container_setup(struct vfio_pci_device *device,
> * because the IOMMU type is already set.
> */
> (void)ioctl(iommu->container_fd, VFIO_SET_IOMMU, (void *)iommu_type);
> +}
>
> +static void vfio_pci_container_setup(struct vfio_pci_device *device,
> + const char *bdf, const char *vf_token)
> +{
> + vfio_pci_group_setup(device, bdf);
> + vfio_container_set_iommu(device);
> vfio_pci_group_get_device_fd(device, bdf, vf_token);
> }
>
> @@ -299,8 +308,7 @@ const char *vfio_pci_get_cdev_path(const char *bdf)
> return cdev_path;
> }
>
> -static void vfio_device_bind_iommufd(int device_fd, int iommufd,
> - const char *vf_token)
> +int __vfio_device_bind_iommufd(int device_fd, int iommufd, const char *vf_token)
> {
> struct vfio_device_bind_iommufd args = {
> .argsz = sizeof(args),
> @@ -314,7 +322,15 @@ static void vfio_device_bind_iommufd(int device_fd, int iommufd,
> args.token_uuid_ptr = (u64)token_uuid;
> }
>
> - ioctl_assert(device_fd, VFIO_DEVICE_BIND_IOMMUFD, &args);
> + return ioctl(device_fd, VFIO_DEVICE_BIND_IOMMUFD, &args);
> +}
> +
> +static void vfio_device_bind_iommufd(int device_fd, int iommufd,
> + const char *vf_token)
> +{
> + int ret = __vfio_device_bind_iommufd(device_fd, iommufd, vf_token);
> +
> + VFIO_ASSERT_EQ(ret, 0, "Failed VFIO_DEVICE_BIND_IOMMUFD ioctl\n");
> }
>
> static void vfio_device_attach_iommufd_pt(int device_fd, u32 pt_id)
> @@ -327,15 +343,19 @@ static void vfio_device_attach_iommufd_pt(int device_fd, u32 pt_id)
> ioctl_assert(device_fd, VFIO_DEVICE_ATTACH_IOMMUFD_PT, &args);
> }
>
> -static void vfio_pci_iommufd_setup(struct vfio_pci_device *device,
> - const char *bdf, const char *vf_token)
> +void vfio_pci_iommufd_cdev_open(struct vfio_pci_device *device, const char *bdf)
nit: vfio_pci_cdev_open()
Opening the cdev doesn't interact with iommufd in the kernel in any way.
It's a pure VFIO operation. So having iommufd in the name here might be
confusing.
> {
> const char *cdev_path = vfio_pci_get_cdev_path(bdf);
>
> device->fd = open(cdev_path, O_RDWR);
> VFIO_ASSERT_GE(device->fd, 0);
> free((void *)cdev_path);
> +}
>
> +static void vfio_pci_iommufd_setup(struct vfio_pci_device *device,
> + const char *bdf, const char *vf_token)
> +{
> + vfio_pci_iommufd_cdev_open(device, bdf);
> vfio_device_bind_iommufd(device->fd, device->iommu->iommufd, vf_token);
> vfio_device_attach_iommufd_pt(device->fd, device->iommu->ioas_id);
> }
> --
> 2.52.0.239.gd5f0c6e74e-goog
>
next prev parent reply other threads:[~2026-01-07 22:55 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2025-12-10 18:14 [PATCH v2 0/6] vfio: selftest: Add SR-IOV UAPI test Raghavendra Rao Ananta
2025-12-10 18:14 ` [PATCH v2 1/6] vfio: selftests: Introduce snprintf_assert() Raghavendra Rao Ananta
2026-01-07 22:21 ` David Matlack
2025-12-10 18:14 ` [PATCH v2 2/6] vfio: selftests: Introduce a sysfs lib Raghavendra Rao Ananta
2025-12-12 18:27 ` Raghavendra Rao Ananta
2025-12-18 21:52 ` David Matlack
2026-01-07 22:41 ` David Matlack
2026-01-08 21:25 ` Raghavendra Rao Ananta
2025-12-10 18:14 ` [PATCH v2 3/6] vfio: selftests: Extend container/iommufd setup for passing vf_token Raghavendra Rao Ananta
2026-01-07 22:49 ` David Matlack
2026-01-08 21:34 ` Raghavendra Rao Ananta
2025-12-10 18:14 ` [PATCH v2 4/6] vfio: selftests: Export more vfio_pci functions Raghavendra Rao Ananta
2026-01-07 22:55 ` David Matlack [this message]
2026-01-07 23:05 ` David Matlack
2026-01-08 21:47 ` Raghavendra Rao Ananta
2025-12-10 18:14 ` [PATCH v2 5/6] vfio: selftests: Add helper to set/override a vf_token Raghavendra Rao Ananta
2026-01-07 22:56 ` David Matlack
2026-01-08 21:45 ` Raghavendra Rao Ananta
2026-01-14 17:12 ` David Matlack
2025-12-10 18:14 ` [PATCH v2 6/6] vfio: selftests: Add tests to validate SR-IOV UAPI Raghavendra Rao Ananta
2025-12-12 18:21 ` Raghavendra Rao Ananta
2025-12-18 23:26 ` David Matlack
2026-01-06 19:47 ` Raghavendra Rao Ananta
2026-02-05 21:51 ` David Matlack
2026-02-23 18:57 ` David Matlack
2026-01-07 23:22 ` David Matlack
2026-01-09 19:05 ` Raghavendra Rao Ananta
2026-01-14 17:09 ` 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=aV7kScUBdrYdKCPE@google.com \
--to=dmatlack@google.com \
--cc=alex.williamson@redhat.com \
--cc=alex@shazbot.org \
--cc=jrhilke@google.com \
--cc=kvm@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=rananta@google.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.