[PATCH v2 2/7] drm/xe/tests: Add helpers for use in live tests
Cavitt, Jonathan
jonathan.cavitt at intel.com
Wed Jul 17 20:14:34 UTC 2024
-----Original Message-----
From: Intel-xe <intel-xe-bounces at lists.freedesktop.org> On Behalf Of Michal Wajdeczko
Sent: Wednesday, July 17, 2024 12:52 PM
To: intel-xe at lists.freedesktop.org
Cc: Wajdeczko, Michal <Michal.Wajdeczko at intel.com>
Subject: [PATCH v2 2/7] drm/xe/tests: Add helpers for use in live tests
>
> 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));
These additional checks between tests might result in some new
error reports getting generated in the case of test case overrun,
though I think it would be better to have the early detection than
to discover "new" errors, so I'd say this is a positive change.
Reviewed-by: Jonathan Cavitt <jonathan.cavitt at intel.com>
-Jonathan Cavitt
> +
> + 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
> + * @prev: the previously returned value, or NULL for the first iteration
> + * @desc: the buffer for a parameter name
> + *
> + * Iterates over the available Xe devices on the system. Uses the device name
> + * as the parameter name.
> + *
> + * To be used only as a parameter generator function in &KUNIT_CASE_PARAM.
> + *
> + * Return: pointer to the next &struct xe_device ready to be used as a parameter
> + * or NULL if there are no more Xe devices on the system.
> + */
> +const void *xe_pci_live_device_gen_param(const void *prev, char *desc)
> +{
> + const struct xe_device *xe = prev;
> + struct device *dev = xe ? xe->drm.dev : NULL;
> + struct device *next;
> +
> + next = driver_find_next_device(&xe_pci_driver.driver, dev);
> + if (dev)
> + put_device(dev);
> + if (!next)
> + return NULL;
> +
> + snprintf(desc, KUNIT_PARAM_DESC_SIZE, "%s", dev_name(next));
> + return pdev_to_xe_device(to_pci_dev(next));
> +}
> +EXPORT_SYMBOL_IF_KUNIT(xe_pci_live_device_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 f40dcec83992..3e2558bc3c90 100644
> --- a/drivers/gpu/drm/xe/tests/xe_pci_test.h
> +++ b/drivers/gpu/drm/xe/tests/xe_pci_test.h
> @@ -35,4 +35,6 @@ struct xe_pci_fake_data {
>
> int xe_pci_fake_device_init(struct xe_device *xe);
>
> +const void *xe_pci_live_device_gen_param(const void *prev, char *desc);
> +
> #endif
> --
> 2.43.0
>
>
More information about the Intel-xe
mailing list