mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2026-04-03 12:05:13 +02:00
selftests/harness: order TEST_F and XFAIL_ADD constructors
TEST_F() allocates and registers its struct __test_metadata via mmap()
inside its constructor, and only then assigns the
_##fixture_##test##_object pointer.
XFAIL_ADD() runs in a constructor too and reads
_##fixture_##test##_object to initialize xfail->test. If XFAIL_ADD runs
first, xfail->test can be NULL and the expected failure will be reported
as FAIL.
Use constructor priorities to ensure TEST_F registration runs before
XFAIL_ADD, without adding extra state or runtime lookups.
Fixes: 2709473c93 ("selftests: kselftest_harness: support using xfail")
Signed-off-by: Sun Jian <sun.jian.kdev@gmail.com>
Link: https://patch.msgid.link/20260225111451.347923-1-sun.jian.kdev@gmail.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
@@ -76,6 +76,9 @@ static inline void __kselftest_memset_safe(void *s, int c, size_t n)
|
||||
memset(s, c, n);
|
||||
}
|
||||
|
||||
#define KSELFTEST_PRIO_TEST_F 20000
|
||||
#define KSELFTEST_PRIO_XFAIL 20001
|
||||
|
||||
#define TEST_TIMEOUT_DEFAULT 30
|
||||
|
||||
/* Utilities exposed to the test definitions */
|
||||
@@ -465,7 +468,7 @@ static inline void __kselftest_memset_safe(void *s, int c, size_t n)
|
||||
fixture_name##_teardown(_metadata, self, variant); \
|
||||
} \
|
||||
static struct __test_metadata *_##fixture_name##_##test_name##_object; \
|
||||
static void __attribute__((constructor)) \
|
||||
static void __attribute__((constructor(KSELFTEST_PRIO_TEST_F))) \
|
||||
_register_##fixture_name##_##test_name(void) \
|
||||
{ \
|
||||
struct __test_metadata *object = mmap(NULL, sizeof(*object), \
|
||||
@@ -880,7 +883,7 @@ struct __test_xfail {
|
||||
.fixture = &_##fixture_name##_fixture_object, \
|
||||
.variant = &_##fixture_name##_##variant_name##_object, \
|
||||
}; \
|
||||
static void __attribute__((constructor)) \
|
||||
static void __attribute__((constructor(KSELFTEST_PRIO_XFAIL))) \
|
||||
_register_##fixture_name##_##variant_name##_##test_name##_xfail(void) \
|
||||
{ \
|
||||
_##fixture_name##_##variant_name##_##test_name##_xfail.test = \
|
||||
|
||||
Reference in New Issue
Block a user