[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20260206134843.4ab04ee2@shazbot.org>
Date: Fri, 6 Feb 2026 13:48:43 -0700
From: Alex Williamson <alex@...zbot.org>
To: Raghavendra Rao Ananta <rananta@...gle.com>
Cc: David Matlack <dmatlack@...gle.com>, Alex Williamson
<alex.williamson@...hat.com>, Vipin Sharma <vipinsh@...gle.com>, Josh Hilke
<jrhilke@...gle.com>, kvm@...r.kernel.org, linux-kernel@...r.kernel.org
Subject: Re: [PATCH v3 3/8] vfio: selftests: Introduce a sysfs lib
On Wed, 4 Feb 2026 01:00:52 +0000
Raghavendra Rao Ananta <rananta@...gle.com> wrote:
> Introduce a sysfs library to handle the common reads/writes to the
> PCI sysfs files, for example, getting the total number of VFs supported
> by the device via /sys/bus/pci/devices/$BDF/sriov_totalvfs. The library
> will be used in the upcoming test patch to configure the VFs for a given
> PF device.
>
> Opportunistically, move vfio_pci_get_group_from_dev() to this library as
> it falls under the same bucket. Rename it to sysfs_iommu_group_get() to
> align with other function names.
>
> Signed-off-by: Raghavendra Rao Ananta <rananta@...gle.com>
> ---
> .../selftests/vfio/lib/include/libvfio.h | 1 +
> .../vfio/lib/include/libvfio/sysfs.h | 12 ++
> tools/testing/selftests/vfio/lib/libvfio.mk | 1 +
> tools/testing/selftests/vfio/lib/sysfs.c | 136 ++++++++++++++++++
> .../selftests/vfio/lib/vfio_pci_device.c | 22 +--
> 5 files changed, 151 insertions(+), 21 deletions(-)
> create mode 100644 tools/testing/selftests/vfio/lib/include/libvfio/sysfs.h
> create mode 100644 tools/testing/selftests/vfio/lib/sysfs.c
>
> diff --git a/tools/testing/selftests/vfio/lib/include/libvfio.h b/tools/testing/selftests/vfio/lib/include/libvfio.h
> index 279ddcd70194..bbe1d7616a64 100644
> --- a/tools/testing/selftests/vfio/lib/include/libvfio.h
> +++ b/tools/testing/selftests/vfio/lib/include/libvfio.h
> @@ -5,6 +5,7 @@
> #include <libvfio/assert.h>
> #include <libvfio/iommu.h>
> #include <libvfio/iova_allocator.h>
> +#include <libvfio/sysfs.h>
> #include <libvfio/vfio_pci_device.h>
> #include <libvfio/vfio_pci_driver.h>
>
> diff --git a/tools/testing/selftests/vfio/lib/include/libvfio/sysfs.h b/tools/testing/selftests/vfio/lib/include/libvfio/sysfs.h
> new file mode 100644
> index 000000000000..c48d5ef00ba6
> --- /dev/null
> +++ b/tools/testing/selftests/vfio/lib/include/libvfio/sysfs.h
> @@ -0,0 +1,12 @@
> +/* SPDX-License-Identifier: GPL-2.0-only */
> +#ifndef SELFTESTS_VFIO_LIB_INCLUDE_LIBVFIO_SYSFS_H
> +#define SELFTESTS_VFIO_LIB_INCLUDE_LIBVFIO_SYSFS_H
> +
> +int sysfs_sriov_totalvfs_get(const char *bdf);
> +int sysfs_sriov_numvfs_get(const char *bdf);
> +void sysfs_sriov_numvfs_set(const char *bdfs, int numvfs);
> +char *sysfs_sriov_vf_bdf_get(const char *pf_bdf, int i);
> +unsigned int sysfs_iommu_group_get(const char *bdf);
> +char *sysfs_driver_get(const char *bdf);
> +
> +#endif /* SELFTESTS_VFIO_LIB_INCLUDE_LIBVFIO_SYSFS_H */
> diff --git a/tools/testing/selftests/vfio/lib/libvfio.mk b/tools/testing/selftests/vfio/lib/libvfio.mk
> index 9f47bceed16f..b7857319c3f1 100644
> --- a/tools/testing/selftests/vfio/lib/libvfio.mk
> +++ b/tools/testing/selftests/vfio/lib/libvfio.mk
> @@ -6,6 +6,7 @@ LIBVFIO_SRCDIR := $(selfdir)/vfio/lib
> LIBVFIO_C := iommu.c
> LIBVFIO_C += iova_allocator.c
> LIBVFIO_C += libvfio.c
> +LIBVFIO_C += sysfs.c
> LIBVFIO_C += vfio_pci_device.c
> LIBVFIO_C += vfio_pci_driver.c
>
> diff --git a/tools/testing/selftests/vfio/lib/sysfs.c b/tools/testing/selftests/vfio/lib/sysfs.c
> new file mode 100644
> index 000000000000..f01598ff15d7
> --- /dev/null
> +++ b/tools/testing/selftests/vfio/lib/sysfs.c
> @@ -0,0 +1,136 @@
> +// SPDX-License-Identifier: GPL-2.0-only
> +#include <fcntl.h>
> +#include <unistd.h>
> +#include <stdlib.h>
> +#include <string.h>
> +#include <linux/limits.h>
> +
> +#include <libvfio.h>
> +
> +static int sysfs_val_get(const char *component, const char *name,
> + const char *file)
> +{
> + char path[PATH_MAX];
> + char buf[32];
> + int fd;
> +
> + snprintf_assert(path, PATH_MAX, "/sys/bus/pci/%s/%s/%s", component, name, file);
> + fd = open(path, O_RDONLY);
> + if (fd < 0)
> + return fd;
> +
> + VFIO_ASSERT_GT(read(fd, buf, ARRAY_SIZE(buf)), 0);
> + VFIO_ASSERT_EQ(close(fd), 0);
> +
> + return strtol(buf, NULL, 0);
I'm surprised we're not sanitizing the strtol() here, ie.
errno = 0;
ret = strtol(buf, NULL, 0);
VFIO_ASSERT_EQ(errno, 0, "sysfs path \"%s\" is not an integer: \"%s\"\n", path, buf);
return ret;
We also need that sign-off on 7/8. Thanks,
Alex
Powered by blists - more mailing lists