[PATCH 2/2] drm/xe/tests: Convert xe_pci tests to parametrized tests
Matt Roper
matthew.d.roper at intel.com
Fri Jun 13 20:03:07 UTC 2025
On Fri, Jun 13, 2025 at 09:19:38PM +0200, Michal Wajdeczko wrote:
> Instead of looping over known IP descriptors within single test
> case, without any diagnostics which IP descriptor is eventually
> broken, define kunit parameter generators with IP descriptors,
> and make existing xe_pci tests fully parametrized:
>
> [ ] =================== xe_pci (2 subtests) ====================
> [ ] ==================== check_graphics_ip ====================
> [ ] [PASSED] 12.70 Xe_LPG
> [ ] [PASSED] 12.71 Xe_LPG
> [ ] [PASSED] 12.74 Xe_LPG+
> [ ] [PASSED] 20.01 Xe2_HPG
> [ ] [PASSED] 20.04 Xe2_LPG
> [ ] [PASSED] 30.00 Xe3_LPG
> [ ] [PASSED] 30.01 Xe3_LPG
> [ ] ================ [PASSED] check_graphics_ip ================
> [ ] ===================== check_media_ip ======================
> [ ] [PASSED] 13.00 Xe_LPM+
> [ ] [PASSED] 13.01 Xe2_HPM
> [ ] [PASSED] 20.00 Xe2_LPM
> [ ] [PASSED] 30.00 Xe3_LPM
> [ ] ================= [PASSED] check_media_ip ==================
> [ ] ===================== [PASSED] xe_pci ======================
>
> Signed-off-by: Michal Wajdeczko <michal.wajdeczko at intel.com>
> Cc: Lucas De Marchi <lucas.demarchi at intel.com>
> Cc: Matt Roper <matthew.d.roper at intel.com>
Reviewed-by: Matt Roper <matthew.d.roper at intel.com>
> ---
> drivers/gpu/drm/xe/tests/xe_pci.c | 63 +++++++++++++-------------
> drivers/gpu/drm/xe/tests/xe_pci_test.c | 24 ++++------
> drivers/gpu/drm/xe/tests/xe_pci_test.h | 12 +----
> 3 files changed, 41 insertions(+), 58 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/tests/xe_pci.c b/drivers/gpu/drm/xe/tests/xe_pci.c
> index 1d3e2e50c355..baccb657bd05 100644
> --- a/drivers/gpu/drm/xe/tests/xe_pci.c
> +++ b/drivers/gpu/drm/xe/tests/xe_pci.c
> @@ -12,49 +12,48 @@
> #include <kunit/test-bug.h>
> #include <kunit/visibility.h>
>
> +static void xe_ip_kunit_desc(const struct xe_ip *param, char *desc)
> +{
> + snprintf(desc, KUNIT_PARAM_DESC_SIZE, "%u.%02u %s",
> + param->verx100 / 100, param->verx100 % 100, param->name);
> +}
> +
> +KUNIT_ARRAY_PARAM(graphics_ip, graphics_ips, xe_ip_kunit_desc);
> +KUNIT_ARRAY_PARAM(media_ip, media_ips, xe_ip_kunit_desc);
> +
> /**
> - * xe_call_for_each_graphics_ip - Iterate over all recognized graphics IPs
> - * @xe_fn: Function to call for each device.
> + * xe_pci_graphics_ip_gen_param - Generate graphics struct xe_ip parameters
> + * @prev: the pointer to the previous parameter to iterate from or NULL
> + * @desc: output buffer with minimum size of KUNIT_PARAM_DESC_SIZE
> + *
> + * This function prepares struct xe_ip parameter.
> + *
> + * To be used only as a parameter generator function in &KUNIT_CASE_PARAM.
> *
> - * This function iterates over the descriptors for all graphics IPs recognized
> - * by the driver and calls @xe_fn: for each one of them.
> + * Return: pointer to the next parameter or NULL if no more parameters
> */
> -void xe_call_for_each_graphics_ip(xe_graphics_fn xe_fn)
> +const void *xe_pci_graphics_ip_gen_param(const void *prev, char *desc)
> {
> - const struct xe_graphics_desc *desc, *last = NULL;
> -
> - for (int i = 0; i < ARRAY_SIZE(graphics_ips); i++) {
> - desc = graphics_ips[i].desc;
> - if (desc == last)
> - continue;
> -
> - xe_fn(desc);
> - last = desc;
> - }
> + return graphics_ip_gen_params(prev, desc);
> }
> -EXPORT_SYMBOL_IF_KUNIT(xe_call_for_each_graphics_ip);
> +EXPORT_SYMBOL_IF_KUNIT(xe_pci_graphics_ip_gen_param);
>
> /**
> - * xe_call_for_each_media_ip - Iterate over all recognized media IPs
> - * @xe_fn: Function to call for each device.
> + * xe_pci_media_ip_gen_param - Generate media struct xe_ip parameters
> + * @prev: the pointer to the previous parameter to iterate from or NULL
> + * @desc: output buffer with minimum size of KUNIT_PARAM_DESC_SIZE
> + *
> + * This function prepares struct xe_ip parameter.
> *
> - * This function iterates over the descriptors for all media IPs recognized
> - * by the driver and calls @xe_fn: for each one of them.
> + * To be used only as a parameter generator function in &KUNIT_CASE_PARAM.
> + *
> + * Return: pointer to the next parameter or NULL if no more parameters
> */
> -void xe_call_for_each_media_ip(xe_media_fn xe_fn)
> +const void *xe_pci_media_ip_gen_param(const void *prev, char *desc)
> {
> - const struct xe_media_desc *desc, *last = NULL;
> -
> - for (int i = 0; i < ARRAY_SIZE(media_ips); i++) {
> - desc = media_ips[i].desc;
> - if (desc == last)
> - continue;
> -
> - xe_fn(desc);
> - last = desc;
> - }
> + return media_ip_gen_params(prev, desc);
> }
> -EXPORT_SYMBOL_IF_KUNIT(xe_call_for_each_media_ip);
> +EXPORT_SYMBOL_IF_KUNIT(xe_pci_media_ip_gen_param);
>
> static void fake_read_gmdid(struct xe_device *xe, enum xe_gmdid_type type,
> u32 *ver, u32 *revid)
> diff --git a/drivers/gpu/drm/xe/tests/xe_pci_test.c b/drivers/gpu/drm/xe/tests/xe_pci_test.c
> index 744a37583d2d..95fed41f7ff2 100644
> --- a/drivers/gpu/drm/xe/tests/xe_pci_test.c
> +++ b/drivers/gpu/drm/xe/tests/xe_pci_test.c
> @@ -14,9 +14,10 @@
> #include "xe_pci_test.h"
> #include "xe_pci_types.h"
>
> -static void check_graphics_ip(const struct xe_graphics_desc *graphics)
> +static void check_graphics_ip(struct kunit *test)
> {
> - struct kunit *test = kunit_get_current_test();
> + const struct xe_ip *param = test->param_value;
> + const struct xe_graphics_desc *graphics = param->desc;
> u64 mask = graphics->hw_engine_mask;
>
> /* RCS, CCS, and BCS engines are allowed on the graphics IP */
> @@ -28,9 +29,10 @@ static void check_graphics_ip(const struct xe_graphics_desc *graphics)
> KUNIT_ASSERT_EQ(test, mask, 0);
> }
>
> -static void check_media_ip(const struct xe_media_desc *media)
> +static void check_media_ip(struct kunit *test)
> {
> - struct kunit *test = kunit_get_current_test();
> + const struct xe_ip *param = test->param_value;
> + const struct xe_media_desc *media = param->desc;
> u64 mask = media->hw_engine_mask;
>
> /* VCS, VECS and GSCCS engines are allowed on the media IP */
> @@ -42,19 +44,9 @@ static void check_media_ip(const struct xe_media_desc *media)
> KUNIT_ASSERT_EQ(test, mask, 0);
> }
>
> -static void xe_gmdid_graphics_ip(struct kunit *test)
> -{
> - xe_call_for_each_graphics_ip(check_graphics_ip);
> -}
> -
> -static void xe_gmdid_media_ip(struct kunit *test)
> -{
> - xe_call_for_each_media_ip(check_media_ip);
> -}
> -
> static struct kunit_case xe_pci_tests[] = {
> - KUNIT_CASE(xe_gmdid_graphics_ip),
> - KUNIT_CASE(xe_gmdid_media_ip),
> + KUNIT_CASE_PARAM(check_graphics_ip, xe_pci_graphics_ip_gen_param),
> + KUNIT_CASE_PARAM(check_media_ip, xe_pci_media_ip_gen_param),
> {}
> };
>
> diff --git a/drivers/gpu/drm/xe/tests/xe_pci_test.h b/drivers/gpu/drm/xe/tests/xe_pci_test.h
> index 65ac0295d435..7e4cf6dad664 100644
> --- a/drivers/gpu/drm/xe/tests/xe_pci_test.h
> +++ b/drivers/gpu/drm/xe/tests/xe_pci_test.h
> @@ -11,16 +11,6 @@
> #include "xe_platform_types.h"
> #include "xe_sriov_types.h"
>
> -struct xe_device;
> -struct xe_graphics_desc;
> -struct xe_media_desc;
> -
> -typedef void (*xe_graphics_fn)(const struct xe_graphics_desc *);
> -typedef void (*xe_media_fn)(const struct xe_media_desc *);
> -
> -void xe_call_for_each_graphics_ip(xe_graphics_fn xe_fn);
> -void xe_call_for_each_media_ip(xe_media_fn xe_fn);
> -
> struct xe_pci_fake_data {
> enum xe_sriov_mode sriov_mode;
> enum xe_platform platform;
> @@ -33,6 +23,8 @@ struct xe_pci_fake_data {
>
> int xe_pci_fake_device_init(struct xe_device *xe);
>
> +const void *xe_pci_graphics_ip_gen_param(const void *prev, char *desc);
> +const void *xe_pci_media_ip_gen_param(const void *prev, char *desc);
> const void *xe_pci_live_device_gen_param(const void *prev, char *desc);
>
> #endif
> --
> 2.47.1
>
--
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation
More information about the Intel-xe
mailing list