From nobody Sat Jun 20 14:14:00 2026 Received: from mail-pl1-f202.google.com (mail-pl1-f202.google.com [209.85.214.202]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 3EEF5314A86 for ; Tue, 14 Apr 2026 18:07:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.214.202 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776190079; cv=none; b=bSPK568OYjxZWcKEzjx6kpJZZoLEW7CQTGD9F7apJSEJ7c1Ve/CHn5+hRHMjj9xVjRfjOr++GNGxJUNgP66Log391yFY16VsBt7QH43BqwdH/vfr/kknmCCgpy9N7BIV2ur/QgCdyLq4EzULbibldSi7GtTVqPfPX60msOak3pU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776190079; c=relaxed/simple; bh=Hd5qZDur7V+h51FM8gRRisATrFOW5S+Ps63Zhu3wHr8=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=miNsuEXZeNqtdpoywwUZ2E2pzK54eDzerf3/S3YZBHCnSaUhp5x4mIMerUWmUR6QJjLmTxi6phq2naNaM/PN8dySLCVv0kJ9RdjZR8ZO3F6X91nlBMqSZu4aWfvqAzPKkqu0axmr2FscWEx9jkC+SjU/KD0gCU5FTcmWY1M5ZU4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=kFrFibRm; arc=none smtp.client-ip=209.85.214.202 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="kFrFibRm" Received: by mail-pl1-f202.google.com with SMTP id d9443c01a7336-2adef9d486bso54022125ad.2 for ; Tue, 14 Apr 2026 11:07:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776190078; x=1776794878; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=WM5/xC3pViZfhGQrHlucwZXjKqE1LBX1FZovj8hMxDs=; b=kFrFibRmm75p21YyVHJx4k/ezNq2uglv0HRIMPeasUtt8RdFwPnQILa9y3xUI8wbVb AYw4aQfyFM2eMAW3+L13hqf6ythHyJlPwe/24CK8o12zb8cPS8MBnHBl7plXiYKzQPua K+y1h8yNWcyWWNUVi2eDOGwbN4xwLC3MAf9AeKkFSAPc7YabN8jn5bHlXhS7V9Bcf/tW RbWQePdtgEbzICVkoUMua25tnwUzefKc0uT16h7yGzP9LDX2SF+/5PDRcYKqc9pNacIu voqAySEas2ogB0kv6aMpibyG5pglJXLx68s31E1jmBcxfEYGMGqW1KCGrgD4RGeyyRld te2A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776190078; x=1776794878; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=WM5/xC3pViZfhGQrHlucwZXjKqE1LBX1FZovj8hMxDs=; b=R5MNF6NNIOw8yBg69jYW2Pb9kMaarAUJSGMun0fbZbbvhu8QT+L0nrGQuQrSw04bMz C/WycKQGC83EoMppo7Rob2Nvkq9tN/Ou65mdRfJAFr+9+/gDlnygD4RwE2lTMPQtVgmJ yltL1QHWOMaV+7domqXzN0ANFhoWUU4Rqptwd92lplj/AlJ0ptyMVBBioa9Z8VLIFD1r 0ajsxoVfqSV1AH4fsAfgnH4BsgljxRtTFxgxHPxWEi6TpJCwY3hgjLUqn8QFc75LrpNt KxeptA57nMe0Tbv2JXR53Xpw/LlHVMBlpz4KggCrmVZjuQkx4EXh/ugKmpfjenMa7CXR brOg== X-Gm-Message-State: AOJu0Yz7zBGwzx20vcod30uqnBUG4tteKdwH99L808dFTF/F5QSYbdJo FkaEjXmCJuhoqVtiEqvOISSdH0pL9T0I6iNY/g1BKFkEd+g+zmlvGy3KqqgW/ODXsq+cRyzPhHW 7Dl81o3a32U2RSZ5iLBBzn9/sVg== X-Received: from plht6.prod.google.com ([2002:a17:903:2f06:b0:2b2:beb7:883e]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a17:902:9a4b:b0:2b0:70c8:ccea with SMTP id d9443c01a7336-2b2d5967d7dmr123297865ad.13.1776190077309; Tue, 14 Apr 2026 11:07:57 -0700 (PDT) Date: Tue, 14 Apr 2026 11:07:48 -0700 In-Reply-To: <20260414-selftest-global-metadata-v1-0-fd223922bc57@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260414-selftest-global-metadata-v1-0-fd223922bc57@google.com> X-Developer-Key: i=ackerleytng@google.com; a=ed25519; pk=sAZDYXdm6Iz8FHitpHeFlCMXwabodTm7p8/3/8xUxuU= X-Developer-Signature: v=1; a=ed25519-sha256; t=1776190073; l=5152; i=ackerleytng@google.com; s=20260225; h=from:subject:message-id; bh=Hd5qZDur7V+h51FM8gRRisATrFOW5S+Ps63Zhu3wHr8=; b=y5FWOXefLy8anzMgGZDI+mr0TcpKgI3LdYzb5kMUkeHxWgjqCQI0nc35/Yk9qUxIepPgAoJvR tZRrtnX8rYgAJ+6+B6vJS61XLQHvLswBjKAIjBy0US/D69dygXWgVUC X-Mailer: b4 0.14.3 Message-ID: <20260414-selftest-global-metadata-v1-1-fd223922bc57@google.com> Subject: [PATCH RFC 1/4] selftests: harness: Move metadata structs to separate header file From: Ackerley Tng To: Kees Cook , Andy Lutomirski , Will Drewry , Shuah Khan , Paolo Bonzini , Sean Christopherson , thomas.weissschuh@linutronix.de, linux@weissschuh.net Cc: linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, kvm@vger.kernel.org, Ackerley Tng Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Move metadata structs to separate header file so that the structs can be referenced without importing all the static functions, such as test_harness_run. Signed-off-by: Ackerley Tng --- tools/testing/selftests/kselftest_harness.h | 47 +------------------ .../testing/selftests/kselftest_harness_structs.h | 53 ++++++++++++++++++= ++++ 2 files changed, 55 insertions(+), 45 deletions(-) diff --git a/tools/testing/selftests/kselftest_harness.h b/tools/testing/se= lftests/kselftest_harness.h index 4afaef01c22e9..68cde1556ac41 100644 --- a/tools/testing/selftests/kselftest_harness.h +++ b/tools/testing/selftests/kselftest_harness.h @@ -68,6 +68,7 @@ #include #include =20 +#include "kselftest_harness_structs.h" #include "kselftest.h" =20 static inline void __kselftest_memset_safe(void *s, int c, size_t n) @@ -845,27 +846,11 @@ struct __test_results { char reason[1024]; /* Reason for test result */ }; =20 -struct __test_metadata; -struct __fixture_variant_metadata; - -/* Contains all the information about a fixture. */ -struct __fixture_metadata { - const char *name; - struct __test_metadata *tests; - struct __fixture_variant_metadata *variant; - struct __fixture_metadata *prev, *next; -} _fixture_global __attribute__((unused)) =3D { +struct __fixture_metadata _fixture_global __attribute__((unused)) =3D { .name =3D "global", .prev =3D &_fixture_global, }; =20 -struct __test_xfail { - struct __fixture_metadata *fixture; - struct __fixture_variant_metadata *variant; - struct __test_metadata *test; - struct __test_xfail *prev, *next; -}; - /** * XFAIL_ADD() - mark variant + test case combination as expected to fail * @fixture_name: name of the fixture @@ -899,13 +884,6 @@ static inline void __register_fixture(struct __fixture= _metadata *f) __LIST_APPEND(__fixture_list, f); } =20 -struct __fixture_variant_metadata { - const char *name; - const void *data; - struct __test_xfail *xfails; - struct __fixture_variant_metadata *prev, *next; -}; - static inline void __register_fixture_variant(struct __fixture_metadata *f, struct __fixture_variant_metadata *variant) @@ -913,27 +891,6 @@ __register_fixture_variant(struct __fixture_metadata *= f, __LIST_APPEND(f->variant, variant); } =20 -/* Contains all the information for test execution and status checking. */ -struct __test_metadata { - const char *name; - void (*fn)(struct __test_metadata *, - struct __fixture_variant_metadata *); - pid_t pid; /* pid of test when being run */ - struct __fixture_metadata *fixture; - void (*teardown_fn)(bool in_parent, struct __test_metadata *_metadata, - void *self, const void *variant); - int termsig; - int exit_code; - int trigger; /* extra handler after the evaluation */ - int timeout; /* seconds to wait for test timeout */ - bool aborted; /* stopped test due to failed ASSERT */ - bool *no_teardown; /* fixture needs teardown */ - void *self; - const void *variant; - struct __test_results *results; - struct __test_metadata *prev, *next; -}; - static inline bool __test_passed(struct __test_metadata *metadata) { return metadata->exit_code !=3D KSFT_FAIL && diff --git a/tools/testing/selftests/kselftest_harness_structs.h b/tools/te= sting/selftests/kselftest_harness_structs.h new file mode 100644 index 0000000000000..cf9d15ad3de0c --- /dev/null +++ b/tools/testing/selftests/kselftest_harness_structs.h @@ -0,0 +1,53 @@ +#ifndef __KSELFTEST_HARNESS_STRUCTS_H +#define __KSELFTEST_HARNESS_STRUCTS_H + +#include +#include + +struct __test_metadata; +struct __fixture_variant_metadata; + +/* Contains all the information about a fixture. */ +struct __fixture_metadata { + const char *name; + struct __test_metadata *tests; + struct __fixture_variant_metadata *variant; + struct __fixture_metadata *prev, *next; +}; + +struct __test_xfail { + struct __fixture_metadata *fixture; + struct __fixture_variant_metadata *variant; + struct __test_metadata *test; + struct __test_xfail *prev, *next; +}; + +struct __fixture_variant_metadata { + const char *name; + const void *data; + struct __test_xfail *xfails; + struct __fixture_variant_metadata *prev, *next; +}; + +/* Contains all the information for test execution and status checking. */ +struct __test_metadata { + const char *name; + void (*fn)(struct __test_metadata *, + struct __fixture_variant_metadata *); + pid_t pid; /* pid of test when being run */ + struct __fixture_metadata *fixture; + void (*teardown_fn)(bool in_parent, struct __test_metadata *_metadata, + void *self, const void *variant); + int termsig; + int exit_code; + int trigger; /* extra handler after the evaluation */ + int timeout; /* seconds to wait for test timeout */ + bool aborted; /* stopped test due to failed ASSERT */ + bool *no_teardown; /* fixture needs teardown */ + void *self; + const void *variant; + struct __test_results *results; + struct __test_metadata *prev, *next; +}; + +#endif --=20 2.54.0.rc0.605.g598a273b03-goog From nobody Sat Jun 20 14:14:00 2026 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 06E8D31AF07 for ; Tue, 14 Apr 2026 18:07:59 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776190081; cv=none; b=HcQ5qmKU4OqQKZUysaTcLUUVAq/qvPkC/Fn8QyVwO72aGbAw7DHbaJT+wGrlW7TITGq1Q2lGRQuUNwdSCMucWQ2j8XXysz52JQyHNv8yojLipgbADxvxehbJ1RXUu4Fy8WObDzTQN8m7vBscbuwz4qUSQHP91DkBhLz3bmbrqU0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776190081; c=relaxed/simple; bh=ALJBMYWS1x2rKXT/63YRmr7XiBihTr+8ZXwVGpCSyyI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=XhqQnTi2Lwa4cBs9wc9i66wtSOsUXwfedZmNO7q6qsFreg2PDx8GMCGH3w8k3QT3QVMrZz43V4mIzqR0Ud2Ceqe/uUL1gbMsjqNgSDHhiagrmBtAs4xxKDrGh4iuG19AhJH2eUV7SdLiZn22GG7dPoIy2g2yIOjU5Pt5TRrSViQ= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=wE96A4aB; arc=none smtp.client-ip=209.85.216.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="wE96A4aB" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-35fbaada0caso2554388a91.3 for ; Tue, 14 Apr 2026 11:07:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776190079; x=1776794879; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=1L9bOnm0LoR07RId6eCuMgAP1rY2SX02HCtv6g1t/NE=; b=wE96A4aBVTKN6bkmX5d2KKt8+3Uc3/uX853cDp5N6UcpPqXJwyNtvg+wiZ3Vz4utNB kOhIqmDYut+qrUwOKA02Jixhm7QZvaHnmeRoyOFWm9tzX+I3PUrkdiO35xETr7MsO7k/ tK3PQPEyV6zCZOxl7MG7598U4Sqlwm3sJXwROdup4uDgucehY3iFt+7Mf3rL8Ka94zG8 7GncMgft239dAgROstempjHDLFPbgGUFU0FISaxxQ+XTB1JEsOiak6TEffsAa2Uq2EDP qJs9ejtirSdv7ZWRtCQiDrseJ3biEMHIiMYT64BEu7md6mND8s7cJMPIxgDgfVQTSmGM UHZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776190079; x=1776794879; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=1L9bOnm0LoR07RId6eCuMgAP1rY2SX02HCtv6g1t/NE=; b=VHN7bNW3TvdIMbDytDZ6DRkIY9L/8Pa/RgmhlMIhwUkNEOFpouaqFEgPiThmUoKa+L rCyokpSOU3o7RSeVwSM4B4hdZqN321VO0xn7WrspYFNYxl7SUjKD04Ds3fM8Qc31qPCS vsqiQ9SXhK9vuZkxpAPThpQbTiwjFFWPERsogOKlXX8v5Gqghd05OM7/D4j8JXLxDaf7 BrOhL4b80AX7Ndtzdzw93LNWrarssCVmBpg7w6hyj456zOk2CGf+ZgVI3ua0yGJTmQdC S/sBERolF7CenOcKvMbsIkeEHMFJN7bOGsie+Pqkjq2fJm0DfzxiebE9Mztyt5jijdz0 x1NQ== X-Gm-Message-State: AOJu0Ywr9uRQ4H44Eo0nUn+M6+MBieoOmr5iyMRUQB8wYiEUxa4l/BC7 6O4tj9vAwOb1vVw+mAY0JgJsDorpdmmmLMT1UXMEsRERO/fXnqhjI1A3u1OfeYqYmd6EPECs2LN PsbrNN0ateU0r00goVoeyhf64WA== X-Received: from plii9.prod.google.com ([2002:a17:902:eb49:b0:2b2:6ee9:466c]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:4c50:b0:35d:8ea1:62df with SMTP id 98e67ed59e1d1-35e42838d40mr19277911a91.21.1776190079138; Tue, 14 Apr 2026 11:07:59 -0700 (PDT) Date: Tue, 14 Apr 2026 11:07:49 -0700 In-Reply-To: <20260414-selftest-global-metadata-v1-0-fd223922bc57@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260414-selftest-global-metadata-v1-0-fd223922bc57@google.com> X-Developer-Key: i=ackerleytng@google.com; a=ed25519; pk=sAZDYXdm6Iz8FHitpHeFlCMXwabodTm7p8/3/8xUxuU= X-Developer-Signature: v=1; a=ed25519-sha256; t=1776190073; l=1498; i=ackerleytng@google.com; s=20260225; h=from:subject:message-id; bh=ALJBMYWS1x2rKXT/63YRmr7XiBihTr+8ZXwVGpCSyyI=; b=FfRgVZaFM+g1a1sLY5U/nQrRiYSCOF6Jgw9QEH9uV4HeDMf/FykQ40BD262ioNmWKZ8QPOhlc 3eqTBu+6HU+DSHB5OQwHKzlRQk88mwEmVErdbYW9Oy05e+xqIg9CXzz X-Mailer: b4 0.14.3 Message-ID: <20260414-selftest-global-metadata-v1-2-fd223922bc57@google.com> Subject: [PATCH RFC 2/4] selftests: harness: Set global current_test_metadata for each test run From: Ackerley Tng To: Kees Cook , Andy Lutomirski , Will Drewry , Shuah Khan , Paolo Bonzini , Sean Christopherson , thomas.weissschuh@linutronix.de, linux@weissschuh.net Cc: linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, kvm@vger.kernel.org, Ackerley Tng Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Set global current_test_metadata for each test run so other test frameworks can choose to access fields for the current test. This avoids having to pass _metadata down through functions so that code defined other functions can still use fields in _metadata. Test functions t->fn() are executed in series, so during the runtime of the test function, the function can count on current_test_metadata accurately being the metadata for the running test. Signed-off-by: Ackerley Tng --- tools/testing/selftests/kselftest_harness.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/tools/testing/selftests/kselftest_harness.h b/tools/testing/se= lftests/kselftest_harness.h index 68cde1556ac41..85d9b4527fca6 100644 --- a/tools/testing/selftests/kselftest_harness.h +++ b/tools/testing/selftests/kselftest_harness.h @@ -1151,6 +1151,8 @@ static bool test_enabled(int argc, char **argv, return !has_positive; } =20 +struct __test_metadata *current_test_metadata; + static void __run_test(struct __fixture_metadata *f, struct __fixture_variant_metadata *variant, struct __test_metadata *t) @@ -1182,7 +1184,9 @@ static void __run_test(struct __fixture_metadata *f, t->exit_code =3D KSFT_FAIL; } else if (child =3D=3D 0) { setpgrp(); + current_test_metadata =3D t; t->fn(t, variant); + current_test_metadata =3D NULL; _exit(t->exit_code); } else { t->pid =3D child; --=20 2.54.0.rc0.605.g598a273b03-goog From nobody Sat Jun 20 14:14:00 2026 Received: from mail-pj1-f73.google.com (mail-pj1-f73.google.com [209.85.216.73]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 8301431E857 for ; Tue, 14 Apr 2026 18:08:01 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.73 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776190082; cv=none; b=E0vxaP+xe1Ry/ddoDwSZQA9y8BuAomxlUcx9IVrC9U+TZ6QkotBWiAZw+YKOfBlVkPK+8LUk48EFszUis69IBHjXQh5b7ytdabisPpuarQVPtTLl0NwyMSnO4WWDbBzOjYrCqS5zxqakWcynXq7As/xdF7pFxExZ/EsXN5SLV/U= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776190082; c=relaxed/simple; bh=3eOaP1PjqwIMhC9h/73po0HRLNeVuCigZDPpl5LivDs=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=O7G+ZxGzEVGuVpCJpoJmnvR/Jr4Yqo04k5jKIor3Un5pJ+UG+BYhHRZro+3bg01MxNdALAupHt/vZO5JQKKpMNeDniJTNkzRT7wdT3QcRJqMR3rLI4RKpNTuVzO5tNRhMHJxbjQ3IqFhzMVST/UqhMSEoQPy8cyK4DmfBoDR/8M= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=pvW9ZfkH; arc=none smtp.client-ip=209.85.216.73 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="pvW9ZfkH" Received: by mail-pj1-f73.google.com with SMTP id 98e67ed59e1d1-35da1c703d1so6762078a91.1 for ; Tue, 14 Apr 2026 11:08:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776190081; x=1776794881; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=xRzVsTq7xtAKE6uuc9zkrMY4DjEcTQtxRmj4+xciBiE=; b=pvW9ZfkHzjQod1r8mbEYINaokPs+tD0x9mWNrUApygLP3VbttvwygHf0oqnZhhiJTF 62q+NBfCoIi19Fdc7mX9ag5I3cr75Redya1R0MBgLKjHB6PbeWmT2SMFFHzFs/g0OmLZ /EXJkRIxkzQI9h7hU16H/UkOA2HNOTcHrhcvtlx9zRXaLisDUzQtfHu5ZTPQdly98FOd jSA0yUsUANpyrY3A0QqqLgyiRk5dSXly/yA19CTVLJ1wf7xvV2vlNvNEX5Ndcc3wyMyT AzxwWNIR0+ZOzSyb3veJAGOkpIEV3CkgIKL3cDbDN9N/Av8tkroEfDbS0xH/7S1dYL3A A/wQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776190081; x=1776794881; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=xRzVsTq7xtAKE6uuc9zkrMY4DjEcTQtxRmj4+xciBiE=; b=Zm+DPt3seMWBByaBHbRGuGDd0CX26adRtp1kpa8RgciyFyqen4PmJyzdwO73yWDZCD x15EuqswP32rQaTUJcsW4xHuHEYpecEtgnmaHu2NF7NXc/kmGWqPVo3049m8HuN4jzMW m6BUHjNkx8BkJpIJ6A2HjFK1zEq1eZegkdic7ZMeLLPH/lGf8dkOzILiFaXP7GwYLOiO 4fZTx9LawAVH9uMa6PmwUMDZVv6jnqxbAt522T61lOTIjgOUpyKkoo5DUAjWQ7TH2PJM D+MEUMLTr+GID4cCAoJNDLu8CGE5kHluIS0yvf5OmMjaPWjO2C+nBKaIWzIlE5sPHJeG lOMg== X-Gm-Message-State: AOJu0Yya+TN3Rw8pg9VNdFja4ifbc9LnspDPGLWU0QjTAyT4kXSN0bEQ eVWLUcAU5WbsVZcXFcTOuW3CdstnY1WewHXA435WUn6N1Znw6UZcrNFEQ2nX/YKtfxhxISe/4LP FPyfhOA8/VpoMCDiFbS3jK3f4rg== X-Received: from pjbme4.prod.google.com ([2002:a17:90b:17c4:b0:35d:9eb5:1fe]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:4c10:b0:35f:bb33:d72c with SMTP id 98e67ed59e1d1-35fbb33da86mr7504039a91.4.1776190080795; Tue, 14 Apr 2026 11:08:00 -0700 (PDT) Date: Tue, 14 Apr 2026 11:07:50 -0700 In-Reply-To: <20260414-selftest-global-metadata-v1-0-fd223922bc57@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260414-selftest-global-metadata-v1-0-fd223922bc57@google.com> X-Developer-Key: i=ackerleytng@google.com; a=ed25519; pk=sAZDYXdm6Iz8FHitpHeFlCMXwabodTm7p8/3/8xUxuU= X-Developer-Signature: v=1; a=ed25519-sha256; t=1776190073; l=1745; i=ackerleytng@google.com; s=20260225; h=from:subject:message-id; bh=3eOaP1PjqwIMhC9h/73po0HRLNeVuCigZDPpl5LivDs=; b=7AFWyQ0DVP8h1/H+jFzj0I9KP+8m36LoteufdUTQT1V3Bt1TjzwWMjtAG3ddTNHhhqSOQAXCI xAoJNSVc15ZCct8aMwX/ex+6ZAs+81QmZuhps/YOEOAFMsC3uP9Fz3G X-Mailer: b4 0.14.3 Message-ID: <20260414-selftest-global-metadata-v1-3-fd223922bc57@google.com> Subject: [PATCH RFC 3/4] KVM: selftests: Do teardown from kselftest harness if kselftest_harness is used From: Ackerley Tng To: Kees Cook , Andy Lutomirski , Will Drewry , Shuah Khan , Paolo Bonzini , Sean Christopherson , thomas.weissschuh@linutronix.de, linux@weissschuh.net Cc: linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, kvm@vger.kernel.org, Ackerley Tng Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable If kselftest_harness is used, when an KVM selftest assertion fails, make sure to perform teardown (like kselftest_harness) before exiting. Provide a weak struct definition and default the pointer's value to NULL so KVM selftests that don't use kselftest_harness will still work as before. Signed-off-by: Ackerley Tng --- tools/testing/selftests/kvm/lib/assert.c | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/tools/testing/selftests/kvm/lib/assert.c b/tools/testing/selft= ests/kvm/lib/assert.c index b49690658c606..06970611317fd 100644 --- a/tools/testing/selftests/kvm/lib/assert.c +++ b/tools/testing/selftests/kvm/lib/assert.c @@ -9,6 +9,7 @@ #include #include =20 +#include "kselftest_harness_structs.h" #include "kselftest.h" =20 /* Dumps the current stack trace to stderr. */ @@ -63,6 +64,8 @@ static pid_t _gettid(void) return syscall(SYS_gettid); } =20 +struct __test_metadata *current_test_metadata __attribute__((weak)) =3D NU= LL; + void __attribute__((noinline)) test_assert(bool exp, const char *exp_str, const char *file, unsigned int line, const char *fmt, ...) @@ -89,6 +92,19 @@ test_assert(bool exp, const char *exp_str, print_skip("Access denied - Exiting"); exit(KSFT_SKIP); } + + /* + * When used with kselftest_harness, do teardown like + * __bail() does. KVM only has TEST_ASSERT (no EXPECT + * equivalent) and will definitely exit. + */ + if (current_test_metadata) { + struct __test_metadata *t =3D current_test_metadata; + + if (t->teardown_fn) + t->teardown_fn(false, t, t->self, t->variant); + } + exit(254); } =20 --=20 2.54.0.rc0.605.g598a273b03-goog From nobody Sat Jun 20 14:14:00 2026 Received: from mail-pj1-f74.google.com (mail-pj1-f74.google.com [209.85.216.74]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 45E7631F992 for ; Tue, 14 Apr 2026 18:08:03 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.216.74 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776190084; cv=none; b=khzxiJFo3wHAZqo/v56NyK2u+7nsx2FPrRPdTzbJSCLf1Z7/84dMjErJRZC2y6vHAHOoNBGJYoA8p2mWlN2ZZI0hB1m8fwsXp6iXPFrxJJo+16G/sOLc+pa1Im8XzTMd60bhkPjMGqv0SaX0WDd4KdYZZ0ddKS/2sYpUIp9Ye2I= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1776190084; c=relaxed/simple; bh=cCHZn38WYTfp/PfpDh6xqMgiUCYfrrR68b4aQ76CpZI=; h=Date:In-Reply-To:Mime-Version:References:Message-ID:Subject:From: To:Cc:Content-Type; b=n3V+Er+qn/yCdCxZEeqkyJd23txxfDMMDe4N1tt9n6AEGIvixOHOqLPskGePdBTvvEmgPmYbVHQTNlEXuAtoFb/PYoNuyGN8n+LvAP0aXiBCmC2k37etBsbRnelYdpHwuAScHytsAfGZxYQYZd7AvhlSk6H/v4Dxj4ae4cAXQOc= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b=F0rjWN5D; arc=none smtp.client-ip=209.85.216.74 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=google.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=flex--ackerleytng.bounces.google.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=google.com header.i=@google.com header.b="F0rjWN5D" Received: by mail-pj1-f74.google.com with SMTP id 98e67ed59e1d1-35dacc40f92so6098913a91.2 for ; Tue, 14 Apr 2026 11:08:03 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=20251104; t=1776190083; x=1776794883; darn=vger.kernel.org; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:from:to:cc:subject:date:message-id:reply-to; bh=o70ztLmmao+vAPqOCIv6vc9Rx7/bbrrSC8znt4hxDkc=; b=F0rjWN5DEpfi5t/0KqqIphWLFwvJJ2Kh3dXZ9fOSXj85yRftB8bWvg8ikYsuQKCNjz AMK0JNXEThWPI+a/rV7CDazIZnepjwZRxPPW8EdTJhPoRIaluyA7oAahwQuKk4rw/M5W DQpuH2NWhUq+3iQ3sC5O3RrBKiUz5UQaTow2PuXdMZ5yAl0RJ/Vv6g9//vDI2T1Ze77J uLtf/ZCJBHJhcvE/AsN6VDpt9JuRXB4pdU3mG3pA70PPgOuUCpOlg4hWgU/bA5AP81Gk nBV7TW6vFJ/FeqIVKPeuseHuTtjjowW+GtSoKRJOXP4bKQitwJ/6E3yVSTJnvjU8jHeO jtUw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1776190083; x=1776794883; h=cc:to:from:subject:message-id:references:mime-version:in-reply-to :date:x-gm-message-state:from:to:cc:subject:date:message-id:reply-to; bh=o70ztLmmao+vAPqOCIv6vc9Rx7/bbrrSC8znt4hxDkc=; b=oLM4se+fiiWn5rA7c1koLWS8jPfEuKb38KEHDR94HKZX0ZAac3mfajEtRxSqpTEDw4 LfwfbZNTft+sOfWuT4GnVMM7NXdtoeW+T+Hpx+sjajSkn1YBQbMLKcCHZ+Fmp25+MEpp W3BoH22c17X52idaoLNjwc13Axx8wSvDj1BJHiVvy5S7I87e0xSAQgJ2bceHeKXpuqTD oquaeDhsEChed9FYrWHqOZpaOEdluCvrUN1FgWJ+K9D+EWu6iDUUL6N/F5XpnLT2AJLP H6ogGJl9tMFh957eeqheZ9Hb2xFpa4YXxgC/uUNEL3KBARViALGeVcASeNXoU5F3Ma7P vFsg== X-Gm-Message-State: AOJu0YyupgRO50Cgs1PxPbzxRlwiFMbo5ADRKoSvCTl4viFGc0VV5NOs UncSc6aRyUz4OvV0lj34WHQs9IpU0qmSb6tJ75s7VT5oz4kCN6OB8RkPVB9CK1Rt8uMrLf3UqZ+ 2jNC2Vj6nWf5G4xGYH0K2sQPndQ== X-Received: from pjbpc11.prod.google.com ([2002:a17:90b:3b8b:b0:35f:bc0b:9e68]) (user=ackerleytng job=prod-delivery.src-stubby-dispatcher) by 2002:a17:90b:4a41:b0:35f:bf4b:c396 with SMTP id 98e67ed59e1d1-35fbf4bc5afmr5869715a91.1.1776190082419; Tue, 14 Apr 2026 11:08:02 -0700 (PDT) Date: Tue, 14 Apr 2026 11:07:51 -0700 In-Reply-To: <20260414-selftest-global-metadata-v1-0-fd223922bc57@google.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: Mime-Version: 1.0 References: <20260414-selftest-global-metadata-v1-0-fd223922bc57@google.com> X-Developer-Key: i=ackerleytng@google.com; a=ed25519; pk=sAZDYXdm6Iz8FHitpHeFlCMXwabodTm7p8/3/8xUxuU= X-Developer-Signature: v=1; a=ed25519-sha256; t=1776190073; l=2614; i=ackerleytng@google.com; s=20260225; h=from:subject:message-id; bh=cCHZn38WYTfp/PfpDh6xqMgiUCYfrrR68b4aQ76CpZI=; b=sSACYS9gSD/hjegQqS7FunUv1uUKDq73UvxPXisnBycuA3wBRv2EP5SYXkK8+6nVYNmc3wtqs 9STcGZMFigcBSlsymzSgW9FjARexZWfRpJl5Dsc2zKMPcQMypdK7twp X-Mailer: b4 0.14.3 Message-ID: <20260414-selftest-global-metadata-v1-4-fd223922bc57@google.com> Subject: [PATCH RFC 4/4] HACK: Show that the teardown function is called from KVM selftests From: Ackerley Tng To: Kees Cook , Andy Lutomirski , Will Drewry , Shuah Khan , Paolo Bonzini , Sean Christopherson , thomas.weissschuh@linutronix.de, linux@weissschuh.net Cc: linux-kernel@vger.kernel.org, linux-kselftest@vger.kernel.org, kvm@vger.kernel.org, Ackerley Tng Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Running the selftest tools/testing/selftests/kvm/kvm_test_harness_selftest gets me this: $ tools/testing/selftests/kvm/kvm_test_harness_selftest Random seed: 0x6b8b4567 TAP version 13 1..2 setup teardown ok 1 my_fixture.my_test_pass setup =3D=3D=3D=3D Test Assertion Failure =3D=3D=3D=3D kvm_test_harness_selftest.c:28: false pid=3D73044 tid=3D73044 errno=3D0 - Success 1 0x0000000000402c04: my_fixture_my_test_assert at kvm_test_harness_s= elftest.c:28 2 (inlined by) wrapper_my_fixture_my_test_assert at kvm_test_harness= _selftest.c:26 3 0x0000000000403497: __run_test at kselftest_harness.h:1185 4 0x0000000000402340: test_harness_run at kselftest_harness.h:1256 5 (inlined by) main at kvm_test_harness_selftest.c:33 6 0x000000000041ef10: __libc_start_call_main at libc-start.o:? 7 0x000000000042108c: __libc_start_main_impl at ??:? 8 0x00000000004026e0: _start at ??:? foobar teardown not ok 2 my_fixture.my_test_assert Signed-off-by: Ackerley Tng --- tools/testing/selftests/kvm/Makefile.kvm | 1 + .../selftests/kvm/kvm_test_harness_selftest.c | 34 ++++++++++++++++++= ++++ 2 files changed, 35 insertions(+) diff --git a/tools/testing/selftests/kvm/Makefile.kvm b/tools/testing/selft= ests/kvm/Makefile.kvm index 6471fa214a9f9..d32045f7d9396 100644 --- a/tools/testing/selftests/kvm/Makefile.kvm +++ b/tools/testing/selftests/kvm/Makefile.kvm @@ -64,6 +64,7 @@ TEST_GEN_PROGS_COMMON +=3D kvm_binary_stats_test TEST_GEN_PROGS_COMMON +=3D kvm_create_max_vcpus TEST_GEN_PROGS_COMMON +=3D kvm_page_table_test TEST_GEN_PROGS_COMMON +=3D set_memory_region_test +TEST_GEN_PROGS_COMMON +=3D kvm_test_harness_selftest =20 # Compiled test targets TEST_GEN_PROGS_x86 =3D $(TEST_GEN_PROGS_COMMON) diff --git a/tools/testing/selftests/kvm/kvm_test_harness_selftest.c b/tool= s/testing/selftests/kvm/kvm_test_harness_selftest.c new file mode 100644 index 0000000000000..36ce14226fdb7 --- /dev/null +++ b/tools/testing/selftests/kvm/kvm_test_harness_selftest.c @@ -0,0 +1,34 @@ +#include + +#include "kselftest_harness.h" +#include "test_util.h" + +FIXTURE(my_fixture) +{ + +}; + +FIXTURE_SETUP(my_fixture) +{ + pr_info("setup\n"); +} + +FIXTURE_TEARDOWN(my_fixture) +{ + pr_info("teardown\n"); +} + +TEST_F(my_fixture, my_test_pass) +{ + TEST_ASSERT(true, "foobar"); +} + +TEST_F(my_fixture, my_test_assert) +{ + TEST_ASSERT(false, "foobar"); +} + +int main(int argc, char **argv) +{ + return test_harness_run(argc, argv); +} --=20 2.54.0.rc0.605.g598a273b03-goog