Hi, The common kselftest harness provides nice features such as tracking the number of tests, common pass/fail printouts, and setup/teardown functions.
KVM would like to benefit from the common functionality provided in the general kselftest harness, but KVM selftests are dependent on a selftest library. This selftest library provides common code for setting up virtual machines, and is designed with assertions within the setup flows to reduce KVM selftest developer burden of making common assertions. The common kselftest library assertions (ASSERT_EQ and EXPECT_EQ) are dependent on access to the _metadata parameter. Any function using the assertion macros must be parametrized by _metadata. The KVM selftest library has many nested function calls and it would be impractical to pass _metadata through all those layers of function calls. Without _metadata, the KVM selftest library can still reimplement its own assertion macro (TEST_ASSERT), but it cannot perform teardown on assertion failure. Sean suggested using setjmp and longjmp [1] to back to the top level TEST_F(). I looked at [1] and found myself wishing to use TEST_F() the from kselftest harness directly. Also, setjmp/longjmp felt like it was introducing state that could be messed up easily. I also found recent work that removed setjmp/longjmp from kselftest harness [2]. The kselftests harness is running tests sequentially anyway, and the function pointers in _metadata wouldn't be changing all that often in most selftests. Would maintainers be open to having the kselftest harness expose a pointer to the metadata globally? Another option would be to expose the current teardown function pointer globally instead of the pointer to the entire metadata struct. kselftest harness macros ASSERT_EQ might also benefit from using the global pointer instead, which would open the functions up to calls from nested functions without needing to parametrize those functions with _metadata. [1] https://lore.kernel.org/all/[email protected]/ [2] https://lore.kernel.org/all/20250610141252-1ee7ae72-dbad-4a80-931c-5b4b14fb0...@linutronix.de/ Signed-off-by: Ackerley Tng <[email protected]> --- Ackerley Tng (4): selftests: harness: Move metadata structs to separate header file selftests: harness: Set global current_test_metadata for each test run KVM: selftests: Do teardown from kselftest harness if kselftest_harness is used HACK: Show that the teardown function is called from KVM selftests tools/testing/selftests/kselftest_harness.h | 51 +++------------------ .../testing/selftests/kselftest_harness_structs.h | 53 ++++++++++++++++++++++ tools/testing/selftests/kvm/Makefile.kvm | 1 + .../selftests/kvm/kvm_test_harness_selftest.c | 34 ++++++++++++++ tools/testing/selftests/kvm/lib/assert.c | 16 +++++++ 5 files changed, 110 insertions(+), 45 deletions(-) --- base-commit: 5d0d3623303775d750e122a2542d1a26c8573d38 change-id: 20260414-selftest-global-metadata-7b1f04a405f3 Best regards, -- Ackerley Tng <[email protected]>

