Add support for a new kind of kunit_suite registration macro called kunit_test_init_suite(); this new registration macro allows the registration of kunit_suites that reference functions marked __init and data marked __initdata.
Signed-off-by: Brendan Higgins brendanhiggins@google.com ---
This patch is in response to a KUnit user issue[1] in which the user was attempting to test some init functions; although this is a functional solution as long as KUnit tests only run during the init phase, we will need to do more work if we ever allow tests to run after the init phase is over; it is for this reason that this patch adds a new registration macro rather than simply modifying the existing macros.
[1] https://groups.google.com/g/kunit-dev/c/XDjieRHEneg/m/D0rFCwVABgAJ
--- include/kunit/test.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)
diff --git a/include/kunit/test.h b/include/kunit/test.h index b26400731c02..1878e585f6d3 100644 --- a/include/kunit/test.h +++ b/include/kunit/test.h @@ -379,6 +379,27 @@ static inline int kunit_run_all_tests(void)
#define kunit_test_suite(suite) kunit_test_suites(&suite)
+/** + * kunit_test_init_suites() - used to register one or more &struct kunit_suite + * containing init functions or init data. + * + * @__suites: a statically allocated list of &struct kunit_suite. + * + * This functions identically as &kunit_test_suites() except that it suppresses + * modpost warnings for referencing functions marked __init or data marked + * __initdata; this is OK because currently KUnit only runs tests upon boot + * during the init phase or upon loading a module during the init phase. + * + * NOTE TO KUNIT DEVS: If we ever allow KUnit tests to be run after boot, these + * tests must be excluded. + */ +#define kunit_test_init_suites(__suites...) \ + __kunit_test_suites(CONCATENATE(__UNIQUE_ID(array), _probe), \ + CONCATENATE(__UNIQUE_ID(suites), _probe), \ + ##__suites) + +#define kunit_test_init_suite(suite) kunit_test_init_suites(&suite) + #define kunit_suite_for_each_test_case(suite, test_case) \ for (test_case = suite->test_cases; test_case->run_case; test_case++)
base-commit: 330f4c53d3c2d8b11d86ec03a964b86dc81452f5
On 3/10/22, Brendan Higgins brendanhiggins@google.com wrote:
Add support for a new kind of kunit_suite registration macro called kunit_test_init_suite(); this new registration macro allows the registration of kunit_suites that reference functions marked __init and data marked __initdata.
Signed-off-by: Brendan Higgins brendanhiggins@google.com
This patch is in response to a KUnit user issue[1] in which the user was attempting to test some init functions; although this is a functional solution as long as KUnit tests only run during the init phase, we will need to do more work if we ever allow tests to run after the init phase is over; it is for this reason that this patch adds a new registration macro rather than simply modifying the existing macros.
[1] https://groups.google.com/g/kunit-dev/c/XDjieRHEneg/m/D0rFCwVABgAJ
include/kunit/test.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)
diff --git a/include/kunit/test.h b/include/kunit/test.h index b26400731c02..1878e585f6d3 100644 --- a/include/kunit/test.h +++ b/include/kunit/test.h @@ -379,6 +379,27 @@ static inline int kunit_run_all_tests(void)
#define kunit_test_suite(suite) kunit_test_suites(&suite)
+/**
- kunit_test_init_suites() - used to register one or more &struct
kunit_suite
containing init functions or init data.
- @__suites: a statically allocated list of &struct kunit_suite.
- This functions identically as &kunit_test_suites() except that it
suppresses
- modpost warnings for referencing functions marked __init or data marked
- __initdata; this is OK because currently KUnit only runs tests upon
boot
- during the init phase or upon loading a module during the init phase.
- NOTE TO KUNIT DEVS: If we ever allow KUnit tests to be run after boot,
these
- tests must be excluded.
- */
+#define kunit_test_init_suites(__suites...) \
- __kunit_test_suites(CONCATENATE(__UNIQUE_ID(array), _probe), \
CONCATENATE(__UNIQUE_ID(suites), _probe), \
##__suites)
+#define kunit_test_init_suite(suite) kunit_test_init_suites(&suite)
#define kunit_suite_for_each_test_case(suite, test_case) \ for (test_case = suite->test_cases; test_case->run_case; test_case++)
base-commit: 330f4c53d3c2d8b11d86ec03a964b86dc81452f5
2.35.1.723.g4982287a31-goog
Thanks for the feature :)
Tested-by: Martin Fernandez martin.fernandez@eclypsium.com
On Thu, Mar 10, 2022 at 01:02:10PM -0800, Brendan Higgins wrote:
Add support for a new kind of kunit_suite registration macro called kunit_test_init_suite(); this new registration macro allows the registration of kunit_suites that reference functions marked __init and data marked __initdata.
O_o is this due to the "_probe" name being used? I think that likely deserves a comment in the code, so the "how" of the warning suppression is clear.
Signed-off-by: Brendan Higgins brendanhiggins@google.com
Regardless:
Reviewed-by: Kees Cook keescook@chromium.org
This patch is in response to a KUnit user issue[1] in which the user was attempting to test some init functions; although this is a functional solution as long as KUnit tests only run during the init phase, we will need to do more work if we ever allow tests to run after the init phase is over; it is for this reason that this patch adds a new registration macro rather than simply modifying the existing macros.
[1] https://groups.google.com/g/kunit-dev/c/XDjieRHEneg/m/D0rFCwVABgAJ
include/kunit/test.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)
diff --git a/include/kunit/test.h b/include/kunit/test.h index b26400731c02..1878e585f6d3 100644 --- a/include/kunit/test.h +++ b/include/kunit/test.h @@ -379,6 +379,27 @@ static inline int kunit_run_all_tests(void) #define kunit_test_suite(suite) kunit_test_suites(&suite) +/**
- kunit_test_init_suites() - used to register one or more &struct kunit_suite
containing init functions or init data.
- @__suites: a statically allocated list of &struct kunit_suite.
- This functions identically as &kunit_test_suites() except that it suppresses
- modpost warnings for referencing functions marked __init or data marked
- __initdata; this is OK because currently KUnit only runs tests upon boot
- during the init phase or upon loading a module during the init phase.
- NOTE TO KUNIT DEVS: If we ever allow KUnit tests to be run after boot, these
- tests must be excluded.
- */
+#define kunit_test_init_suites(__suites...) \
- __kunit_test_suites(CONCATENATE(__UNIQUE_ID(array), _probe), \
CONCATENATE(__UNIQUE_ID(suites), _probe), \
##__suites)
+#define kunit_test_init_suite(suite) kunit_test_init_suites(&suite)
#define kunit_suite_for_each_test_case(suite, test_case) \ for (test_case = suite->test_cases; test_case->run_case; test_case++)
base-commit: 330f4c53d3c2d8b11d86ec03a964b86dc81452f5
2.35.1.723.g4982287a31-goog
+Jeremy Kerr - Just remembered that Jeremy is doing some work here and might be somewhat interested.
On Thu, Mar 10, 2022 at 4:02 PM Brendan Higgins brendanhiggins@google.com wrote:
Add support for a new kind of kunit_suite registration macro called kunit_test_init_suite(); this new registration macro allows the registration of kunit_suites that reference functions marked __init and data marked __initdata.
Signed-off-by: Brendan Higgins brendanhiggins@google.com
This patch is in response to a KUnit user issue[1] in which the user was attempting to test some init functions; although this is a functional solution as long as KUnit tests only run during the init phase, we will need to do more work if we ever allow tests to run after the init phase is over; it is for this reason that this patch adds a new registration macro rather than simply modifying the existing macros.
[1] https://groups.google.com/g/kunit-dev/c/XDjieRHEneg/m/D0rFCwVABgAJ
include/kunit/test.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)
diff --git a/include/kunit/test.h b/include/kunit/test.h index b26400731c02..1878e585f6d3 100644 --- a/include/kunit/test.h +++ b/include/kunit/test.h @@ -379,6 +379,27 @@ static inline int kunit_run_all_tests(void)
#define kunit_test_suite(suite) kunit_test_suites(&suite)
+/**
- kunit_test_init_suites() - used to register one or more &struct kunit_suite
containing init functions or init data.
- @__suites: a statically allocated list of &struct kunit_suite.
- This functions identically as &kunit_test_suites() except that it suppresses
- modpost warnings for referencing functions marked __init or data marked
- __initdata; this is OK because currently KUnit only runs tests upon boot
- during the init phase or upon loading a module during the init phase.
- NOTE TO KUNIT DEVS: If we ever allow KUnit tests to be run after boot, these
- tests must be excluded.
- */
+#define kunit_test_init_suites(__suites...) \
__kunit_test_suites(CONCATENATE(__UNIQUE_ID(array), _probe), \
CONCATENATE(__UNIQUE_ID(suites), _probe), \
##__suites)
+#define kunit_test_init_suite(suite) kunit_test_init_suites(&suite)
#define kunit_suite_for_each_test_case(suite, test_case) \ for (test_case = suite->test_cases; test_case->run_case; test_case++)
base-commit: 330f4c53d3c2d8b11d86ec03a964b86dc81452f5
2.35.1.723.g4982287a31-goog
Actually add Jeremy this time. Sorry for the spam.
On Thu, Mar 10, 2022 at 5:49 PM Brendan Higgins brendanhiggins@google.com wrote:
+Jeremy Kerr - Just remembered that Jeremy is doing some work here and might be somewhat interested.
On Thu, Mar 10, 2022 at 4:02 PM Brendan Higgins brendanhiggins@google.com wrote:
Add support for a new kind of kunit_suite registration macro called kunit_test_init_suite(); this new registration macro allows the registration of kunit_suites that reference functions marked __init and data marked __initdata.
Signed-off-by: Brendan Higgins brendanhiggins@google.com
This patch is in response to a KUnit user issue[1] in which the user was attempting to test some init functions; although this is a functional solution as long as KUnit tests only run during the init phase, we will need to do more work if we ever allow tests to run after the init phase is over; it is for this reason that this patch adds a new registration macro rather than simply modifying the existing macros.
[1] https://groups.google.com/g/kunit-dev/c/XDjieRHEneg/m/D0rFCwVABgAJ
include/kunit/test.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)
diff --git a/include/kunit/test.h b/include/kunit/test.h index b26400731c02..1878e585f6d3 100644 --- a/include/kunit/test.h +++ b/include/kunit/test.h @@ -379,6 +379,27 @@ static inline int kunit_run_all_tests(void)
#define kunit_test_suite(suite) kunit_test_suites(&suite)
+/**
- kunit_test_init_suites() - used to register one or more &struct kunit_suite
containing init functions or init data.
- @__suites: a statically allocated list of &struct kunit_suite.
- This functions identically as &kunit_test_suites() except that it suppresses
- modpost warnings for referencing functions marked __init or data marked
- __initdata; this is OK because currently KUnit only runs tests upon boot
- during the init phase or upon loading a module during the init phase.
- NOTE TO KUNIT DEVS: If we ever allow KUnit tests to be run after boot, these
- tests must be excluded.
- */
+#define kunit_test_init_suites(__suites...) \
__kunit_test_suites(CONCATENATE(__UNIQUE_ID(array), _probe), \
CONCATENATE(__UNIQUE_ID(suites), _probe), \
##__suites)
+#define kunit_test_init_suite(suite) kunit_test_init_suites(&suite)
#define kunit_suite_for_each_test_case(suite, test_case) \ for (test_case = suite->test_cases; test_case->run_case; test_case++)
base-commit: 330f4c53d3c2d8b11d86ec03a964b86dc81452f5
2.35.1.723.g4982287a31-goog
On Thu, Mar 10, 2022 at 01:02:10PM -0800, Brendan Higgins wrote:
Add support for a new kind of kunit_suite registration macro called kunit_test_init_suite(); this new registration macro allows the registration of kunit_suites that reference functions marked __init and data marked __initdata.
Signed-off-by: Brendan Higgins brendanhiggins@google.com
This patch is in response to a KUnit user issue[1] in which the user was attempting to test some init functions; although this is a functional solution as long as KUnit tests only run during the init phase, we will need to do more work if we ever allow tests to run after the init phase is over; it is for this reason that this patch adds a new registration macro rather than simply modifying the existing macros.
[1] https://groups.google.com/g/kunit-dev/c/XDjieRHEneg/m/D0rFCwVABgAJ
I'm a little concerned that this is just removing the warnings, but do agree that this is safe enough for the moment. At least the information about which tests need __init is preserved by the use of a different macro.
I guess one day we'll need a second list of 'init' tests or something...
Anyway,
Reviewed-by: David Gow davidgow@google.com
-- David
include/kunit/test.h | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+)
diff --git a/include/kunit/test.h b/include/kunit/test.h index b26400731c02..1878e585f6d3 100644 --- a/include/kunit/test.h +++ b/include/kunit/test.h @@ -379,6 +379,27 @@ static inline int kunit_run_all_tests(void) #define kunit_test_suite(suite) kunit_test_suites(&suite) +/**
- kunit_test_init_suites() - used to register one or more &struct kunit_suite
containing init functions or init data.
- @__suites: a statically allocated list of &struct kunit_suite.
- This functions identically as &kunit_test_suites() except that it suppresses
- modpost warnings for referencing functions marked __init or data marked
- __initdata; this is OK because currently KUnit only runs tests upon boot
- during the init phase or upon loading a module during the init phase.
- NOTE TO KUNIT DEVS: If we ever allow KUnit tests to be run after boot, these
- tests must be excluded.
- */
+#define kunit_test_init_suites(__suites...) \
- __kunit_test_suites(CONCATENATE(__UNIQUE_ID(array), _probe), \
CONCATENATE(__UNIQUE_ID(suites), _probe), \
##__suites)
+#define kunit_test_init_suite(suite) kunit_test_init_suites(&suite)
#define kunit_suite_for_each_test_case(suite, test_case) \ for (test_case = suite->test_cases; test_case->run_case; test_case++)
base-commit: 330f4c53d3c2d8b11d86ec03a964b86dc81452f5
2.35.1.723.g4982287a31-goog
linux-kselftest-mirror@lists.linaro.org