The guest state buffer (GSB) test suite currently fails on systems that do not support the PAPR APIv2 nested virtualization. This happens because the tests attempt to use APIv2-specific functionality without first checking if the host supports it. This was recently reported [1] when test-guest-state-buffer kunit tests were being run on Qemu without enabling Qemu capability 'cap-nested-papr' which enabled APIv2 nested virtualization for PPC64 Pseries Qemu machine. Add a suite_init callback that checks for APIv2 support by calling plpar_guest_get_capabilities(). If the host does not support APIv2 (indicated by H_SUCCESS not being returned), mark all test cases in the suite as KUNIT_SKIPPED. This prevents test failures on systems without APIv2 support while still allowing the tests to run on capable systems. [1] https://lore.kernel.org/all/20260603064225.GC18149@sol/ Reported-by: Eric Biggers Closes: https://lore.kernel.org/all/20260603064225.GC18149@sol Signed-off-by: Vaibhav Jain Assisted-by: Bob:Claude-3.7-Sonnet Bob-Shell --- arch/powerpc/kvm/test-guest-state-buffer.c | 19 +++++++++++++++++++ 1 file changed, 19 insertions(+) diff --git a/arch/powerpc/kvm/test-guest-state-buffer.c b/arch/powerpc/kvm/test-guest-state-buffer.c index 5ccca306997a..f84b40fa55db 100644 --- a/arch/powerpc/kvm/test-guest-state-buffer.c +++ b/arch/powerpc/kvm/test-guest-state-buffer.c @@ -521,6 +521,24 @@ static void test_gs_hostwide_counters(struct kunit *test) kvmppc_gsb_free(gsb); } +static int init_gs_test_suite(struct kunit_suite *suite) +{ + long rc; + unsigned long host_capabilities; + struct kunit_case *test_case; + + /* Enable test suite only if APIv2 is supported */ + rc = plpar_guest_get_capabilities(0, &host_capabilities); + + if (rc != H_SUCCESS) { + /* Skip all testcases if no APIv2 support */ + kunit_suite_for_each_test_case(suite, test_case) + WRITE_ONCE(test_case->status, KUNIT_SKIPPED); + } + + return 0; +} + static struct kunit_case guest_state_buffer_testcases[] = { KUNIT_CASE(test_creating_buffer), KUNIT_CASE(test_adding_element), @@ -535,6 +553,7 @@ static struct kunit_case guest_state_buffer_testcases[] = { static struct kunit_suite guest_state_buffer_test_suite = { .name = "guest_state_buffer_test", .test_cases = guest_state_buffer_testcases, + .suite_init = init_gs_test_suite, }; kunit_test_suites(&guest_state_buffer_test_suite); -- 2.54.0