[PATCH i-g-t v7 6/7] lib/igt_sriov_device: add helpers for VF DRM driver bind and unbind

Kamil Konieczny kamil.konieczny at linux.intel.com
Wed Dec 13 15:00:18 UTC 2023


Hi Lukasz,
On 2023-12-05 at 09:16:17 +0100, Lukasz Laguna wrote:
> Helpers allow to bind and unbind a DRM driver for specified VF of a
> given PF device.
> 
> Cc: Marcin Bernatowicz <marcin.bernatowicz at linux.intel.com>
> Cc: Michal Wajdeczko <michal.wajdeczko at intel.com>
> Signed-off-by: Lukasz Laguna <lukasz.laguna at intel.com>
> ---
>  lib/igt_sriov_device.c | 52 ++++++++++++++++++++++++++++++++++++++++++
>  lib/igt_sriov_device.h |  2 ++
>  2 files changed, 54 insertions(+)
> 
> diff --git a/lib/igt_sriov_device.c b/lib/igt_sriov_device.c
> index c643f47d1..354125974 100644
> --- a/lib/igt_sriov_device.c
> +++ b/lib/igt_sriov_device.c
> @@ -5,9 +5,11 @@
>  
>  #include <dirent.h>
>  #include <errno.h>
> +#include <pciaccess.h>
>  
>  #include "drmtest.h"
>  #include "igt_core.h"
> +#include "igt_device.h"
>  #include "igt_sriov_device.h"
>  #include "igt_sysfs.h"
>  
> @@ -287,3 +289,53 @@ bool igt_sriov_is_vf_drm_driver_probed(int pf, unsigned int vf_num)
>  
>  	return ret;
>  }
> +
> +static bool __igt_sriov_bind_vf_drm_driver(int pf, unsigned int vf_num, bool bind)
Why bool here? imho better name would be:

static bool __igt_sriov_set_vf_pci_slot(int pf, unsigned int vf_num, const char *bind)

> +{
> +	int sysfs, ret;
> +	struct pci_device *pci_dev;
> +	char pci_slot[14];
> +
> +	igt_assert(vf_num > 0);
> +
> +	pci_dev = __igt_device_get_pci_device(pf, vf_num);
> +	igt_assert_f(pci_dev, "No PCI device for given VF number: %d\n", vf_num);
> +	sprintf(pci_slot, "%04x:%02x:%02x.%x",
> +		pci_dev->domain_16, pci_dev->bus, pci_dev->dev, pci_dev->func);
> +
> +	sysfs = igt_sysfs_open(pf);
> +	igt_assert_fd(sysfs);
> +
> +	igt_debug("vf_num: %u, pci_slot: %s\n", vf_num, pci_slot);
> +	ret = igt_sysfs_set(sysfs, bind ? "device/driver/bind" : "device/driver/unbind", pci_slot);

So here would be:
	ret = igt_sysfs_set(sysfs, bind, pci_slot);

You could also add bind param into prints.

> +
> +	close(sysfs);
> +
> +	return ret;
> +}
> +
> +/**
> + * igt_sriov_bind_vf_drm_driver - Bind DRM driver to VF
> + * @pf: PF device file descriptor
> + * @vf_num: VF number (1-based to identify single VF)
> + *
> + * Bind the DRM driver to given VF.
> + * It asserts on failure.
> + */
> +void igt_sriov_bind_vf_drm_driver(int pf, unsigned int vf_num)
> +{
> +	igt_assert(__igt_sriov_bind_vf_drm_driver(pf, vf_num, true));

imho assert on
	__igt_sriov_set_vf_pci_slot(pf, vf_num, "device/driver/bind");

> +}
> +
> +/**
> + * igt_sriov_unbind_vf_drm_driver - Unbind DRM driver from VF
> + * @pf: PF device file descriptor
> + * @vf_num: VF number (1-based to identify single VF)
> + *
> + * Unbind the DRM driver from given VF.
> + * It asserts on failure.
> + */
> +void igt_sriov_unbind_vf_drm_driver(int pf, unsigned int vf_num)
> +{
> +	igt_assert(__igt_sriov_bind_vf_drm_driver(pf, vf_num, false));

imho assert on
	__igt_sriov_set_vf_pci_slot(pf, vf_num, "device/driver/unbind");

Regards,
Kamil

> +}
> diff --git a/lib/igt_sriov_device.h b/lib/igt_sriov_device.h
> index c442c41a7..a3a08f8e1 100644
> --- a/lib/igt_sriov_device.h
> +++ b/lib/igt_sriov_device.h
> @@ -25,6 +25,8 @@ void igt_sriov_enable_driver_autoprobe(int pf);
>  void igt_sriov_disable_driver_autoprobe(int pf);
>  int igt_sriov_open_vf_drm_device(int pf, unsigned int vf_num);
>  bool igt_sriov_is_vf_drm_driver_probed(int pf, unsigned int vf_num);
> +void igt_sriov_bind_vf_drm_driver(int pf, unsigned int vf_num);
> +void igt_sriov_unbind_vf_drm_driver(int pf, unsigned int vf_num);
>  
>  /**
>   * for_each_sriov_vf - Helper for running code on each VF
> -- 
> 2.40.0
> 


More information about the igt-dev mailing list