[igt-dev] [PATCH i-g-t v2 1/3] lib/igt_device_scan: add multigpu filtering view

Piatkowski, Dominik Karol dominik.karol.piatkowski at intel.com
Thu Nov 9 07:44:28 UTC 2023


Acked-by: Dominik Karol Piątkowski <dominik.karol.piatkowski at intel.com>

> -----Original Message-----
> From: igt-dev <igt-dev-bounces at lists.freedesktop.org> On Behalf Of Kamil
> Konieczny
> Sent: Friday, November 3, 2023 5:02 PM
> To: igt-dev at lists.freedesktop.org
> Subject: [igt-dev] [PATCH i-g-t v2 1/3] lib/igt_device_scan: add multigpu
> filtering view
> 
> Created multiGPU filtering for GPU cards. When used with --device or
> IGT_DEVICE, this will just count cards found with given filtering options,
> otherwise will count them with the help of vendor filtering.
>     Filtering is not restricted and will allow to re-open already opened card, if
> user gives something like:
> 
> IGT_DEVICE=pci:vendor=intel,device=discrete,card=0\;pci:vendor=intel,device
> =discrete,card=0
> or
> IGT_DEVICE=pci:vendor=intel,card=0\;pci:vendor=intel,card=0
> 
> For discrete cards one can use:
> IGT_DEVICE=pci:vendor=intel,device=discrete,card=all
> 
> v2: move filtering into igt_device_scan.c (Zbigniew)
>   filter all GPUs, not only discrete (Zbigniew)
>   simplify checks for unsupported drivers like vgem (Kamil)
> 
> Signed-off-by: Kamil Konieczny <kamil.konieczny at linux.intel.com>
> ---
>  lib/igt_device_scan.c | 62
> +++++++++++++++++++++++++++++++++++++++++++
>  lib/igt_device_scan.h |  3 +++
>  2 files changed, 65 insertions(+)
> 
> diff --git a/lib/igt_device_scan.c b/lib/igt_device_scan.c index
> f4f95fef3..fbf3fa482 100644
> --- a/lib/igt_device_scan.c
> +++ b/lib/igt_device_scan.c
> @@ -2065,3 +2065,65 @@ int igt_open_render(struct igt_device_card *card)
> 
>  	return open(card->render, O_RDWR);
>  }
> +
> +/**
> + * igt_device_prepare_filtered_view:
> + * @vendor: name for GPUs vendor to search, eg. "intel"
> + *
> + * Filter GPU devices for given vendor or with supplied --device
> + * option or IGT_DEVICE environment variable.
> + *
> + * Returns:
> + * Number of filtered GPUs for a vendor or number of filters.
> + */
> +int igt_device_prepare_filtered_view(const char *vendor) {
> +	int gpu_count;
> +
> +	gpu_count = igt_device_filter_count();
> +	if (!gpu_count) {
> +		char gpu_filter[256];
> +
> +		igt_assert(vendor);
> +		if (!strcmp(vendor, "vgem") || !strcmp(vendor, "other")) {
> +			igt_debug("Unsupported vendor: %s\n", vendor);
> +			return 0;
> +		}
> +
> +		if (!strcmp(vendor, "any")) {
> +			igt_debug("Chipset DRIVER_ANY unsupported
> without --device filters\n");
> +			return 0;
> +		}
> +
> +		igt_assert(snprintf(gpu_filter, sizeof(gpu_filter),
> "pci:vendor=%s,card=all",
> +				    vendor) < sizeof(gpu_filter));
> +
> +		igt_device_filter_add(gpu_filter); // fill-in filters for all GPUs
> +		gpu_count = igt_device_filter_count();
> +		igt_debug("Found %d GPUs for vendor: %s\n", gpu_count,
> vendor);
> +	} else {
> +		struct igt_device_card card;
> +		bool found;
> +		int count = 0;
> +
> +		for (int i = 0; i < gpu_count; i++) {
> +			const char *filter;
> +
> +			filter = igt_device_filter_get(i);
> +			found = igt_device_card_match(filter, &card);
> +			if (found && strlen(card.card)) {
> +				igt_debug("Found GPU%d card %s\n", i,
> card.card);
> +				++count;
> +			}
> +		}
> +
> +		if (count < gpu_count) {
> +			igt_debug("Counted GPUs %d lower than number of
> filters %d\n", count, gpu_count);
> +			gpu_count = count;
> +		} else {
> +			igt_debug("Found %d GPUs\n", gpu_count);
> +		}
> +	}
> +
> +	return gpu_count;
> +}
> diff --git a/lib/igt_device_scan.h b/lib/igt_device_scan.h index
> b8f6a843d..48690e236 100644
> --- a/lib/igt_device_scan.h
> +++ b/lib/igt_device_scan.h
> @@ -93,4 +93,7 @@ char *igt_device_get_pretty_name(struct
> igt_device_card *card, bool numeric);  int igt_open_card(struct
> igt_device_card *card);  int igt_open_render(struct igt_device_card *card);
> 
> +/* Add or use filters to match multiGPU devices */ int
> +igt_device_prepare_filtered_view(const char *vendor);
> +
>  #endif /* __IGT_DEVICE_SCAN_H__ */
> --
> 2.42.0



More information about the igt-dev mailing list