[PATCH v16 12/26] net/nbl: do not use VFIO group bind API
Burakov, Anatoly
anatoly.burakov at intel.com
Wed Sep 9 13:22:49 CEST 2026
On 9/9/2026 12:02 PM, Anatoly Burakov wrote:
> The NBL driver currently uses group bind API, but it is using it only to
> get group fd and nothing else. In context of NBL driver, this is the only
> usage of VFIO API's in the driver, and it is not necessary to use it for
> what NBL driver is trying to accomplish.
>
> Use a direct `open()` call instead, and store the group fd in common
> structure.
>
> Signed-off-by: Anatoly Burakov <anatoly.burakov at intel.com>
> ---
> drivers/net/nbl/nbl_common/nbl_userdev.c | 24 ++++++++++++++++-------
> drivers/net/nbl/nbl_include/nbl_include.h | 1 +
> 2 files changed, 18 insertions(+), 7 deletions(-)
>
> diff --git a/drivers/net/nbl/nbl_common/nbl_userdev.c b/drivers/net/nbl/nbl_common/nbl_userdev.c
> index f1522772f5..b3b6548bb8 100644
> --- a/drivers/net/nbl/nbl_common/nbl_userdev.c
> +++ b/drivers/net/nbl/nbl_common/nbl_userdev.c
> @@ -387,6 +387,15 @@ nbl_userdev_mem_event_callback(enum rte_mem_event type, const void *addr, size_t
> }
> }
>
> +static int
> +nbl_open_group_fd(int iommu_group_num)
> +{
> + char path[PATH_MAX];
> +
> + snprintf(path, sizeof(path), DEV_VFIO_GROUP_FMT, iommu_group_num);
> + return open(path, O_RDWR);
> +}
> +
> static int nbl_mdev_map_device(struct nbl_adapter *adapter)
> {
> const struct rte_pci_device *pci_dev = adapter->pci_dev;
> @@ -424,11 +433,16 @@ static int nbl_mdev_map_device(struct nbl_adapter *adapter)
> }
>
> NBL_LOG(DEBUG, "nbl vfio container %d", container);
> - vfio_group_fd = dev_vfio_container_group_bind(container, common->iommu_group_num);
> + /*
> + * This assumes one device per group, as kernel will return -EBUSY on
> + * attempting to open the same group fd for a different device.
> + */
> + vfio_group_fd = nbl_open_group_fd(common->iommu_group_num);
> if (vfio_group_fd < 0) {
> NBL_LOG(ERR, "nbl vfio group bind failed, %d", vfio_group_fd);
> goto free_container;
> }
> + common->groupfd = vfio_group_fd;
This is indeed making an assumption that there can be only one device
per group, while original implementation didn't make such an assumption.
I have an implementation that addresses this issue, so a new revision
will be sent. I'll wait for more feedback before respinning.
--
Thanks,
Anatoly
More information about the dev
mailing list