From nobody Sat Jul 25 00:13:37 2026 Received: from mail-ot1-f42.google.com (mail-ot1-f42.google.com [209.85.210.42]) (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 8B1253B95E0 for ; Tue, 21 Jul 2026 20:57:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784667435; cv=none; b=IVj1jceSyyB0wXDUNfTYuFTd2jxKlZmxk+ql6UqYr9uYOgSMQ/1ZUqJyO72pliAwDO7hXngaKqSxu70gPJwERjAD/O08xlptoxdh36hqdMpFquLX3askkAs3RyYhcV8MCVt/zjhEgYnyIhtOy34hVkIh3lvdDAcCyHjpPKGP3Dg= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784667435; c=relaxed/simple; bh=NjeO3E3aXTlf0Rmaw0bPO/yZw26XHF8e4PdgxVbvO5s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=LV1o4d6AOok0YAdQI10osmXJNCuNarm2YWyo0pRghhgLi/dObgpqWKGA97cu/2C1NURKEMxyUh3qRQOKpZDS28yQs8oG95qe5TRuwbrAp18pQpgT34nn2iH99YmyiB3k0NXBo0KA9jOBhb8j46SDjk32ZOP+yNa11OUx8Nb5884= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=nUykYl3Q; arc=none smtp.client-ip=209.85.210.42 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="nUykYl3Q" Received: by mail-ot1-f42.google.com with SMTP id 46e09a7af769-7eb6573bd52so6353492a34.3 for ; Tue, 21 Jul 2026 13:57:13 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784667432; x=1785272232; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=pgVpgKXUNJtrWSKTwQbIOxGGmQfqameHK1lD3QBhDhA=; b=nUykYl3QoiDu5jbOvn3qCaiKUlwmTqW4BoVrYO9Yhf07IFuXVp3JRaHf2BG+pLQoVN bqw4M0HwbYKz1cnjGgYXNvfdoCiryT27iJA/qA6gYpsEDwB7C03tQ1Rz+gLxFYTR8Bs2 jh6qkca6JXZj0sOY2s28+UAT2A6z2tTf2PxB1+wvuPl/bdLhCU/OC4occQR+UhrGtMiY KzB021Dr2nOQeLt/D6v1VFw6L/AR7J6lo9LQv9c9Erv0y71mPNCAbSi8W/NLjyABJizk E513I/oTUWt+b9G097P0lGjx9tC5xMtWNmCt90m9hZeAQCFlmJeFODnd5gdgSiGYkOvU yOhQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784667432; x=1785272232; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=pgVpgKXUNJtrWSKTwQbIOxGGmQfqameHK1lD3QBhDhA=; b=es0U8kxslYqmTON4LfAgqeU9qMHtkgID9QfR+hJO3N8sX+4jcH6mAoqN79lP+yfdDP S0D6v7vGT5RGMR0IWVhLFqXbsTR/CZB/4QtV8bKMtkTR6A8jLmjNl1nkKo1HVBjoFMJ+ UZa9ZIjf1OBu/9Wyl2uL40QaEZszM25MojJKqy1bpQgHUkHPtYhbinuOxmUNCzKzmgZL pRp7dxkYczlmi/a0IzY7LGdACNLbqSmi0hUg8BOtw2gQVeJ+xwqVeOD+1zkxulY2LKdC lzN2cMGBV2aME86bZ6RkF4p424PJrFCDkfQ8NfDnnAXZ4nCE34Mn5SbhYGUpJzOfOu1x MfkA== X-Gm-Message-State: AOJu0YxgdURPKyHPvDQZ1XXDUZz53DWjnskAiTcvQv42bZX/8Jq45lMr lV8lMiTeLSwYxSb7VVPEzERBn3w6TYU+4IMZcRvPHfltp/jN6a+4oE5K X-Gm-Gg: AfdE7cnYpfnBs1s9R/FpbB2SXz6uzDtgLugenS/9Az2Nsb4NQ/Mu7VbCnXkcMhM6GsK /xHFZ7H96qilCShv0EyEYE57FtOyKlM7OAtK02WTJ3Zh7KqV5u892bCoILvOUS85/PJxcSMUhRG dXnEBJdoRpAD1ko5boF7twzmuqVGIIQJ8mNZwd0IS1wwv9ONgXoViOudSeRkikCyf8iC5hpLOEF K5t5WVnPIfgbP7yWF0i4sIRlVJ0512122uUSKSdueJX40AIPR5pVfPK1z06Z2ijmoUbdMuRrotK TCp0LjOe8siKEXQpEyr7wBdCN6PRmlGTTiZO8zz7WFXrvmfjfygEVwxvlugpQM9U2AaE8bMUmVU m3YU+f+yv7kmBvLGOrJqp0ETvAfcrPu9rfq38LJdKKjjUl248uC/1fmCmZSsFE2yfKqO9VAPu1J 5EL0ncmdURBfSeIRmDZ7fTkkjwpBbmaUZEU7Le3Q3PMkFU/KrIpph4QMbjuH3dY5T8byYV69Y0e k2fB8gYm+W3OaFPKcJYG2lhsQ== X-Received: by 2002:a05:6830:6518:b0:7eb:21d:70b9 with SMTP id 46e09a7af769-7eda0e701bamr9566145a34.22.1784667432329; Tue, 21 Jul 2026 13:57:12 -0700 (PDT) Received: from [192.168.0.245] (c-98-38-17-99.hsd1.co.comcast.net. [98.38.17.99]) by smtp.googlemail.com with ESMTPSA id 46e09a7af769-7edaf94a494sm11134501a34.13.2026.07.21.13.57.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 13:57:11 -0700 (PDT) From: Jim Cromie Date: Tue, 21 Jul 2026 14:56:50 -0600 Subject: [PATCH v7 01/29] params: fix a pr_debug(" %p ") use - already in MM-* Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260721-dd-maint-2-v7-1-010fbe73b311@gmail.com> References: <20260721-dd-maint-2-v7-0-010fbe73b311@gmail.com> In-Reply-To: <20260721-dd-maint-2-v7-0-010fbe73b311@gmail.com> To: Andrew Morton , Jason Baron , Greg Kroah-Hartman , Shuah Khan , Simona Vetter , Luis Chamberlain , Petr Pavlu Cc: linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arch@vger.kernel.org, linux-modules@vger.kernel.org, linux-kselftest@vger.kernel.org, Jim Cromie , stable@vger.kernel.org X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1784667429; l=1125; i=jim.cromie@gmail.com; s=20260203; h=from:subject:message-id; bh=NjeO3E3aXTlf0Rmaw0bPO/yZw26XHF8e4PdgxVbvO5s=; b=JnG4Hd6pByV6cBcRHCdIJRICgp5wUjzEQUOylmvD27efVdhP0Cn/ay5LhcR7goGzLrNO9vFYm yTpsgAAsjCpAWnQCPpIRZXIEjFbutFhwOQKtI2azaOPhH5Ccc68vKuf X-Developer-Key: i=jim.cromie@gmail.com; a=ed25519; pk=C6E5ODlPQo7ZBynATXH9wg7K6HxP0pIXyf4s38Qw0XE= NB: this is already in mm, but I need it in this patchset because kernel/params is subjected to testing by the selftest script, and the test depends upon its stability. kernel/params.c has a pr_debug() which prints the address of a parameter setter function, this is not legitimately useful. Since the value is known and useful to the user, print that instead. Cc: stable@vger.kernel.org Signed-off-by: Jim Cromie --- kernel/params.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/kernel/params.c b/kernel/params.c index a668863a4bb6..5c8a05921e28 100644 --- a/kernel/params.c +++ b/kernel/params.c @@ -136,8 +136,8 @@ static int parse_one(char *param, if (!val && !(params[i].ops->flags & KERNEL_PARAM_OPS_FL_NOARG)) return -EINVAL; - pr_debug("handling %s with %p\n", param, - params[i].ops->set); + pr_debug("handling %s with value '%s'\n", param, + val ? val : "no-arg"); kernel_param_lock(params[i].mod); if (param_check_unsafe(¶ms[i])) err =3D params[i].ops->set(val, ¶ms[i]); --=20 2.55.0 From nobody Sat Jul 25 00:13:37 2026 Received: from mail-ot1-f46.google.com (mail-ot1-f46.google.com [209.85.210.46]) (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 69894415F12 for ; Tue, 21 Jul 2026 20:57:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784667441; cv=none; b=gsqvFzMl1+RMOmrlP3hms7N2CwIwkQ8DhNQujTZNYhKrRaWuMHm243Rwc1VMrGRUb8wIfaxEnL/qWNShDzJn2pxx8PAA7f4AJ7pVwaAfq2PcO1CQUqmeG2xwopVhQqFht0CRFtuW8IQl4rf2GmNAB9v1MLzrE0oWBxnu/q6n6io= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784667441; c=relaxed/simple; bh=IFmT1K0aYsBk0y1wHZTyA/TzgN5RNbWFj8VGiyVMTHE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=AsOQ+KykKXvLBdcpFahYUzFzfEXVTOHzhAhC2EmkM1AskTgnez2pqgUSY0E1n3DbdsmjhKVfrtlqZdaWJqxodi9UVi4qP186LZmD1WpShRXgVvYP+4xzboMMYTti5zxtF7O+uikMznB2KCHC/YAFxRZmRipbWo3ZZTiQzsVlgEE= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com; spf=pass smtp.mailfrom=gmail.com; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b=ZXLWsfWV; arc=none smtp.client-ip=209.85.210.46 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=gmail.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=gmail.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com header.b="ZXLWsfWV" Received: by mail-ot1-f46.google.com with SMTP id 46e09a7af769-7eb1dc6bd53so6587414a34.2 for ; Tue, 21 Jul 2026 13:57:15 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1784667434; x=1785272234; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=xkhsq9NkC/hHTDIK98lXqvKIn9Pks2kt3Kgfo8nEUZk=; b=ZXLWsfWVcV0q7vSE3BsQgf7OpHatSbL25AMqCOwlTU+Vp4sXe5uvgLoHjHyjQnWUKp 3vp69eD2o/oT1XmWKfjaLwOKMYeJB2rJ2kLLvA8SFJ5TA+q3V/mTbxnfWxmvO2ybJ7j3 EtSJM72Ib6wsWIT8NVwQxj0PX0ENhqQb9pH8TRB0JDfew4dHSG1QwZ0JXwdlq6spUE4p IpIulcawwHJz1/iUo4CJu6JYfFASLnogeKRgyY8/ztGg7gPiwb1eX7SC+4rdcwQJGAlm 8LA2R6uY2d+/NO/nApe1HkDbL/XwzbLQryyeErBZQaCjEujopraG9fYdD/GReEDwBVQs 8t/w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784667434; x=1785272234; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :content-type:mime-version:subject:date:from:x-gm-gg :x-gm-message-state:from:to:cc:subject:date:message-id:reply-to :content-type; bh=xkhsq9NkC/hHTDIK98lXqvKIn9Pks2kt3Kgfo8nEUZk=; b=dd7hR6t4PRwex7K3MKmdrVQ6JvCRFwxF5dkMqPqLw8lpsco/GGVesdv6WZSdCKVCop k79GSVIhTxmsRk1Zn7nXutekD++DaD7lbRAHvgiJLC0PHWAGhx6+B2x1zmg4RnP0uqst yo2EknheWjXN4CZfgUq+Jp20EtuvnypxLNXFRtbSJukL4KAh1UAB+KRLLbtkkphf9rMR YKNan9kdRHFhiiGJMI51sKbu/2BgBMfAFADz2jKOoGgh872J5eitrgXGQMMBv5GEAXKq iXgcfKnEEdn6yWh9kARm6VGHjvlrrYwJQRLhd1GPsZo/o/QwMi0Mks060FeCc8ft/zTH htUA== X-Gm-Message-State: AOJu0YyVLNgFJ7LhCLlqfWdnwvav2tAgmaIWvJ0dpXbW9OFV4uHK21P3 yPhSdE26nKNmMpf6faY+EKux8IgPShcRqc0H0NnhNRTbHuWxOA/1fodB X-Gm-Gg: AfdE7ckwCXlffZgcRSGOAB2sycnSk/BIgWeLhVSLe7uFaYFHErOCqrPpP+tcwWOFgv9 e9HZfO720XC2iZbPs83qOaZB/riAN583hI2CUgVj39rs87bvjc0Xg8WQLIiK5kOlRV0UhkZeO52 mwsrrSrYAIkKmodDElQkcpb5IBw+CIPALWH9bj2Nj584bvSkIg4QrAeWOTtrZm+yINWcVejQRUE Xhw8/9iLbCIrio1+bKe7iXZZV38sniP6X/RDJgOZdgnutdApuLMNEuoXIf8Ij5rb6h4cIsD7yo6 orKrJSZWEc/UlM3igeFKPCTsSz5ewqtpskhJHbhxTeItJozUM21VMPm3dlfYH1rrLOeryLKzwSK ABtOlDKrrNoH4b57+B2IGyZOaxwwbfy22SPtrA3y71uLPBKD0ya2fGBw0wJxBcWcr4uRBdWlLK7 h3qfxwvBBYbLcco2VRw71GlEg/F2qfTTebjKZdORLKsxUrpOVP8fnOV0mG/6gOf+oPYVqYjPcBC O8n6kwXVkzehg6/KLhMWpCqB6az7sBeGiqw X-Received: by 2002:a05:6830:2693:b0:7e9:db7f:49a2 with SMTP id 46e09a7af769-7eda0963d14mr10863781a34.19.1784667433697; Tue, 21 Jul 2026 13:57:13 -0700 (PDT) Received: from [192.168.0.245] (c-98-38-17-99.hsd1.co.comcast.net. [98.38.17.99]) by smtp.googlemail.com with ESMTPSA id 46e09a7af769-7edaf94a494sm11134501a34.13.2026.07.21.13.57.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 21 Jul 2026 13:57:13 -0700 (PDT) From: Jim Cromie Date: Tue, 21 Jul 2026 14:56:51 -0600 Subject: [PATCH v7 02/29] selftests/dyndbg: Add kselftest script to verify dynamic-debug Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20260721-dd-maint-2-v7-2-010fbe73b311@gmail.com> References: <20260721-dd-maint-2-v7-0-010fbe73b311@gmail.com> In-Reply-To: <20260721-dd-maint-2-v7-0-010fbe73b311@gmail.com> To: Andrew Morton , Jason Baron , Greg Kroah-Hartman , Shuah Khan , Simona Vetter , Luis Chamberlain , Petr Pavlu Cc: linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, dri-devel@lists.freedesktop.org, linux-arch@vger.kernel.org, linux-modules@vger.kernel.org, linux-kselftest@vger.kernel.org, Jim Cromie X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1784667429; l=63443; i=jim.cromie@gmail.com; s=20260203; h=from:subject:message-id; bh=IFmT1K0aYsBk0y1wHZTyA/TzgN5RNbWFj8VGiyVMTHE=; b=EFRP2g251a2qXHAmkTOFMC13PptqqE/CILNDwa1erpy3rNiCVwomri9lOyhIS2Lfn2UB98Ikp 7dzpJrX/iQACv3q9Q/v1cv7zs+fDNpiZklDbNgPpdWIjMl5H+etmcjh X-Developer-Key: i=jim.cromie@gmail.com; a=ed25519; pk=C6E5ODlPQo7ZBynATXH9wg7K6HxP0pIXyf4s38Qw0XE= Add a kselftest script to attempt full validation of dynamic-debug behavior. The script tests query grammar as documented, responses to bad input, and proper/expected effects on both the control-file display of current state, and on pr_debug logging behavior. NOTE: This script was finished last, then rebased to front; It gives an easy functional test thru the series, not just a does-it-boot. It preserves but disables some tests to pass as a baseline; there are 3 Basics: FT_grammar_ok(), FT_grammar_errs(), FT_basic_queries(). The Canonical Test: A naive dyndbg test might look like: echo "module main +mfp" > /proc/dynamic_debug/control local ct=3D$(grep -c " =3Dpmf " /proc/dynamic_debug/control) (( $ct =3D=3D $expected)) || FAIL But you'll find that you've changed 4 different modules, and your count is off. Ad-hoc testing is hard, and fundamentally trades test clarity against thoroughness, precision and brittleness. Here, the canonical test tries harder: 1. Observe the prior dyndbg state-of-interest. 2. Send $cmd to change state-of-interest. a: echo $cmd > control b: echo 1 > "/sys/module/test_dynamic_debug/parameters/do_classes" 3. Observe the results, in control-file or dmesg The key here is 'observe' means `md5sum $state-of-interest`. This gives us total "checksum" precision, and with a little care, $state-of-interest solves the brittleness. If a test should cause logging: 1. Sends a unique 'START_of_label' message directly to syslog/dmesg. 2. Sends the command or parameter configuration, as in b: above. 3. Sends a unique 'END_of_label' message directly to syslog/dmesg. 4. read dmesg, extract START..END This bookended logging allows the script to isolate and reliably extract the precise dmesg/syslog slice between the markers, and fingerprint the state-of-interest cryptographically. Its not truly isolated from busy-kernel messages, unless its a test-vm. Comprehensive Feature Test (FT_*) Script Mapping: The Feature Test (FT_*) functions test major aspects of dynamic-debug, they're in 3 categories: 1: Zero-Dependency Grammar & Core Parser Tests These tests throw legal & illegal commands at the >control file, but don't attempt to select any real pr_debug callsite. * FT_grammar_ok: Verifies successful query grammar parses (exact line, open line range, closed line range, and colon-delimited file:line/file:func syntax) using side-effect-free empty placeholder flags ('+_'). * FT_grammar_errs: Verifies core query parser error-handling and EINVAL paths across multiple verbosity levels (0..3), catching even minor message drift. 2: Built-in Feature & Name Equivalence Tests (Kernel Core) These tests verify the core features compiled directly into the kernel image. They validate "[main]" vs "[init/main]" resolution added recently. * FT_basic_queries: Verifies basic, direct queries (module, func, format, and clear flags '=3D_') targeting the builtin kernel/params engine. These tests are disabled until KBUILD_MODFILE: * FT_path_module_queries: Verifies path-based and wildcard module query controls (such as module 'init/main', module '*/main') targeting builtin startup callsites. This specifically validates the resolution of the old 'module main' ambiguity (which selects 5-6 different built-in modules). * FT_hyphen_underscore: Verifies literal name versus kbasename hyphen/underscore equivalence (e.g., kvm_intel vs. kvm-intel), proving that both queries select identical ranges-of-interest. This validates recent kernel fixes establishing name-normalization equivalence inside the query engine, ensuring that character substitutions work as they do in modprobe. * FT_comma_terminators: Verifies dynamic-debug's comma-to-space query tokenization and multi-query splitting on '@' delimiters. 3: Tests which require test_dynamic_debug These tests verify complex classmap configurations, multi-module setups, and load-time/runtime parameter callback equivalence. * FT_test_classes: Verifies classmap-based query enablers and class configurations on a modular target, proving dynamic runtime class configurations via /proc/dynamic_debug/control. * FT_classmap_inheritance: Verifies multi-module classmap propagation and class inheritance checks between a parent and submodule sharing a classmap. This actively demonstrates a key systems distinction: one-time bare class queries (dyndbg=3Dclass...) do NOT inherit at load-time, whereas classmap module parameters (p_disjoint_bits, p_level_num) are persistent and successfully propagate state to submodules upon loading. These tests recapitulate the scenario where classmaps-v1 [1] hit regressions and was marked BROKEN. * FT_modprobe_w_param: Verifies load-time parameter callback initialization (via modprobe $param=3D$val) and subsequent runtime sysfs-write unsetting callbacks sequentially, by looping over verbose levels, and varying (p_disjoint_bits, p_level_num) and (do_classes, do_bulk). NB: within each FT_, tests are numbered and cataloged. This isolates each FT_* test's sequence numbers from each other. Main Test Runner (dyndbg_selftest.sh) Support Functions: * ddcmd("$query", ["$range"], ["$action"]): The core test primitive. Writes a query string to the control file. - ["$range"]: Optional slice filter pattern (triggers transition verification R1 on non-empty values). - ["$action"]: Expected outcome action ('pass' default, 'fail' asserts return code 1 and logs dmesg, 'log' asserts 0 and logs dmesg). * ddcmd_err("$query"): Semantic error query wrapper. Invokes ddcmd expected to fail. * ddcmd_load("$query", "$range", "$param_path", "$val"): Workload-driven syslog verification helper. - "$param_path": Sysfs parameter path of workload trigger. - "$val": Integer trigger value written to workload param. * verify_modprobe_param_logging("$param", "$val", "$tag"): Dynamic parameter test primitive. Coordinates load-time modprobe and runtime sysfs unsetting in a single sequence. - "$param": Module parameter name to configure at load-time. - "$val": Initial value or composite bitmask/level integer. - "$tag": Suffix used to construct the dmesg golden record label. * slice_and_hash_ddctrl("$grep_pattern"): Local control-file wrapper. * ifrmmod("$module"): Defensive module unloader. * handle_exit_code("$lineno", "$func", "$exit_code", ["$expected_code"]): Core exit code verifier. - "$lineno": Caller line number ($BASH_LINENO). - "$func": Caller function name ($FUNCNAME). - ["$expected_code"]: Expected exit code, default 0. Verification Library (syslog_hash_validation.sh) Support Functions: * log_start() / log_stop(): Slicing syslog capture bookends. Marks the start and end of a stimulus-triggered test execution by writing tags to /dev/kmsg. * rdi_resolve_label(): Active sequence resolver. Leverages Bash call-stack reflection (FUNCNAME) to determine active FT_ test functions and automatically re-index sequence numbers. * slice_by_grep("$pattern", ["$file"]): Text slice extractor. Narrows the scope of a captured log or file. - : Regex pattern to narrow the capture scope. - [file_path]: Target file path to slice (defaults to dmesg). * verify_file_slice(, [file_path], [extra_args]): Standard file transition verifier. Captures a state slice, auto- resolves the label, and verifies its cryptographic hash. - : Regex pattern defining the capture scope. - [file_path]: Target file to slice, defaulting to control-file. - [extra_args]: Optional tag appended to the golden record. * verify_dmesg_slice(