[PATCH v2 2/7] drm/xe/tests: Add helpers for use in live tests

Lucas De Marchi lucas.demarchi at intel.com
Fri Jul 19 16:37:34 UTC 2024


On Wed, Jul 17, 2024 at 09:51:50PM GMT, Michal Wajdeczko wrote:
>Instead of iterating over available Xe devices within a testcase,
>without being able to distinguish potential failures from different
>devices on system with many Xe devices, introduce helpers that will
>allow to treat each Xe device as a parameter for the testcase like:
>
>static void bar(struct kunit *test)
>{
>	struct xe_device *xe = test->priv;
>	...
>}
>
>struct kunit_case foo_live_tests[] = {
>	KUNIT_CASE_PARAM(bar, xe_pci_live_device_gen_param),
>	{}
>};
>
>struct kunit_suite foo_suite = {
>	.name = "foo_live",
>	.test_cases = foo_live_tests,
>	.init = xe_kunit_helper_xe_device_live_test_init,
>};
>
>Signed-off-by: Michal Wajdeczko <michal.wajdeczko at intel.com>
>---
>v2: can't rely on test->priv in .exit helper (CI)
>    for cleanup use kunit_add_action_or_reset() instead
>---
> drivers/gpu/drm/xe/tests/xe_kunit_helpers.c | 39 +++++++++++++++++++++
> drivers/gpu/drm/xe/tests/xe_kunit_helpers.h |  2 ++
> drivers/gpu/drm/xe/tests/xe_pci.c           | 30 ++++++++++++++++
> drivers/gpu/drm/xe/tests/xe_pci_test.h      |  2 ++
> 4 files changed, 73 insertions(+)
>
>diff --git a/drivers/gpu/drm/xe/tests/xe_kunit_helpers.c b/drivers/gpu/drm/xe/tests/xe_kunit_helpers.c
>index fefe79b3b75a..bc5156966ce9 100644
>--- a/drivers/gpu/drm/xe/tests/xe_kunit_helpers.c
>+++ b/drivers/gpu/drm/xe/tests/xe_kunit_helpers.c
>@@ -12,7 +12,9 @@
>
> #include "tests/xe_kunit_helpers.h"
> #include "tests/xe_pci_test.h"
>+#include "xe_device.h"
> #include "xe_device_types.h"
>+#include "xe_pm.h"
>
> /**
>  * xe_kunit_helper_alloc_xe_device - Allocate a &xe_device for a KUnit test.
>@@ -88,3 +90,40 @@ int xe_kunit_helper_xe_device_test_init(struct kunit *test)
> 	return 0;
> }
> EXPORT_SYMBOL_IF_KUNIT(xe_kunit_helper_xe_device_test_init);
>+
>+KUNIT_DEFINE_ACTION_WRAPPER(put_xe_pm_runtime, xe_pm_runtime_put, struct xe_device *);
>+
>+/**
>+ * xe_kunit_helper_xe_device_live_test_init - Prepare a &xe_device for
>+ *                                            use in a live KUnit test.
>+ * @test: the &kunit where live &xe_device will be used
>+ *
>+ * This function expects pointer to the &xe_device in the &test.param_value,
>+ * like it is prepared by the &xe_pci_live_device_gen_param and stores that
>+ * pointer as &kunit.priv to allow the test code to access it.
>+ *
>+ * This function makes sure that device is not wedged and then resumes it
>+ * to avoid waking up the device inside the test. It uses deferred cleanup
>+ * action to release a runtime_pm reference.
>+ *
>+ * This function can be used as custom implementation of &kunit_suite.init.
>+ *
>+ * This function uses KUNIT_ASSERT to detect any failures.
>+ *
>+ * Return: Always 0.
>+ */
>+int xe_kunit_helper_xe_device_live_test_init(struct kunit *test)
>+{
>+	struct xe_device *xe = xe_device_const_cast(test->param_value);
>+
>+	KUNIT_ASSERT_NOT_ERR_OR_NULL(test, xe);
>+	kunit_info(test, "running on %s device\n", xe->info.platform_name);
>+
>+	KUNIT_ASSERT_FALSE(test, xe_device_wedged(xe));
>+	xe_pm_runtime_get(xe);
>+	KUNIT_ASSERT_EQ(test, 0, kunit_add_action_or_reset(test, put_xe_pm_runtime, xe));
>+
>+	test->priv = xe;
>+	return 0;
>+}
>+EXPORT_SYMBOL_IF_KUNIT(xe_kunit_helper_xe_device_live_test_init);
>diff --git a/drivers/gpu/drm/xe/tests/xe_kunit_helpers.h b/drivers/gpu/drm/xe/tests/xe_kunit_helpers.h
>index 067a1babf049..83665f7b1254 100644
>--- a/drivers/gpu/drm/xe/tests/xe_kunit_helpers.h
>+++ b/drivers/gpu/drm/xe/tests/xe_kunit_helpers.h
>@@ -14,4 +14,6 @@ struct xe_device *xe_kunit_helper_alloc_xe_device(struct kunit *test,
> 						  struct device *dev);
> int xe_kunit_helper_xe_device_test_init(struct kunit *test);
>
>+int xe_kunit_helper_xe_device_live_test_init(struct kunit *test);
>+
> #endif
>diff --git a/drivers/gpu/drm/xe/tests/xe_pci.c b/drivers/gpu/drm/xe/tests/xe_pci.c
>index f62809ca8b51..ab570dbb71ac 100644
>--- a/drivers/gpu/drm/xe/tests/xe_pci.c
>+++ b/drivers/gpu/drm/xe/tests/xe_pci.c
>@@ -167,3 +167,33 @@ int xe_pci_fake_device_init(struct xe_device *xe)
> 	return 0;
> }
> EXPORT_SYMBOL_IF_KUNIT(xe_pci_fake_device_init);
>+
>+/**
>+ * xe_pci_live_device_gen_param - Helper to iterate Xe devices as a KUnit parameters

s/a KUnit parameters/KUnit parameters/ , or remove plural.

Can we filter by device or is this something coming in future?

Reviewed-by: Lucas De Marchi <lucas.demarchi at intel.com>

Lucas De Marchi


More information about the Intel-xe mailing list