drm/xe/kunit: Move fake pci data to test-priv
authorLucas De Marchi <lucas.demarchi@intel.com>
Tue, 5 Dec 2023 13:39:52 +0000 (05:39 -0800)
committerRodrigo Vivi <rodrigo.vivi@intel.com>
Thu, 21 Dec 2023 16:45:23 +0000 (11:45 -0500)
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.

Reviewed-by: Matt Roper <matthew.d.roper@intel.com>
Link: https://lore.kernel.org/r/20231129232807.1499826-4-lucas.demarchi@intel.com
Link: https://lore.kernel.org/r/20231205133954.2089546-2-lucas.demarchi@intel.com
Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com>
Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
drivers/gpu/drm/xe/tests/xe_pci.c
drivers/gpu/drm/xe/tests/xe_pci_test.h
drivers/gpu/drm/xe/tests/xe_rtp_test.c
drivers/gpu/drm/xe/tests/xe_wa_test.c

index c1aa785cac185c735477d31e676610bf63786267..b93cb1e9610806fe7062c70ae336cbb0ab5d76fa 100644 (file)
@@ -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,7 +123,7 @@ 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;
        }
 
@@ -131,10 +133,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:
index cc0f1d141a4d75d7de11d97fc4733e917fe4f709..b4b3fb2df09ca5d643a1fbde89cc4c11906eedda 100644 (file)
@@ -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
index a1d204133cc162244b8a6bae0352f0228bb05dfe..4a6972897675693949dda21553840b9bb1c32660 100644 (file)
@@ -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;
index 01ea974591ea98a303a083d379cdbd296c85b346..045afae438912b21498ef146eac25dd7cae051ac 100644 (file)
@@ -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;