[Intel-xe] [PATCH 1/3] drm/xe/kunit: Move fake pci data to test-priv

Matt Roper matthew.d.roper at intel.com
Sat Nov 18 00:15:07 UTC 2023


On Fri, Nov 17, 2023 at 03:14:09PM -0800, Lucas De Marchi wrote:
> Instead of passing as parameter to xe_pci_fake_device_init(), use
> test->priv to pass parameters down the call stack. The main advantage is
> that then the data is readily available on other functions by using
> kunit_get_current_test().
> 
> This is a preparation to fix the initialization of fake devices when
> they were supposed to be using GMD_ID.
> 
> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
> ---
>  drivers/gpu/drm/xe/tests/xe_pci.c      | 16 +++++++++-------
>  drivers/gpu/drm/xe/tests/xe_pci_test.h | 17 +++++------------
>  drivers/gpu/drm/xe/tests/xe_rtp_test.c |  4 +++-
>  drivers/gpu/drm/xe/tests/xe_wa_test.c  |  7 ++++++-
>  4 files changed, 23 insertions(+), 21 deletions(-)
> 
> diff --git a/drivers/gpu/drm/xe/tests/xe_pci.c b/drivers/gpu/drm/xe/tests/xe_pci.c
> index a40879da2fbe..d1bc029f7a13 100644
> --- a/drivers/gpu/drm/xe/tests/xe_pci.c
> +++ b/drivers/gpu/drm/xe/tests/xe_pci.c
> @@ -7,6 +7,7 @@
>  
>  #include "tests/xe_test.h"
>  
> +#include <kunit/test-bug.h>
>  #include <kunit/test.h>
>  #include <kunit/visibility.h>
>  
> @@ -106,14 +107,15 @@ void xe_call_for_each_media_ip(xe_media_fn xe_fn)
>  }
>  EXPORT_SYMBOL_IF_KUNIT(xe_call_for_each_media_ip);
>  
> -int xe_pci_fake_device_init(struct xe_device *xe, enum xe_platform platform,
> -			    enum xe_subplatform subplatform)
> +int xe_pci_fake_device_init(struct xe_device *xe)
>  {
> +	struct kunit *test = kunit_get_current_test();
> +	struct xe_pci_fake_data *data = test->priv;
>  	const struct pci_device_id *ent = pciidlist;
>  	const struct xe_device_desc *desc;
>  	const struct xe_subplatform_desc *subplatform_desc;
>  
> -	if (platform == XE_TEST_PLATFORM_ANY) {
> +	if (!data) {
>  		desc = (const void *)ent->driver_data;
>  		subplatform_desc = NULL;
>  		goto done;
> @@ -121,14 +123,14 @@ int xe_pci_fake_device_init(struct xe_device *xe, enum xe_platform platform,
>  
>  	for (ent = pciidlist; ent->device; ent++) {
>  		desc = (const void *)ent->driver_data;
> -		if (desc->platform == platform)
> +		if (desc->platform == data->platform)
>  			break;
>  	}
>  
>  	if (!ent->device)
>  		return -ENODEV;
>  
> -	if (subplatform == XE_TEST_SUBPLATFORM_ANY) {
> +	if (data->subplatform == XE_SUBPLATFORM_UNINITIALIZED) {

Is this case possible with any of our current tests?  It doesn't look
like it is.

Anyway,

Reviewed-by: Matt Roper <matthew.d.roper at intel.com>

>  		subplatform_desc = desc->subplatforms;
>  		goto done;
>  	}
> @@ -136,10 +138,10 @@ int xe_pci_fake_device_init(struct xe_device *xe, enum xe_platform platform,
>  	for (subplatform_desc = desc->subplatforms;
>  	     subplatform_desc && subplatform_desc->subplatform;
>  	     subplatform_desc++)
> -		if (subplatform_desc->subplatform == subplatform)
> +		if (subplatform_desc->subplatform == data->subplatform)
>  			break;
>  
> -	if (subplatform != XE_SUBPLATFORM_NONE && !subplatform_desc)
> +	if (data->subplatform != XE_SUBPLATFORM_NONE && !subplatform_desc)
>  		return -ENODEV;
>  
>  done:
> diff --git a/drivers/gpu/drm/xe/tests/xe_pci_test.h b/drivers/gpu/drm/xe/tests/xe_pci_test.h
> index cc0f1d141a4d..b4b3fb2df09c 100644
> --- a/drivers/gpu/drm/xe/tests/xe_pci_test.h
> +++ b/drivers/gpu/drm/xe/tests/xe_pci_test.h
> @@ -12,13 +12,6 @@ struct xe_device;
>  struct xe_graphics_desc;
>  struct xe_media_desc;
>  
> -/*
> - * Some defines just for clarity: these mean the test doesn't care about what
> - * platform it will get since it doesn't depend on any platform-specific bits
> - */
> -#define XE_TEST_PLATFORM_ANY	XE_PLATFORM_UNINITIALIZED
> -#define XE_TEST_SUBPLATFORM_ANY	XE_SUBPLATFORM_UNINITIALIZED
> -
>  typedef int (*xe_device_fn)(struct xe_device *);
>  typedef void (*xe_graphics_fn)(const struct xe_graphics_desc *);
>  typedef void (*xe_media_fn)(const struct xe_media_desc *);
> @@ -27,11 +20,11 @@ int xe_call_for_each_device(xe_device_fn xe_fn);
>  void xe_call_for_each_graphics_ip(xe_graphics_fn xe_fn);
>  void xe_call_for_each_media_ip(xe_media_fn xe_fn);
>  
> -int xe_pci_fake_device_init(struct xe_device *xe, enum xe_platform platform,
> -			    enum xe_subplatform subplatform);
> +struct xe_pci_fake_data {
> +	enum xe_platform platform;
> +	enum xe_subplatform subplatform;
> +};
>  
> -#define xe_pci_fake_device_init_any(xe__)					\
> -	xe_pci_fake_device_init(xe__, XE_TEST_PLATFORM_ANY,			\
> -				XE_TEST_SUBPLATFORM_ANY)
> +int xe_pci_fake_device_init(struct xe_device *xe);
>  
>  #endif
> diff --git a/drivers/gpu/drm/xe/tests/xe_rtp_test.c b/drivers/gpu/drm/xe/tests/xe_rtp_test.c
> index b2beba0019cd..5610051591e7 100644
> --- a/drivers/gpu/drm/xe/tests/xe_rtp_test.c
> +++ b/drivers/gpu/drm/xe/tests/xe_rtp_test.c
> @@ -281,7 +281,9 @@ static int xe_rtp_test_init(struct kunit *test)
>  					       drm, DRIVER_GEM);
>  	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, xe);
>  
> -	ret = xe_pci_fake_device_init_any(xe);
> +	/* Initialize an empty device */
> +	test->priv = NULL;
> +	ret = xe_pci_fake_device_init(xe);
>  	KUNIT_ASSERT_EQ(test, ret, 0);
>  
>  	xe->drm.dev = dev;
> diff --git a/drivers/gpu/drm/xe/tests/xe_wa_test.c b/drivers/gpu/drm/xe/tests/xe_wa_test.c
> index 6e1127b276ea..9185e520af58 100644
> --- a/drivers/gpu/drm/xe/tests/xe_wa_test.c
> +++ b/drivers/gpu/drm/xe/tests/xe_wa_test.c
> @@ -75,6 +75,10 @@ KUNIT_ARRAY_PARAM(platform, cases, platform_desc);
>  static int xe_wa_test_init(struct kunit *test)
>  {
>  	const struct platform_test_case *param = test->param_value;
> +	struct xe_pci_fake_data data = {
> +		.platform = param->platform,
> +		.subplatform = param->subplatform,
> +	};
>  	struct xe_device *xe;
>  	struct device *dev;
>  	int ret;
> @@ -87,7 +91,8 @@ static int xe_wa_test_init(struct kunit *test)
>  					       drm, DRIVER_GEM);
>  	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, xe);
>  
> -	ret = xe_pci_fake_device_init(xe, param->platform, param->subplatform);
> +	test->priv = &data;
> +	ret = xe_pci_fake_device_init(xe);
>  	KUNIT_ASSERT_EQ(test, ret, 0);
>  
>  	xe->info.step = param->step;
> -- 
> 2.40.1
> 

-- 
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation


More information about the Intel-xe mailing list