[PATCH i-g-t v8 1/8] lib/igt_device_scan: Introduce filtering out non-PCI devices
Zbigniew Kempczyński
zbigniew.kempczynski at intel.com
Fri Feb 9 08:54:59 UTC 2024
On Thu, Feb 08, 2024 at 02:52:25PM +0100, Kamil Konieczny wrote:
> From: Dominik Karol Piątkowski <dominik.karol.piatkowski at intel.com>
>
> Introduced igt_device_filter_pci function that filters out non-PCI
> devices from IGT devices. This will help with checking multi-GPU
> tests after they skip due to detected only one GPU, in that case
> one can verify it after printing what GPUs are really on PCI bus.
> Such errors can happen when using wrong env IGT_DEVICE filter.
>
> v6: extending description
>
> Cc: Chris Wilson <chris.p.wilson at linux.intel.com>
> Cc: Janusz Krzysztofik <janusz.krzysztofik at linux.intel.com>
> Signed-off-by: Dominik Karol Piątkowski <dominik.karol.piatkowski at intel.com>
> Signed-off-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>
> ---
> lib/igt_device_scan.c | 21 +++++++++++++++++++++
> lib/igt_device_scan.h | 2 ++
> 2 files changed, 23 insertions(+)
>
> diff --git a/lib/igt_device_scan.c b/lib/igt_device_scan.c
> index fbf3fa482..37ebe1964 100644
> --- a/lib/igt_device_scan.c
> +++ b/lib/igt_device_scan.c
> @@ -1908,6 +1908,27 @@ const char *igt_device_filter_get(int num)
> return NULL;
> }
>
> +/**
> + * igt_device_filter_pci
> + *
> + * Filter devices to PCI only.
> + *
> + * Returns PCI devices count.
> + */
> +int igt_device_filter_pci(void)
> +{
> + int count = 0;
> + struct igt_device *dev, *tmp;
> +
> + igt_list_for_each_entry_safe(dev, tmp, &igt_devs.filtered, link)
> + if (strcmp(dev->subsystem, "pci") != 0)
> + igt_list_del(&dev->link);
Device scan starts with lists 'all' and 'filtered' filled with
all cards. If you want to eliminate non-pci cards here you should
also free memory for dev. See igt_device_filter_apply() where
there's comment 'Clean the filtered list'.
> + else
> + count++;
> +
> + return count;
> +}
> +
I also wondered to fix filter_pci() and fill filtered list
with all pci devices when filter 'pci:' (without vendor/device/card)
is passed. Currently filter picks single matching device instead
of filling filtered list with all matching devices.
Anyway, at the moment I see no blocker for your code. Just
fix this minor free() nit and:
Reviewed-by: Zbigniew Kempczyński <zbigniew.kempczynski at intel.com>
--
Zbigniew
> static bool igt_device_filter_apply(const char *fstr)
> {
> struct igt_device *dev, *tmp;
> diff --git a/lib/igt_device_scan.h b/lib/igt_device_scan.h
> index 48690e236..908733745 100644
> --- a/lib/igt_device_scan.h
> +++ b/lib/igt_device_scan.h
> @@ -81,6 +81,8 @@ int igt_device_filter_add(const char *filter);
> void igt_device_filter_free_all(void);
> const char *igt_device_filter_get(int num);
>
> +int igt_device_filter_pci(void);
> +
> /* Use filter to match the device and fill card structure */
> bool igt_device_card_match(const char *filter, struct igt_device_card *card);
> bool igt_device_card_match_pci(const char *filter,
> --
> 2.42.0
>
More information about the igt-dev
mailing list