Skip to content

Commit b9a214b

Browse files
Marie Zhussupovashuahkh
authored andcommitted
kunit: Pass parameterized test context to generate_params()
To enable more complex parameterized testing scenarios, the generate_params() function needs additional context beyond just the previously generated parameter. This patch modifies the generate_params() function signature to include an extra `struct kunit *test` argument, giving test users access to the parameterized test context when generating parameters. The `struct kunit *test` argument was added as the first parameter to the function signature as it aligns with the convention of other KUnit functions that accept `struct kunit *test` first. This also mirrors the "this" or "self" reference found in object-oriented programming languages. This patch also modifies xe_pci_live_device_gen_param() in xe_pci.c and nthreads_gen_params() in kcsan_test.c to reflect this signature change. Link: https://lore.kernel.org/r/20250826091341.1427123-4-davidgow@google.com Reviewed-by: David Gow <davidgow@google.com> Reviewed-by: Rae Moar <rmoar@google.com> Acked-by: Marco Elver <elver@google.com> Acked-by: Rodrigo Vivi <rodrigo.vivi@intel.com> Signed-off-by: Marie Zhussupova <marievic@google.com> [Catch some additional gen_params signatures in drm/xe/tests --David] Signed-off-by: David Gow <davidgow@google.com> Signed-off-by: Shuah Khan <skhan@linuxfoundation.org>
1 parent 2414235 commit b9a214b

File tree

5 files changed

+22
-17
lines changed

5 files changed

+22
-17
lines changed

drivers/gpu/drm/xe/tests/xe_pci.c

Lines changed: 7 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -44,9 +44,9 @@ KUNIT_ARRAY_PARAM(pci_id, pciidlist, xe_pci_id_kunit_desc);
4444
*
4545
* Return: pointer to the next parameter or NULL if no more parameters
4646
*/
47-
const void *xe_pci_graphics_ip_gen_param(const void *prev, char *desc)
47+
const void *xe_pci_graphics_ip_gen_param(struct kunit *test, const void *prev, char *desc)
4848
{
49-
return graphics_ip_gen_params(prev, desc);
49+
return graphics_ip_gen_params(test, prev, desc);
5050
}
5151
EXPORT_SYMBOL_IF_KUNIT(xe_pci_graphics_ip_gen_param);
5252

@@ -61,9 +61,9 @@ EXPORT_SYMBOL_IF_KUNIT(xe_pci_graphics_ip_gen_param);
6161
*
6262
* Return: pointer to the next parameter or NULL if no more parameters
6363
*/
64-
const void *xe_pci_media_ip_gen_param(const void *prev, char *desc)
64+
const void *xe_pci_media_ip_gen_param(struct kunit *test, const void *prev, char *desc)
6565
{
66-
return media_ip_gen_params(prev, desc);
66+
return media_ip_gen_params(test, prev, desc);
6767
}
6868
EXPORT_SYMBOL_IF_KUNIT(xe_pci_media_ip_gen_param);
6969

@@ -78,9 +78,9 @@ EXPORT_SYMBOL_IF_KUNIT(xe_pci_media_ip_gen_param);
7878
*
7979
* Return: pointer to the next parameter or NULL if no more parameters
8080
*/
81-
const void *xe_pci_id_gen_param(const void *prev, char *desc)
81+
const void *xe_pci_id_gen_param(struct kunit *test, const void *prev, char *desc)
8282
{
83-
const struct pci_device_id *pci = pci_id_gen_params(prev, desc);
83+
const struct pci_device_id *pci = pci_id_gen_params(test, prev, desc);
8484

8585
return pci->driver_data ? pci : NULL;
8686
}
@@ -159,7 +159,7 @@ EXPORT_SYMBOL_IF_KUNIT(xe_pci_fake_device_init);
159159
* Return: pointer to the next &struct xe_device ready to be used as a parameter
160160
* or NULL if there are no more Xe devices on the system.
161161
*/
162-
const void *xe_pci_live_device_gen_param(const void *prev, char *desc)
162+
const void *xe_pci_live_device_gen_param(struct kunit *test, const void *prev, char *desc)
163163
{
164164
const struct xe_device *xe = prev;
165165
struct device *dev = xe ? xe->drm.dev : NULL;

drivers/gpu/drm/xe/tests/xe_pci_test.h

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@
77
#define _XE_PCI_TEST_H_
88

99
#include <linux/types.h>
10+
#include <kunit/test.h>
1011

1112
#include "xe_platform_types.h"
1213
#include "xe_sriov_types.h"
@@ -25,9 +26,9 @@ struct xe_pci_fake_data {
2526

2627
int xe_pci_fake_device_init(struct xe_device *xe);
2728

28-
const void *xe_pci_graphics_ip_gen_param(const void *prev, char *desc);
29-
const void *xe_pci_media_ip_gen_param(const void *prev, char *desc);
30-
const void *xe_pci_id_gen_param(const void *prev, char *desc);
31-
const void *xe_pci_live_device_gen_param(const void *prev, char *desc);
29+
const void *xe_pci_graphics_ip_gen_param(struct kunit *test, const void *prev, char *desc);
30+
const void *xe_pci_media_ip_gen_param(struct kunit *test, const void *prev, char *desc);
31+
const void *xe_pci_id_gen_param(struct kunit *test, const void *prev, char *desc);
32+
const void *xe_pci_live_device_gen_param(struct kunit *test, const void *prev, char *desc);
3233

3334
#endif

include/kunit/test.h

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -128,7 +128,8 @@ struct kunit_attributes {
128128
struct kunit_case {
129129
void (*run_case)(struct kunit *test);
130130
const char *name;
131-
const void* (*generate_params)(const void *prev, char *desc);
131+
const void* (*generate_params)(struct kunit *test,
132+
const void *prev, char *desc);
132133
struct kunit_attributes attr;
133134
int (*param_init)(struct kunit *test);
134135
void (*param_exit)(struct kunit *test);
@@ -1703,7 +1704,8 @@ do { \
17031704
* Define function @name_gen_params which uses @array to generate parameters.
17041705
*/
17051706
#define KUNIT_ARRAY_PARAM(name, array, get_desc) \
1706-
static const void *name##_gen_params(const void *prev, char *desc) \
1707+
static const void *name##_gen_params(struct kunit *test, \
1708+
const void *prev, char *desc) \
17071709
{ \
17081710
typeof((array)[0]) *__next = prev ? ((typeof(__next)) prev) + 1 : (array); \
17091711
if (__next - (array) < ARRAY_SIZE((array))) { \
@@ -1724,7 +1726,8 @@ do { \
17241726
* Define function @name_gen_params which uses @array to generate parameters.
17251727
*/
17261728
#define KUNIT_ARRAY_PARAM_DESC(name, array, desc_member) \
1727-
static const void *name##_gen_params(const void *prev, char *desc) \
1729+
static const void *name##_gen_params(struct kunit *test, \
1730+
const void *prev, char *desc) \
17281731
{ \
17291732
typeof((array)[0]) *__next = prev ? ((typeof(__next)) prev) + 1 : (array); \
17301733
if (__next - (array) < ARRAY_SIZE((array))) { \

kernel/kcsan/kcsan_test.c

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1383,7 +1383,7 @@ static void test_atomic_builtins_missing_barrier(struct kunit *test)
13831383
* The thread counts are chosen to cover potentially interesting boundaries and
13841384
* corner cases (2 to 5), and then stress the system with larger counts.
13851385
*/
1386-
static const void *nthreads_gen_params(const void *prev, char *desc)
1386+
static const void *nthreads_gen_params(struct kunit *test, const void *prev, char *desc)
13871387
{
13881388
long nthreads = (long)prev;
13891389

lib/kunit/test.c

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -700,7 +700,7 @@ int kunit_run_tests(struct kunit_suite *suite)
700700
/* Get initial param. */
701701
param_desc[0] = '\0';
702702
/* TODO: Make generate_params try-catch */
703-
curr_param = test_case->generate_params(NULL, param_desc);
703+
curr_param = test_case->generate_params(&test, NULL, param_desc);
704704
test_case->status = KUNIT_SKIPPED;
705705
kunit_log(KERN_INFO, &test, KUNIT_SUBTEST_INDENT KUNIT_SUBTEST_INDENT
706706
"KTAP version 1\n");
@@ -731,7 +731,8 @@ int kunit_run_tests(struct kunit_suite *suite)
731731

732732
/* Get next param. */
733733
param_desc[0] = '\0';
734-
curr_param = test_case->generate_params(curr_param, param_desc);
734+
curr_param = test_case->generate_params(&test, curr_param,
735+
param_desc);
735736
}
736737
/*
737738
* TODO: Put into a try catch. Since we don't need suite->exit

0 commit comments

Comments
 (0)