From nobody Sun Jun 14 01:34:53 2026 Received: from mail-ot1-f52.google.com (mail-ot1-f52.google.com [209.85.210.52]) (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 E5ECE30E834 for ; Mon, 4 May 2026 20:45:17 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927519; cv=none; b=WgojuC9TYLarXYMgXcfjBmMEqMhVAbXr4ahHYroFwTf777VCUua+NCRzDfnfGuxskmFjN111s8Y2/SNL/eB204UGM3aMLc1wgbXyBriyWjPElJA1XlPqa5AQk+3SsD4uNMOavGhGkEwSisaXC9eBDNuHLkiSZ+1E29hAqvAksBs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927519; c=relaxed/simple; bh=j5GAqgH1tDYgb6kzTcUFN1yLPWoPsRlOPzCxW4/MNeE=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ZIKgxzDBa/4YC2/iUooAAwcuFjXQn1PcoDELSisl9qDzFhUl5CdYs7ZFNQwVBBSIhuEkjYTfjBUT/p1ggHua7KR4lEvUwkFiinTdx8Ea3eRFGJQYIjJiGzpoGsIRgPUyH7LlAeEgLEalZOLvNrR07Cj5wh7OpGBBU+Waj9KryPI= 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=mK1JaAOi; arc=none smtp.client-ip=209.85.210.52 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="mK1JaAOi" Received: by mail-ot1-f52.google.com with SMTP id 46e09a7af769-7dca5f64e86so3612778a34.0 for ; Mon, 04 May 2026 13:45:17 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777927517; x=1778532317; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=96+CnjisvPUb0CWRbReGwZxDAY9Evf8qYjQBtyb4fJA=; b=mK1JaAOiU0MxiV25TY/KRw94MLAuyKqhzAZdISaXe+7cuGgQLiSJ8bQ6RhwS0UUg4P UtLN22u0FvCWbPrd79BtrI9oSob296I08tj/SbWlMUR+1fFH8++UBclG7vez2+e8h44H x5y57abi9R1CIZr6izzrqLAIwy+zWMJwqOWA7RpRBJCUoQqICC1jyoGId6AYl1uxoZj0 CIF69B7XaXotLp3GI1EKY2CXe+nV/7ole/usj6jWyrPEO5qMA3n9fpaizAY01tOLjNGb Ry+KXjGUGHKF9kNhrvPkw65tUhm+eGDEVtS9dTgdgwGXw+h/xF1wqb8wC93AAq2qqEi5 CLmw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777927517; x=1778532317; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=96+CnjisvPUb0CWRbReGwZxDAY9Evf8qYjQBtyb4fJA=; b=iB9YVgTb1LkMfpLrKxO8+Mz5RfJCGBh584t5KIaFh8k3MIx1blPe6OiPXsoUfi/th9 1Ct7meMOF3o3m98Z+Nm+AxPyb/hMw1djluE1fyRircpSVfSK1mfHhe0I7XwOwvzn/85M /V+VeIJsRmkpcqaIykmVN4sqFQ+CR414ozaVSJOKlsZuLg+e7A5SkDC5Fj8rKuiHwQcP Z9bSSc2Us+arury39I98Uw+C4VKhK3K8EdgQYbqx877i+bj8TzVfTj2xiiExBKCB+PrD kEafZShkKMe4bWmWFuntYHpCffH4/JeR0Upm5MPYvZqdiLZn34JSsTrq94B0xpQgbqNX hbrQ== X-Gm-Message-State: AOJu0YxN0GI2RSpkBqNKRaoEvWgYvjX6wiSGytXlj7lh+RG+c53o1onz 0R1rKUv5i1TsEheIwTudXXPjcwNwoPAEP8pJwxJUWQUE3yrD6UzHAZLAO5fIkeG/ X-Gm-Gg: AeBDies+gMYLicOm4n7mFhhEfB4PtwCRC4Y5imV6vjDCFbwHo1OWNW8qrADPhzEbcgA UbeE/FGTuiDt3uPg/z5zlX+7P3Adv4uqPXDmF3tvggXgkxHUvACqkso2QRDMPwfiKvRiOm90kgk sqKNEY1p37EW49LyusSLyiWRRQtxGhx71rLMtGAHl8Ol0+LGp9IciyYEW3IyRqnh5Ep77wEtvmw UVlLn+DQrOABVnNTQu96u/KTM23/cq7hm4CAnhFC9KpBb7ZYkqahs0axDTnLtuMQ2Ajx/VBuY0x r07k/NXkCpdrXgNSCXIGNJ7BY77Ny8xCLUTTDRvPqWSNpP7r3KYj6LGjzRPunAxKWk1IEAMEyd6 hlK4LIsXNry5EEwl2iYO2uOxsuMXEb632uFFWJcgskljKiN8mde22lQ2rkGbcxEFQY9HsR66HYp +RIkOQQ+I3dfOyBxhCQaOk9e1u2yiKgaKqiliY1LkM8WWzvUVifAB7UifNeO+KyK/j9qg9xQ26 X-Received: by 2002:a05:6820:2109:b0:696:25d4:1e62 with SMTP id 006d021491bc7-696979cc0eamr5130131eaf.2.1777927516839; Mon, 04 May 2026 13:45:16 -0700 (PDT) Received: from [100.82.231.29] (c-98-38-17-99.hsd1.co.comcast.net. [98.38.17.99]) by smtp.googlemail.com with ESMTPSA id 006d021491bc7-69689266bacsm7144713eaf.0.2026.05.04.13.45.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 13:45:16 -0700 (PDT) From: Jim Cromie Date: Mon, 04 May 2026 14:45:07 -0600 Subject: [PATCH 01/17] dyndbg: factor ddebug_match_desc out from ddebug_change 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: <20260504-dd-cleanups-2-v1-1-6fdd24040642@gmail.com> References: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> In-Reply-To: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> To: Andrew Morton , Jason Baron , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , Shuah Khan , Louis Chauvet Cc: linux-kernel@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=1777927513; l=4346; i=jim.cromie@gmail.com; s=20260203; h=from:subject:message-id; bh=j5GAqgH1tDYgb6kzTcUFN1yLPWoPsRlOPzCxW4/MNeE=; b=TnKzQJCtvtPa2kyeezQXWnc8ZQbBfl1uUt7zNXn5K9tUjUSqOj0Wvdj5kmmpddLZTQIFEXCl7 iAV5ZJDwtMCAdTNqcnRnZqjq9kw9lSXIsIJAcZsj1AREKUQ/Bw/NuGf X-Developer-Key: i=jim.cromie@gmail.com; a=ed25519; pk=C6E5ODlPQo7ZBynATXH9wg7K6HxP0pIXyf4s38Qw0XE= ddebug_change() is a big (~100 lines) function with a nested for loop. The outer loop walks the per-module ddebug_tables list, and does module stuff: it filters on a query's "module FOO*" and "class BAR", failures here skip the entire inner loop. The inner loop (60 lines) scans a module's descriptors. It starts with a long block of filters on function, line, format, and the validated "BAR" class (or the legacy/_DPRINTK_CLASS_DFLT). These filters "continue" past pr_debugs that don't match the query criteria, before it falls through the code below that counts matches, then adjusts the flags and static-keys. This is unnecessarily hard to think about. So move the per-descriptor filter-block into a boolean function: ddebug_match_desc(desc), and change each "continue" to "return false". This puts a clear interface in place, so any future changes are either inside, outside, or across this interface. also fix checkpatch complaints about spaces and braces. Reviewed-by: Louis Chauvet Signed-off-by: Jim Cromie --- lib/dynamic_debug.c | 83 ++++++++++++++++++++++++++++++-------------------= ---- 1 file changed, 47 insertions(+), 36 deletions(-) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 18a71a9108d3..6b1e983cfedc 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -172,6 +172,52 @@ static struct ddebug_class_map *ddebug_find_valid_clas= s(struct ddebug_table cons * callsites, normally the same as number of changes. If verbose, * logs the changes. Takes ddebug_lock. */ +static bool ddebug_match_desc(const struct ddebug_query *query, + struct _ddebug *dp, + int valid_class) +{ + /* match site against query-class */ + if (dp->class_id !=3D valid_class) + return false; + + /* match against the source filename */ + if (query->filename && + !match_wildcard(query->filename, dp->filename) && + !match_wildcard(query->filename, + kbasename(dp->filename)) && + !match_wildcard(query->filename, + trim_prefix(dp->filename))) + return false; + + /* match against the function */ + if (query->function && + !match_wildcard(query->function, dp->function)) + return false; + + /* match against the format */ + if (query->format) { + if (*query->format =3D=3D '^') { + char *p; + /* anchored search. match must be at beginning */ + p =3D strstr(dp->format, query->format + 1); + if (p !=3D dp->format) + return false; + } else if (!strstr(dp->format, query->format)) { + return false; + } + } + + /* match against the line number range */ + if (query->first_lineno && + dp->lineno < query->first_lineno) + return false; + if (query->last_lineno && + dp->lineno > query->last_lineno) + return false; + + return true; +} + static int ddebug_change(const struct ddebug_query *query, struct flag_settings *modifiers) { @@ -204,42 +250,7 @@ static int ddebug_change(const struct ddebug_query *qu= ery, for (i =3D 0; i < dt->num_ddebugs; i++) { struct _ddebug *dp =3D &dt->ddebugs[i]; =20 - /* match site against query-class */ - if (dp->class_id !=3D valid_class) - continue; - - /* match against the source filename */ - if (query->filename && - !match_wildcard(query->filename, dp->filename) && - !match_wildcard(query->filename, - kbasename(dp->filename)) && - !match_wildcard(query->filename, - trim_prefix(dp->filename))) - continue; - - /* match against the function */ - if (query->function && - !match_wildcard(query->function, dp->function)) - continue; - - /* match against the format */ - if (query->format) { - if (*query->format =3D=3D '^') { - char *p; - /* anchored search. match must be at beginning */ - p =3D strstr(dp->format, query->format+1); - if (p !=3D dp->format) - continue; - } else if (!strstr(dp->format, query->format)) - continue; - } - - /* match against the line number range */ - if (query->first_lineno && - dp->lineno < query->first_lineno) - continue; - if (query->last_lineno && - dp->lineno > query->last_lineno) + if (!ddebug_match_desc(query, dp, valid_class)) continue; =20 nfound++; --=20 2.54.0 From nobody Sun Jun 14 01:34:53 2026 Received: from mail-oo1-f50.google.com (mail-oo1-f50.google.com [209.85.161.50]) (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 857423176EE for ; Mon, 4 May 2026 20:45:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927521; cv=none; b=l4h831zJ4HD2NXsuWcZI83EUUj36B85AyTIYLsuYr2IdOHdeb2lcfLiWCIBht1RSK3vSmewWVulm4qT+Qar0/UKuXJs4Uuzzi6w+ZcU8VktbNB3cjyuqxnnLBGCfbRgVNZoF7k3PYdj6SNjlKX09DhN9PCgD9X7valGlzQ3eZ1k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927521; c=relaxed/simple; bh=ifMjdOv9s5iBVhpB9m4hzA/NaIvmwyfWNqe78zgQbz8=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=mwN6bGC+4Q8a3BtvLa8ag6ROAX+bCf9yMvkUXPf5J+R3H3xWWpDfWc2X9F4BjxPMyCC0Eo1zz4jw4rumzvjM0zaz6AG9VlY7VuA0xdp8OPwvPYfP+6BosxLXh/I2dAb0f3UsWM2apOqiBk0lxqGkxYVxnWPg+4l/K0Xt30sH+uY= 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=NiFAHWxe; arc=none smtp.client-ip=209.85.161.50 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="NiFAHWxe" Received: by mail-oo1-f50.google.com with SMTP id 006d021491bc7-6841e6a5e51so2359566eaf.3 for ; Mon, 04 May 2026 13:45:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777927518; x=1778532318; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=x+DQN3gI8cDIPCl5342KuGjmmS7ZUCk1xMik8PQu+to=; b=NiFAHWxeS3aN4YXnfPFFoPQJx7YSj9JZweBvlW8EMMshIRrOGQwOLwkQhhqAlgnyVf VX2ozIKk+bbFLwjpHX4MvX9SvQHjJp2poawhUvwfdM/ftkdF0F+/6es2xcVL2P4lh+Gs HQkEKZceOuPikzRXBZ/1XwJz616ccsEB8KI+dJExKt1zkC+VmLuab+8dPi4dCO9RsSt8 LNsrDE82HdIR0QBIaAQEswr1DjullBY40ZVRafAXPhAEFz5gLHCaXwLmYxdiGp5QlDTm yNtJlUPBaBss2LbJQeMMR2qQtA7gwRKKWBaEUsQrPBcjGhEPwSL066eQPl9Tsf74nXUL TH+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777927518; x=1778532318; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=x+DQN3gI8cDIPCl5342KuGjmmS7ZUCk1xMik8PQu+to=; b=a1Bhkg1hjpGlLPJo6V5jXybYhnB2alM7bCXktvPKfh/nxSjrHouea1Xi6YKp62BM2x kLgX/eYHOhG6XT/Q7/gdfDErrq5LII80ogPGAfdZBbrz1BzQKFsByniW5my3LhqhNpwG mWAitBWrBYUzAaF4q0lRCKOxjl9RgG6h67TCcpBfKm4HDaNc+OSAy7nvrWYpjLRLKgbg KsfwrskNqx95j1rTHNXhR1CiMM84YSxcO3fs//2cB3KXkNtBPGTNyQoD6dqNxgdK7zDF L6nYg0E4kV466kBEtLacPCCGGVkKADWz2Y7vtFCrpFCrlpKtvs88HsFQX6yGQdALzyVa kl7A== X-Gm-Message-State: AOJu0YyWh0jhyRqqd+Iw4GFZLN3ys3pa+/38skP+C1EjJV6Ec2ohMCxF ZeNzbhqNsdRo0e9wvopT8ueJ6iWaMNEADaFEYLTq5vedaFoFl3sg5SX8 X-Gm-Gg: AeBDieu2kj+wboDY0ubqB15EJfp9k2SocIMIkdcLr478FRsqfYB+NV7k3rehIkZITcE U1gzRZOR6vRuLFDNvpY7TvINdoIn+nxVjWae0YkedEw/PpGTGg9UwtPwAk2ehD0FIOWQgXD3wZ5 1lpXKt1sEQQRvW3z76mRQ7Dgr8tJq7fGvd+fYxkGx2MIov8DtunsXQpmXy6kPuxgBTKC5HlvFVF NclJXD8jvTqSq+nLM93TnhuTvMKjx8ckuDnX/BFTfSkFSLjAS2pC9+5tN5Q0Oa5Lm5H1V9caLU9 xsadTQ5DYFvfGRmj7kcBg6bVP9WTPo2Vic51a6ogePdGeDgq7YOaOiYafqKTcSZw1sVoYHYW/6s /A2f8ikuTZGL3PN9WTaVpZG19hRZDo/coS1nlKT15MAtcqfyVEr8CBzp0alWr0mYYtXRRXZSmNS 2f+ck1q/ebKQo1cv1nQ1zyTpYEkMIwd7x/30dYkV3wtLfzk/iJqvymEQCiZo/uElF6s7UCthnb X-Received: by 2002:a05:6820:1c95:b0:696:1ef9:e089 with SMTP id 006d021491bc7-6998a5d8f95mr109958eaf.25.1777927518478; Mon, 04 May 2026 13:45:18 -0700 (PDT) Received: from [100.82.231.29] (c-98-38-17-99.hsd1.co.comcast.net. [98.38.17.99]) by smtp.googlemail.com with ESMTPSA id 006d021491bc7-69689266bacsm7144713eaf.0.2026.05.04.13.45.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 13:45:17 -0700 (PDT) From: Jim Cromie Date: Mon, 04 May 2026 14:45:08 -0600 Subject: [PATCH 02/17] dyndbg: add stub macro for DECLARE_DYNDBG_CLASSMAP 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: <20260504-dd-cleanups-2-v1-2-6fdd24040642@gmail.com> References: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> In-Reply-To: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> To: Andrew Morton , Jason Baron , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , Shuah Khan , Louis Chauvet Cc: linux-kernel@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=1777927513; l=3163; i=jim.cromie@gmail.com; s=20260203; h=from:subject:message-id; bh=ifMjdOv9s5iBVhpB9m4hzA/NaIvmwyfWNqe78zgQbz8=; b=ELNpbklOMxkyIEvTicWCBD3SRrV3pt2HW2FAvEdcwAYuYr/+pyySHTtXwsP2Y6O8ATUlNZ8KA lxAdwMMEP3uChg+xvIybPvAwnRcQ+XofWE8GCHXQ7DPHiy5Pb2zJqHM X-Developer-Key: i=jim.cromie@gmail.com; a=ed25519; pk=C6E5ODlPQo7ZBynATXH9wg7K6HxP0pIXyf4s38Qw0XE= Add the stub macro for !DYNAMIC_DEBUG builds, after moving the original macro-defn down under the big ifdef. Do it now so future changes have a cleaner starting point. Signed-off-by: Jim Cromie --- include/linux/dynamic_debug.h | 43 ++++++++++++++++++++++-----------------= ---- 1 file changed, 22 insertions(+), 21 deletions(-) diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index 05743900a116..a10adac8e8f0 100644 --- a/include/linux/dynamic_debug.h +++ b/include/linux/dynamic_debug.h @@ -93,27 +93,6 @@ struct ddebug_class_map { enum class_map_type map_type; }; =20 -/** - * DECLARE_DYNDBG_CLASSMAP - declare classnames known by a module - * @_var: a struct ddebug_class_map, passed to module_param_cb - * @_type: enum class_map_type, chooses bits/verbose, numeric/symbolic - * @_base: offset of 1st class-name. splits .class_id space - * @classes: class-names used to control class'd prdbgs - */ -#define DECLARE_DYNDBG_CLASSMAP(_var, _maptype, _base, ...) \ - static const char *_var##_classnames[] =3D { __VA_ARGS__ }; \ - static struct ddebug_class_map __aligned(8) __used \ - __section("__dyndbg_classes") _var =3D { \ - .mod =3D THIS_MODULE, \ - .mod_name =3D KBUILD_MODNAME, \ - .base =3D _base, \ - .map_type =3D _maptype, \ - .length =3D NUM_TYPE_ARGS(char*, __VA_ARGS__), \ - .class_names =3D _var##_classnames, \ - } -#define NUM_TYPE_ARGS(eltype, ...) \ - (sizeof((eltype[]){__VA_ARGS__}) / sizeof(eltype)) - /* encapsulate linker provided built-in (or module) dyndbg data */ struct _ddebug_info { struct _ddebug *descs; @@ -138,6 +117,27 @@ struct ddebug_class_param { #if defined(CONFIG_DYNAMIC_DEBUG) || \ (defined(CONFIG_DYNAMIC_DEBUG_CORE) && defined(DYNAMIC_DEBUG_MODULE)) =20 +/** + * DECLARE_DYNDBG_CLASSMAP - declare classnames known by a module + * @_var: a struct ddebug_class_map, passed to module_param_cb + * @_type: enum class_map_type, chooses bits/verbose, numeric/symbolic + * @_base: offset of 1st class-name. splits .class_id space + * @classes: class-names used to control class'd prdbgs + */ +#define DECLARE_DYNDBG_CLASSMAP(_var, _maptype, _base, ...) \ + static const char *_var##_classnames[] =3D { __VA_ARGS__ }; \ + static struct ddebug_class_map __aligned(8) __used \ + __section("__dyndbg_classes") _var =3D { \ + .mod =3D THIS_MODULE, \ + .mod_name =3D KBUILD_MODNAME, \ + .base =3D _base, \ + .map_type =3D _maptype, \ + .length =3D NUM_TYPE_ARGS(char*, __VA_ARGS__), \ + .class_names =3D _var##_classnames, \ + } +#define NUM_TYPE_ARGS(eltype, ...) \ + (sizeof((eltype[]) {__VA_ARGS__}) / sizeof(eltype)) + extern __printf(2, 3) void __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...); =20 @@ -314,6 +314,7 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor, =20 #define DEFINE_DYNAMIC_DEBUG_METADATA(name, fmt) #define DYNAMIC_DEBUG_BRANCH(descriptor) false +#define DECLARE_DYNDBG_CLASSMAP(...) =20 #define dynamic_pr_debug(fmt, ...) \ no_printk(KERN_DEBUG pr_fmt(fmt), ##__VA_ARGS__) --=20 2.54.0 From nobody Sun Jun 14 01:34:53 2026 Received: from mail-ot1-f52.google.com (mail-ot1-f52.google.com [209.85.210.52]) (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 4EA7531C567 for ; Mon, 4 May 2026 20:45:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927523; cv=none; b=qCUyx551SbKCpC7z15aO0iUpSnDaY8uKhs/Yj2MRipF933bsYu8N0zcI1gKnw84h2sYpBTxMwz4D4jY26SUTSV6sYSXesfzUMksDBcsGTB4dgQh9k26Ou1bPfUDUNtpYa+6dpkG/pi3yn+8QlfzPfjO8JLk7rRmO5d5yU/rn7TA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927523; c=relaxed/simple; bh=4QyJeRXUWgen8GS+6wbvk+BOK50BVAKI45Yo7nMzswY=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Fqgne9LNx/oScyVEj6M6FDTq9iqayhxlnMB7SOVcmH5nY1cxPedTqLjSCY76hPtkGoW/jMyWYCDtOD1fD2Gs+7Q34w4wjhDgIrCZOFWIlHyl9iXhd2kXFjrAXcRwePLCeBrEWssMzXzdQY+RYgZhs8sr3lhu46uaPdaSE2VTnbs= 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=Jtj0xzc7; arc=none smtp.client-ip=209.85.210.52 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="Jtj0xzc7" Received: by mail-ot1-f52.google.com with SMTP id 46e09a7af769-7dcdca9aa0bso4088211a34.0 for ; Mon, 04 May 2026 13:45:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777927520; x=1778532320; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=2iz0Lg8jnkq5kxSThshTq+W9uPtGQpz3F9eqSEiSS+4=; b=Jtj0xzc7EBfvMqlI4hPQ14miLIpP+WB8Wcg8ILoAi3rB1bYd708mGw/4pw1CuTNVbW 44O0KzuASqYkNkYadmKiB9DuBf7Vq24mT1mbUNG4++Utxq7K9bdfc+yQSlMimx/xN/ub Vnh5INWjRuNBwg36Clzy/iaUU3xlvAIYdX3qFIYl99+WOeNDBt3sZK854dBObIomtcB6 PCilQG5mSs5yvjzpZ2qv11cSW95RT1TbhcLQlaSX6y2RkkUH6rr0hXSclxjOfFwHtaE9 /qy+r30hCWXkbNBnLpcCMp/aFpFEZgcfkLaw4HHzpLK1QNrlWObreiY11EdQmph73re1 jz1g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777927520; x=1778532320; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=2iz0Lg8jnkq5kxSThshTq+W9uPtGQpz3F9eqSEiSS+4=; b=GtkOfpCg4QeAloK9VwKE9H8kaKgqpH425MuLk+YkJs0OpGsDMxVhrTU657TsDA4vfq XrwE5YAcfRRmHiKgCqLunG+O3KDT/8m3vKbHYTe8bmhzrEKAkw+SWbPD7FPtVpv+/vFX jHz2oWEn5HixVkCBWj8ZszdmvHiRdN8PQF7iXeCYr0KFIHQZAnPQ1c3JD6PH9MYHjs5N YExLuOWVKd0JIONhlM+xcmq1wwYW7MXBUsNvRaMX/8Ve2YOgFhz34f68ZhTdB+szfLQ9 cAavwezK70ykrqt6Nl2WBp9I+KTi/GwbREZFLQz3Mw0kE7N/KRfqKsCXVK8c+YTG39RJ VbYQ== X-Gm-Message-State: AOJu0Yzu4nVLdMVhHEGHg1vbycNpNqpY33htQbTEcaEhJ1kG5cKjimaB gPZRHIU0qAR7wlGCku0B0Vzl1adZrdkf4d+SG9oUnZhatqzbixlunUv4 X-Gm-Gg: AeBDieuNAGkVuKxy4jQSfTFhj11CfHnlGJLaeEjpsRxcdoEp/PrnQICUfkHPr018Ihv SUjzkJzLCN89BhBxP9ywAMcXgIf7fn669t2kxyqd6D5/HlOsR3wJzzxBXlMb23Kq298zkoQ6Tfr P3kgo9eH1V5X1LWvmQoSFT0TS67dGCdaRiJ5U3eYhAD3/8QBqKMgH1R5QyDx9n5RU5iRA4u54/a 0dBp3nWBLgd5Ws8PTS8sWAgS7ClR1iQdyKuA2CoSsQ40EKmeOa0gTMKiC+K+oijQoWbEEM7ALeH naJNBvRoOsQLJxzTf9X5LEFgdPp1SrBNkbh+ijtTKAAOCySoNA7GHMPHP2E9CrG/+thUOPTHoB/ xscY4p0uqNa0WosoYaOw0BAW7wdqxW/1otAcyAdrs20SN4gBuN9WXOwdyscE+++ZlFGeoFpg0/9 QC9wUTk1KL5NBswHFj35dHbJtUM80G36zBk4ZotRNkxftHCmYgx4u/Px96CgKu65OSR8ecIRj2 X-Received: by 2002:a05:6820:4b8d:b0:696:17a6:c06b with SMTP id 006d021491bc7-69887863d2bmr545889eaf.17.1777927520168; Mon, 04 May 2026 13:45:20 -0700 (PDT) Received: from [100.82.231.29] (c-98-38-17-99.hsd1.co.comcast.net. [98.38.17.99]) by smtp.googlemail.com with ESMTPSA id 006d021491bc7-69689266bacsm7144713eaf.0.2026.05.04.13.45.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 13:45:19 -0700 (PDT) From: Jim Cromie Date: Mon, 04 May 2026 14:45:09 -0600 Subject: [PATCH 03/17] dyndbg: reword "class unknown," to "class:_UNKNOWN_" 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: <20260504-dd-cleanups-2-v1-3-6fdd24040642@gmail.com> References: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> In-Reply-To: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> To: Andrew Morton , Jason Baron , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , Shuah Khan , Louis Chauvet Cc: linux-kernel@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=1777927513; l=1024; i=jim.cromie@gmail.com; s=20260203; h=from:subject:message-id; bh=4QyJeRXUWgen8GS+6wbvk+BOK50BVAKI45Yo7nMzswY=; b=inxfNkY6lsE+ppdhOmd9kLiU7+Iw4d1ZfSmOMXaWkJO35noemsBnN0vPy71ns7A9f9WWhfDzN 0rp1fbaQyM9Aam6RkHf6Xtw1qf3p7JJTADX8kK+Q/R9OYDumtagjIoA X-Developer-Key: i=jim.cromie@gmail.com; a=ed25519; pk=C6E5ODlPQo7ZBynATXH9wg7K6HxP0pIXyf4s38Qw0XE= When a dyndbg classname is unknown to a kernel module (as before previous patch), the callsite is un-addressable via >control queries. The control-file displays this condition as "class unknown," currently. That spelling is sub-optimal/too-generic, so change it to "class:_UNKNOWN_" to loudly announce the erroneous situation, and to make it uniquely greppable. Reviewed-by: Louis Chauvet Signed-off-by: Jim Cromie --- lib/dynamic_debug.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 6b1e983cfedc..a9caf84ddb22 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -1166,7 +1166,7 @@ static int ddebug_proc_show(struct seq_file *m, void = *p) if (class) seq_printf(m, " class:%s", class); else - seq_printf(m, " class unknown, _id:%d", dp->class_id); + seq_printf(m, " class:_UNKNOWN_ _id:%d", dp->class_id); } seq_putc(m, '\n'); =20 --=20 2.54.0 From nobody Sun Jun 14 01:34:53 2026 Received: from mail-oa1-f51.google.com (mail-oa1-f51.google.com [209.85.160.51]) (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 B8D0631B131 for ; Mon, 4 May 2026 20:45:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.51 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927527; cv=none; b=j0Q2KaO2OaX5AeRRjuOA/JO9fxCqpUXUjjPfDlD+ESv4H1MmCQl+Ya0JtDbLn5OKLrp94sbLiaAfumZACUDcRfHlUl27rC/rYrs4ndqOxhK0BssBxrTPZtLOf0+H7B+CtWG68fEuxnq/N/MwKCewq/0Qxscl93C93lrC87dCpOc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927527; c=relaxed/simple; bh=fQtxjBBlsfrbVNeHFs+VzNlAPJfQpt7R7uonizgiLgM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=C+wbCgHa8dMAaTDfmvHBWO2yuh6SzMgnLFz0R/o37EH/cmvMVfSuoO6C9VomFcK/1Cw72BfKIndBAaRmUMlQdSPkRmhaiHBbARvOd/OwvsbTeOthXw/rHyMMJjokdsrKDUAtEgnj+WaJQlyHX0RwITB75mkx9Je7iWp3isLrj5s= 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=lv9eJXyq; arc=none smtp.client-ip=209.85.160.51 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="lv9eJXyq" Received: by mail-oa1-f51.google.com with SMTP id 586e51a60fabf-40f1a1f77a6so3618484fac.2 for ; Mon, 04 May 2026 13:45:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777927521; x=1778532321; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=V0og+a8kac0IiyPYwMTiYKdKkV179BGjDAZzwYpwxKg=; b=lv9eJXyqRYzjGnA0fTU+PUUzBqf91Fm+wBP8kea835C5BTCD1IPa2NYiGq0vxENsly UEXSv3Klujg4Wwnx90jTLd5+8stby1/ODBRsKiSAhalTJ2aDcqD5kYtJvsyNDGYPAAAB OWP0jjJXEDUafr3CODz8BJc5pePccpcz+Me4fdFsexPUnKpK+b6NZw28BVX/+1+tNLLR ojH/VNt158fCCMrfyME65G4i6fAT7vPoAR/lOOO5jU+ut0vFRATLWQbiGUTkx1gn4ydd zBhS5t1715HcAzzSWieHh1TN9/3f7fAvW3Q/7OF3KAfK5C3TXdtHPb8eRYoxMg73eEUA /rhA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777927521; x=1778532321; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=V0og+a8kac0IiyPYwMTiYKdKkV179BGjDAZzwYpwxKg=; b=DgvzjowyqgKwJ3pjJPWLObCf8xEwv71IRYATSG08xiO5+3ayCKfWJnKs84TrnvYOkq m5ENCvaxi5WZlG1GLMMK3DLUcvNfoou3yGpWUQ+Lj1jW/90CiSKiAePme+xdH8aHln9K 6OUdKni0FgKBwYxMRGlBTTP5vu1gXwK9PnGJqxtOgmbySPVKk8dx1wSfUxJCJa1K6a/S zKIcq+96AE7Sn65mIrguKgbDFRif+/2ho8c1M+1Z9bmW6TiDzP+4Pydx7ki63sOMLeow HfcABi6e+mjxc2Fz2WbG2ZeoXrpcudM7CXIcVpivbG+n83DXRypxmrqtj7VMfExV4LxR cuhQ== X-Gm-Message-State: AOJu0Yx1ZG5Kh9UmnXK1SvrvPo08pcuSfMtX78uVrDR5givkqDRRVjF6 8WmSe+Zet6+3AVAn7dL6xO2uoh9oi1cxYfOIiF/SiqwHVGDKXjcE2s6P X-Gm-Gg: AeBDiev2jpsjdxHKLh12A7DK+7TpmMANckHLiDzpw/enMi4XcTl/smeaos0eHHIzUf2 llAu/J/f5b96MU+jjLGt1etcTGVnk0lvulBI0h02HHpAPxSPnZ1YwayOclTVG7TXslGMlh8DJgJ 2RXlw7ElIOqEPo7RkmbGUSarKQMOogclbs5IkOqo+T2lKbQvPVQvJUYmfWvv01E1l1+VDVLs6lZ WqjtkYDX4IJVhIa+FaO7iaZV7ocL1g0hvRxJg26TTopKRtiJaH+2srOsbdiA0mxfaJ0y8B5cYQ3 2mR2sFAqkhHTxpgvtwCAx3mPnS6H5Wiv/qJRw9uD79r4NbcgJSm17YX8UxDLDKwDOOj5oQaK8fO homMTOgdSVmdcr58my4d5D/tO5lXHXEQNblZg8lB20PGVL77Kmf+RGh7GgnvTP8WnyystkcH0XG S6f2H3paAz3VXslTPtbFJO/Exu5seyQQqPe775zz79GUfdiZUIN6CRqCEvaRsHyyvgEzpWKMCu X-Received: by 2002:a05:6820:1687:b0:696:6bf1:b8da with SMTP id 006d021491bc7-69697d69e55mr5450314eaf.42.1777927521511; Mon, 04 May 2026 13:45:21 -0700 (PDT) Received: from [100.82.231.29] (c-98-38-17-99.hsd1.co.comcast.net. [98.38.17.99]) by smtp.googlemail.com with ESMTPSA id 006d021491bc7-69689266bacsm7144713eaf.0.2026.05.04.13.45.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 13:45:20 -0700 (PDT) From: Jim Cromie Date: Mon, 04 May 2026 14:45:10 -0600 Subject: [PATCH 04/17] dyndbg: make ddebug_class_param union members same size 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: <20260504-dd-cleanups-2-v1-4-6fdd24040642@gmail.com> References: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> In-Reply-To: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> To: Andrew Morton , Jason Baron , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , Shuah Khan , Louis Chauvet Cc: linux-kernel@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=1777927513; l=1479; i=jim.cromie@gmail.com; s=20260203; h=from:subject:message-id; bh=fQtxjBBlsfrbVNeHFs+VzNlAPJfQpt7R7uonizgiLgM=; b=ttLRyXE6cZ85k5IAGBKzfNeOHmjsQMSdBe0oJuY+GuqeR5kO7dRO2UTAOXb6Z/uCC5xzVY3Uu k7pB5IiC37BAmfaXmLuWDjqegWQkmZL7ULDACaH/AQppR+9Hq0uDuxo X-Developer-Key: i=jim.cromie@gmail.com; a=ed25519; pk=C6E5ODlPQo7ZBynATXH9wg7K6HxP0pIXyf4s38Qw0XE= struct ddebug_class_param keeps a ref to the state-storage of the param; make both class-types use the same unsigned long storage type. ISTM this is simpler and safer; it avoids an irrelevant difference, and if 2 users somehow get class-type mixed up (or refer to the wrong union member), at least they will both see the same value. Reviewed-by: Louis Chauvet Signed-off-by: Jim Cromie --- include/linux/dynamic_debug.h | 2 +- lib/dynamic_debug.c | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index a10adac8e8f0..441305277914 100644 --- a/include/linux/dynamic_debug.h +++ b/include/linux/dynamic_debug.h @@ -104,7 +104,7 @@ struct _ddebug_info { struct ddebug_class_param { union { unsigned long *bits; - unsigned int *lvl; + unsigned long *lvl; }; char flags[8]; const struct ddebug_class_map *map; diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index a9caf84ddb22..ffa1cf7c2c72 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -811,7 +811,7 @@ int param_get_dyndbg_classes(char *buffer, const struct= kernel_param *kp) =20 case DD_CLASS_TYPE_LEVEL_NAMES: case DD_CLASS_TYPE_LEVEL_NUM: - return scnprintf(buffer, PAGE_SIZE, "%d\n", *dcp->lvl); + return scnprintf(buffer, PAGE_SIZE, "%ld\n", *dcp->lvl); default: return -1; } --=20 2.54.0 From nobody Sun Jun 14 01:34:53 2026 Received: from mail-oo1-f43.google.com (mail-oo1-f43.google.com [209.85.161.43]) (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 97DDC31E82B for ; Mon, 4 May 2026 20:45:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927527; cv=none; b=XMk/c3Q+TwtjwubSt/ewWUUIEV1Jd1u7gPR0KDJuq6LGn6fE5q/mwD3XZiMDSafMFAUyIXybsT2Ft7ZWn3jehNNhCXfpWlLEQ6+9Jz1Mlk9dSTGtUPYGdRKdFqQ/gL3uvX4miVDrbGg1rf/FQk+IajvC9xGkIXv6e0cEaG2EvPc= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927527; c=relaxed/simple; bh=zu8zqDW4h4dx4V+1PKHBcn6qe7oPdJ+ifodfL/4d/lM=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Mk5YuTuvfsK4yVkhZ88rYEUoT4jvUPfU9iX3keL0+04tMcO1HHQ95TrCZu+Wsx7nnamJF+BsNfCpwpE3QHCLDRy+zvK1Eyjf5hJuC2g4vOJoORlP1IGaNhbd1EHD0wbrlHh05Ob8jIViYA1ic/9A8QGNO2Z7onjrBvuGJ5lwphQ= 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=hrYnlN1F; arc=none smtp.client-ip=209.85.161.43 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="hrYnlN1F" Received: by mail-oo1-f43.google.com with SMTP id 006d021491bc7-6949f3eeaf6so2277960eaf.0 for ; Mon, 04 May 2026 13:45:23 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777927522; x=1778532322; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=KbxgwKiIfVN6BirlEGV9NUXaN1gnD+W0Y+ioXIR1Pq0=; b=hrYnlN1FRwQzm7wYJO5owfJyAAv8R69T58fDmyq7S/6EAlY+qT3rTJOYWIXHKPAlbs fQGasE9LS4VZ6VI9Cu7+lSOITcMMrYNZq7SB5EEb80VIVnQlQpbqYM2adOlJfy7tp+jA bLzaQ+E5kOffgRcmk2/E871GgxIaFrDht1+lYky/cnLO1xjMout5PfFdvoLpOfjuDcZy fntsrZkHKvJRR8ivxLoL0O7BAohSa9+4BIPaGkwpOqYxiTYTihVDxPh/dbybVNSeNPfq SfhsvY3oxV45sxBQzFg7rLh7ahn9q0oF4mt2ev9CIg3MiEQ02qgF/VwnR8E4G9dlDHT2 eIEA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777927522; x=1778532322; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=KbxgwKiIfVN6BirlEGV9NUXaN1gnD+W0Y+ioXIR1Pq0=; b=qI9Zb8A/RwgYO4GN2e6tr7+/Sr7YNMlKg+ldETEw+wwxEYDIdnnJoraQFtmRs8LqZp JYuFmYUR7NQ7DB2HlOa67QQiaBinryfpaWn+xSwA7HsIn741bM+4hsZJ0LYB24WjpuWc gdxNSEBw+9ZBRKnBCPJuVvHJKwFfi14KEfDLCsPWC5GvkdcEExI38AJTpilpNb7sPnxI TPyukkst2T1ku1MZmO27/Qk9cavnRfTqYwmXbL9zgj8VJE8EIAc+pLjM6nJGBFEvDLS8 9+6pnU0Equgoa6DPcvhWrJf90OdX33bDvzmEq9xVaEP97xe6NK9eWBIAJW0tV/xoSoJy hSzg== X-Gm-Message-State: AOJu0YwBpvnM+tXg8JmU6+cQr8o4zcHy9Rm4JpJgjLiSPl/XxS1y8y9O jg4eGyPL0ZtAmcasF3RfX3rXxPgB5McGNbZzZxlD0DZJTfL/UkmAFv4a X-Gm-Gg: AeBDiesX8R1JCOw1IIrvMr4cZgl8zYIEk+5ebfbdql+vewcJa29eait264r00U0B6Wi AdfVqiTUgOI8JHRlZElW1YtTco8G6ematUmXGAIrmelvbDkSejs9W9PVIfzvDMxH3fQGuc+V//G s9F+phKTFR7OES9m48+DLj3w3VUnVkOV3fzTrlW2nSewCfLTrJPgd6Idzsoq0hbVBOPjx5MQqxP VrmpFNJdGP12zBvM8pobDn+f4UHpM7UvvuXo7BrLrkAI1OrQUugH3ffK9bv2jlbhx91B1BVXNGw cAlAx4HnnA+0ZM0ql/VZ3ENS0BPnhmwnI6AegmM0PEFleThwCgRZfhHKnQmb32z1Ir7T3WzHcld C9rriLwFRKOzwHV3Noc4FnuweVrFxrQR0AsC9y/43e8+C0kNz52w6HU4qBJg2P6dvpvPVBk9le7 5fsFmZgX4m3alPRUVwbeMOTLgY+DlR+ql9VJm9WNJuvwLi2ljbFQeqS9mxHr+QwBMZQGeUf+lr0 bJAydcGGqE= X-Received: by 2002:a05:6820:150f:b0:696:177b:42b6 with SMTP id 006d021491bc7-698916338e8mr553402eaf.30.1777927522592; Mon, 04 May 2026 13:45:22 -0700 (PDT) Received: from [100.82.231.29] (c-98-38-17-99.hsd1.co.comcast.net. [98.38.17.99]) by smtp.googlemail.com with ESMTPSA id 006d021491bc7-69689266bacsm7144713eaf.0.2026.05.04.13.45.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 13:45:22 -0700 (PDT) From: Jim Cromie Date: Mon, 04 May 2026 14:45:11 -0600 Subject: [PATCH 05/17] dyndbg: drop NUM_TYPE_ARRAY 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: <20260504-dd-cleanups-2-v1-5-6fdd24040642@gmail.com> References: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> In-Reply-To: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> To: Andrew Morton , Jason Baron , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , Shuah Khan , Louis Chauvet Cc: linux-kernel@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=1777927513; l=982; i=jim.cromie@gmail.com; s=20260203; h=from:subject:message-id; bh=zu8zqDW4h4dx4V+1PKHBcn6qe7oPdJ+ifodfL/4d/lM=; b=iiHii+Vss9H0pYsNChYziSgSQvbvIe7Sv351rn8+qWxnxEMFtue2rJVzfeP7mPYDadwZihbKg ySvhvQyQkqSBHChvslEBvYKxQhqrJr96uidafAT+aQ78xwrNi4SK2iX X-Developer-Key: i=jim.cromie@gmail.com; a=ed25519; pk=C6E5ODlPQo7ZBynATXH9wg7K6HxP0pIXyf4s38Qw0XE= ARRAY_SIZE works here, since array decl is complete. no functional change Reviewed-by: Louis Chauvet Signed-off-by: Jim Cromie --- include/linux/dynamic_debug.h | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index 441305277914..92627a03b4d1 100644 --- a/include/linux/dynamic_debug.h +++ b/include/linux/dynamic_debug.h @@ -132,11 +132,9 @@ struct ddebug_class_param { .mod_name =3D KBUILD_MODNAME, \ .base =3D _base, \ .map_type =3D _maptype, \ - .length =3D NUM_TYPE_ARGS(char*, __VA_ARGS__), \ + .length =3D ARRAY_SIZE(_var##_classnames), \ .class_names =3D _var##_classnames, \ } -#define NUM_TYPE_ARGS(eltype, ...) \ - (sizeof((eltype[]) {__VA_ARGS__}) / sizeof(eltype)) =20 extern __printf(2, 3) void __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...); --=20 2.54.0 From nobody Sun Jun 14 01:34:53 2026 Received: from mail-ot1-f54.google.com (mail-ot1-f54.google.com [209.85.210.54]) (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 0519A31E851 for ; Mon, 4 May 2026 20:45:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927527; cv=none; b=eAJIVR0zjW0apyFG+IvE8gwkcUU9pL5+JiaKFV6GtFuBPQg99PPQeQ5SXLz+PeTaeU8S812XelP2TFddyU6Xh93yu2BcC5sG1onYV0EaETZhMWd5HGanrtJ248m9Rg7Z097PVy5J0uBD18RIbeikoLGebYyNJ0dls2rm93hd4zY= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927527; c=relaxed/simple; bh=oj/Ot2bWBTE+4nkkrZtF2E5fiS0cgL9bGDg3h5lqHLg=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=W0KtqH1ZpnLuvbuYV4ZK47aEZgvOHnfVEGldb43ksMuMr8J7I6cgGu0MyMoDXQAnep8jA/g+4qgsRXf0wp1hL0MrGA8J5DjoXX14T6i8N773qFjKAjypuRtsvbG1b+GxlROwq6RWUJPpCGAEdBirIFmWpqST7UDiZJZlUrH/Eug= 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=Dqez2XUF; arc=none smtp.client-ip=209.85.210.54 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="Dqez2XUF" Received: by mail-ot1-f54.google.com with SMTP id 46e09a7af769-7d4be94eeacso5267538a34.2 for ; Mon, 04 May 2026 13:45:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777927524; x=1778532324; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=pTL39RgoHy7Hy10nIALTSWo+06ICA733pPcAGxt5zbo=; b=Dqez2XUFHos39M4H/wZlFrOECHG43VBb0ChLHNdE3Bb9P6EZbANxzyDVVmTx2VYTgb 0BdAHEIZz7dMbcxItPUcjW4mY/Pmm9wdZHxMbhwFmtAUXbyPOfWmz5aUsmobF02FngNu mGif2ZbbBL3+kYw67waDghJLU0ngt5eHCCivsp0XC/Fl4fgnVCyw7PyRrIftyXvCW2EV qE6Scicg22Dxkis/36Lwa78fY4bQ+FVgR3dxgxWH2+cVMNmoOyMoj2doaG7x8in//11Y piDSI2Kqt3BkzGgiODYekFlfPr/A5yKZLhM0lnhyeHgNIzBpNNddYsmDg3kpLY2iM9Wf 1HVg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777927524; x=1778532324; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=pTL39RgoHy7Hy10nIALTSWo+06ICA733pPcAGxt5zbo=; b=HfUj33wM7tiskaF5W4U+BnaCosRJtMk+q7kSK/OU4jKoacjCMEowGbD9FccTYOzcpW iJVrhRAnouDvHRjG5sDpeJxp9wp1GhHxpZWLwcXvhHT5N7BBTaqHVLbzVlowvH1eWYgf oaXawHL39HLA8OWtiq7oh7lp2KeGok4tbcXJjXxXegPjZyv7k88kLntI0iyEf/0j7GEp 4JKCSiM3OwlnuytqAd2IfCYqp8gpFoWmBvjcy+5Y51TELP1YA8fyUoHRRqm7+SzNZ9of vf9CWvZtAs995RLXBMwDLeqtAysrufw1/IJgqGKT+H99lo8TOw1eFCXq4OO6Lct2OK5l SyAA== X-Gm-Message-State: AOJu0Yyv61eUtMRRVeHPamVYHi8wAOpgFOCWP140E1ZzFLGXixoA3O5H L8Ngz0cZeahBU2SVz9GCygH1Bul7sA5Vqy7bF5P/YDHrZ5k56Lt8DkaN X-Gm-Gg: AeBDiev6jQFk1BGnW5BU7UQ6UBVS5jh8w59SMQk3wU7U8PtSP0MrsmXR8ixnYK5tPup EjFYVwRKpJc8suiHonvR9DqlvyJMvhc/GKv040/WKI737VcxZmiKN9LUBAW/J0NJprotbUr5HLX HFLWYUfkiw40dTVhAwBmQ3AO1K4aREIin5wxPuAlttj9rIJLmEM/Z6kFBdke2uiQWA2Md3Eg6q3 G5pP+g0Tx0ZM+ERmmKZmEMaZ2YnpO/fRZqHEGUpJua48iGOsd0sk7F7imtPAxkr0ePJbJNpfD+X DaYMfJVw/ITvW1LFesWFK0ULpUEaSU7RojA/SsVW/9+jm+jl0OchIVcsD55DojsiBuAzyVTnfFe HnZw42VFcj16pUyCOfqZJdbTfP7/Ksyyqnp369srPdW+OR5BPWM1LR/v/IZVZOfa8CvWXwy8tjb dszq3X+egIYZsOufnYNspJnRVkcnmVxQSVyKd9r4OFFiPeV2zsHg9JfjnCjfUWTCUvKBMkU+GQ X-Received: by 2002:a05:6820:4b13:b0:696:8c3f:d7cd with SMTP id 006d021491bc7-696979bbc12mr5833412eaf.4.1777927523995; Mon, 04 May 2026 13:45:23 -0700 (PDT) Received: from [100.82.231.29] (c-98-38-17-99.hsd1.co.comcast.net. [98.38.17.99]) by smtp.googlemail.com with ESMTPSA id 006d021491bc7-69689266bacsm7144713eaf.0.2026.05.04.13.45.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 13:45:23 -0700 (PDT) From: Jim Cromie Date: Mon, 04 May 2026 14:45:12 -0600 Subject: [PATCH 06/17] dyndbg: tweak pr_fmt to avoid expansion conflicts 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: <20260504-dd-cleanups-2-v1-6-6fdd24040642@gmail.com> References: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> In-Reply-To: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> To: Andrew Morton , Jason Baron , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , Shuah Khan , Louis Chauvet Cc: linux-kernel@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=1777927513; l=739; i=jim.cromie@gmail.com; s=20260203; h=from:subject:message-id; bh=oj/Ot2bWBTE+4nkkrZtF2E5fiS0cgL9bGDg3h5lqHLg=; b=OM/4itX0syjUVS+fzKdiSWH5WDfAynGpozVyS+iUO+rug/4fBDTiHSJONmNbHs2rEntZDeBBi 16N/2nOT4oLCKdrsuLPYJPW3g7dWdWvjJR+bRt5uUKpMxX8X5ciDIVh X-Developer-Key: i=jim.cromie@gmail.com; a=ed25519; pk=C6E5ODlPQo7ZBynATXH9wg7K6HxP0pIXyf4s38Qw0XE= Disambiguate pr_fmt(fmt) arg, by changing it to _FMT_, to avoid naming confusion with many later macros also using that argname. no functional change Reviewed-by: Louis Chauvet Signed-off-by: Jim Cromie --- lib/dynamic_debug.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index ffa1cf7c2c72..9575b92a8deb 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -11,7 +11,7 @@ * Copyright (C) 2013 Du, Changbin */ =20 -#define pr_fmt(fmt) "dyndbg: " fmt +#define pr_fmt(_FMT_) "dyndbg: " _FMT_ =20 #include #include --=20 2.54.0 From nobody Sun Jun 14 01:34:53 2026 Received: from mail-ot1-f49.google.com (mail-ot1-f49.google.com [209.85.210.49]) (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 3799831E855 for ; Mon, 4 May 2026 20:45:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927531; cv=none; b=DnZjAR9ZiIvZJEX7Jzg53VSxC0EASAS8EAn7wQiVMrfZc+xGZKf1GOZers9s7sp2X/p7qVDeZslzMAz2lisO/aGs405cuIKskISFcYF9/jZ60efgMQylqx0+I3DWlrPieSCWVCAz33oHR5Jyxt+tQKgUjBWauch/2bdurBYDfaw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927531; c=relaxed/simple; bh=zkMuUMxAz7gf7JYyOU3lHLF/bqxaOU2hcI/vPD8JKw4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FPrp9XuWjB4JAtfvgr7w8l2jHHG692vkyMy8uj1IKyWqBuD6dZa/BbY00tLBRQjIi+Nu6oAfCPP4lhIg641Z6Ycv/OaOtqwvhm/zcGZoVQoTRRqtffrxwum17PnorHUXxyGpjzyyB8KovY7m0V40p5b/I0KSB8AP8g8ZjVsyHc4= 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=nqlYaeX8; arc=none smtp.client-ip=209.85.210.49 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="nqlYaeX8" Received: by mail-ot1-f49.google.com with SMTP id 46e09a7af769-7dcdca9aa0bso4088250a34.0 for ; Mon, 04 May 2026 13:45:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777927525; x=1778532325; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=iE84KguDxtU3r4Z7rVGRxTEhlyxeuDZeFizICZUAIgg=; b=nqlYaeX8YhoAPXzbprpB4PD3JeoqTVOzmng1ZPznOXP0fYPSERs5lr/Er4M0guD9d/ K0gukdnAQ1i6zSx4CF9DiWMJiFRm9EZgYztMxxGemj6yB+e3IjdbSKsVxP/V1bI2Iibi f0HC87LqMynHS0elKxvypxXqp3boHQyDGbuH1Ju2ah0oY+AKhMoAuHv08GkftFkU13LK yeII3KdqPt0GU7hyTh6NNOo8pCX/AbwdNvuDa+M6sjVCDiLCBWbDFVgqZR3Pg+usP+nE fIfKd/6C6VKTARCieu73uu1315QUnvQzBO1Nwog9pTx9QdrgF7n8jSxnCI8ya+mVOD2g loDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777927525; x=1778532325; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=iE84KguDxtU3r4Z7rVGRxTEhlyxeuDZeFizICZUAIgg=; b=lSFND/S/9/bBQl1Znpn44PjLAuHBY0m2dJiyiWbqg6EwTL2Ltson3tEeG9OsMuAUqg YdExGCAZ6U61g24RkEa/PG64zClE7psCAVd9T8Ik7Jd39kJ9MhjsAY05yb5aj9FFd0wr eB2rwEAZIMdM3N4w7Le9Zk86cNCINN0MKYf6yEhSEeIEz6gVr6WGq4RSrChzQZvqguQC 4vIhkWEZ9MhxqyJ1GX/ebvbRuUW358xnuWScNogs1vRzwMnyr1NLExpxQ4Kfw22FQTX+ W3ykZqTnxbsfF9Nu5rJq2kV5UJSlCHayFGJJ5SoYSyZkIL30Vpn23u/LPmWjegsEuOSF Y2XA== X-Gm-Message-State: AOJu0YwMtPwlHkgcZbgvOsCw5iIxXwT2Gdkbw+6+4PnZICIUVVgqrJUc 0SUOS3KtXYdI/bl9K5wtaEHLb8R+X/RrlgJvbC/3SMGmASmFrD7w0k2+ X-Gm-Gg: AeBDieuM8D3MS+NqlsOtK12/ljq8pZl5y84yxIp/AYhTLPeC2UvWpb262nKc2+hIA+j d+AD43LyEDUQvYaNXfVfnrSO9HkSBQ13nQDiqLE9h4eXePaK4Shj8QI9OtynTOxUOu3mbyHPXW8 t7oKY4qo8/zg23mwR2y6oVCvRZZwvME0BYE9MYo2l1nzlPTnVa8/IqVTHqAXoNeIEEGnkiKHIAl 6x2GF4c+POqEh95NZ2Yao7BycfYeVKndJOA8O3hOmDoBQ0PGTDxLGo5DnYo6Cie6qm3RfKIRvaq aVLM4xJNJafDKnoetax6X69Noy9SNWHJx4kE56XbNhx9ijJp8mNJ5XMstrjEJKYHE2yUb8V7/R8 Bd5UtL7CtVQlIbOpMEi0HBYzAATT90EvAOMXslm2wRqxYnYu0CLj+QC+/aTNKmhRxHF2bFdSrqJ KBrFg2xS+TL27w6rlmwxal3Ii4kwzrLcmDjQC7B4fUQY8X8vcT8yh6Y7G8ym3vZGueKG4OgCk6x bm7vo+RgrQ= X-Received: by 2002:a05:6820:986:b0:696:834d:cd2e with SMTP id 006d021491bc7-69887856304mr542025eaf.13.1777927525265; Mon, 04 May 2026 13:45:25 -0700 (PDT) Received: from [100.82.231.29] (c-98-38-17-99.hsd1.co.comcast.net. [98.38.17.99]) by smtp.googlemail.com with ESMTPSA id 006d021491bc7-69689266bacsm7144713eaf.0.2026.05.04.13.45.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 13:45:24 -0700 (PDT) From: Jim Cromie Date: Mon, 04 May 2026 14:45:13 -0600 Subject: [PATCH 07/17] dyndbg: reduce verbose/debug clutter 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: <20260504-dd-cleanups-2-v1-7-6fdd24040642@gmail.com> References: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> In-Reply-To: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> To: Andrew Morton , Jason Baron , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , Shuah Khan , Louis Chauvet Cc: linux-kernel@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=1777927513; l=3911; i=jim.cromie@gmail.com; s=20260203; h=from:subject:message-id; bh=zkMuUMxAz7gf7JYyOU3lHLF/bqxaOU2hcI/vPD8JKw4=; b=N08w0NZjKOPBxYI7XWMCIprrfEn4owD0mqol02b9KoQtV4xF8Q+V0YddX+kNNfiXcLe+31OnA bXo02Mx3e+fBrqiMDjegNNn89nK4f3keRMD9458yjafujflMK3Q60zf X-Developer-Key: i=jim.cromie@gmail.com; a=ed25519; pk=C6E5ODlPQo7ZBynATXH9wg7K6HxP0pIXyf4s38Qw0XE= currently, for verbose=3D3, these are logged (blank lines for clarity): dyndbg: query 0: "class DRM_UT_CORE +p" mod:* dyndbg: split into words: "class" "DRM_UT_CORE" "+p" dyndbg: op=3D'+' dyndbg: flags=3D0x1 dyndbg: *flagsp=3D0x1 *maskp=3D0xffffffff dyndbg: parsed: func=3D"" file=3D"" module=3D"" format=3D"" lineno=3D0-0 c= lass=3D... dyndbg: no matches for query dyndbg: no-match: func=3D"" file=3D"" module=3D"" format=3D"" lineno=3D0-0= class=3D... dyndbg: processed 1 queries, with 0 matches, 0 errs That is excessive, so this patch: - shrinks 3 lines of 2nd stanza to single line - drops 1st 2 lines of 3rd stanza 3rd line is like 1st, with result, not procedure. 2nd line is just status, retold in 4th, with more info. New output: dyndbg: query 0: "class DRM_UT_CORE +p" mod:* dyndbg: split into words: "class" "DRM_UT_CORE" "+p" dyndbg: op=3D'+' flags=3D0x1 *flagsp=3D0x1 *maskp=3D0xffffffff dyndbg: no-match: func=3D"" file=3D"" module=3D"" format=3D"" lineno=3D0-0= class=3D... dyndbg: processed 1 queries, with 0 matches, 0 errs Also reduce verbose=3D3 messages in ddebug_add_module When modprobing a module, dyndbg currently logs/says "add-module", and then "skipping" if the module has no prdbgs. Instead just check 1st and return quietly. no functional change Reviewed-by: Louis Chauvet Signed-off-by: Jim Cromie --- lib/dynamic_debug.c | 21 ++++++--------------- 1 file changed, 6 insertions(+), 15 deletions(-) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 9575b92a8deb..3ae9ecabdad1 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -276,9 +276,6 @@ static int ddebug_change(const struct ddebug_query *que= ry, } mutex_unlock(&ddebug_lock); =20 - if (!nfound && verbose) - pr_info("no matches for query\n"); - return nfound; } =20 @@ -511,7 +508,6 @@ static int ddebug_parse_flags(const char *str, struct f= lag_settings *modifiers) pr_err("bad flag-op %c, at start of %s\n", *str, str); return -EINVAL; } - v3pr_info("op=3D'%c'\n", op); =20 for (; *str ; ++str) { for (i =3D ARRAY_SIZE(opt_array) - 1; i >=3D 0; i--) { @@ -525,7 +521,6 @@ static int ddebug_parse_flags(const char *str, struct f= lag_settings *modifiers) return -EINVAL; } } - v3pr_info("flags=3D0x%x\n", modifiers->flags); =20 /* calculate final flags, mask based upon op */ switch (op) { @@ -541,7 +536,7 @@ static int ddebug_parse_flags(const char *str, struct f= lag_settings *modifiers) modifiers->flags =3D 0; break; } - v3pr_info("*flagsp=3D0x%x *maskp=3D0x%x\n", modifiers->flags, modifiers->= mask); + v3pr_info("op=3D'%c' flags=3D0x%x maskp=3D0x%x\n", op, modifiers->flags, = modifiers->mask); =20 return 0; } @@ -551,7 +546,7 @@ static int ddebug_exec_query(char *query_string, const = char *modname) struct flag_settings modifiers =3D {}; struct ddebug_query query =3D {}; #define MAXWORDS 9 - int nwords, nfound; + int nwords; char *words[MAXWORDS]; =20 nwords =3D ddebug_tokenize(query_string, words, MAXWORDS); @@ -569,10 +564,7 @@ static int ddebug_exec_query(char *query_string, const= char *modname) return -EINVAL; } /* actually go and implement the change */ - nfound =3D ddebug_change(&query, &modifiers); - vpr_info_dq(&query, nfound ? "applied" : "no-match"); - - return nfound; + return ddebug_change(&query, &modifiers); } =20 /* handle multiple queries in query string, continue on error, return @@ -1246,11 +1238,10 @@ static int ddebug_add_module(struct _ddebug_info *d= i, const char *modname) { struct ddebug_table *dt; =20 - v3pr_info("add-module: %s.%d sites\n", modname, di->num_descs); - if (!di->num_descs) { - v3pr_info(" skip %s\n", modname); + if (!di->num_descs) return 0; - } + + v3pr_info("add-module: %s %d sites\n", modname, di->num_descs); =20 dt =3D kzalloc_obj(*dt); if (dt =3D=3D NULL) { --=20 2.54.0 From nobody Sun Jun 14 01:34:53 2026 Received: from mail-ot1-f44.google.com (mail-ot1-f44.google.com [209.85.210.44]) (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 90A1A314A84 for ; Mon, 4 May 2026 20:45:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.44 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927529; cv=none; b=QE56p0doM62f2GbEYsqTWdQ0DTVLLjRSSc8UBtYIJIeJlkqUH2Z5OcIx8D69+XFYYpFQKc7Y/Bc0ZtJ0MlNV5UzSZAe7e7NtUAkW4XVz+crko77PpfA3sVnSu0yBc16KQwNr970ypDspMXzS0j4/z/SL8Jyf7Bz7m0FLiIewQmk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927529; c=relaxed/simple; bh=o7xvrhkeutR2GpUrORK5W3plIJqLIC/hWqhAsvDVmBk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=KHEM4WZH4+fyJZeh+88gbIZgaDKEdBhb9u+DCHm1CdvrZrbz+pl/hs7tQrwqJU2+qmhBdwas0m8zcSxlKLPZSPMCrJuZfWz+0pHYxx04pu0mjK4nooUmbsJsJq0ZL26AR9Vn3whqhzKJha+1Bb2HjaIh7zMZow7aD3xB0YmrG3c= 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=ilMndO8H; arc=none smtp.client-ip=209.85.210.44 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="ilMndO8H" Received: by mail-ot1-f44.google.com with SMTP id 46e09a7af769-7dbe07d3ec3so1996170a34.0 for ; Mon, 04 May 2026 13:45:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777927526; x=1778532326; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=38naadYyUxJ1fqV8HMsWZcBSB4PJy5I2xp4VmLB9+28=; b=ilMndO8HEGQlDUzDheKpbRrcHBBxOnw7yO0JYaOg7qGXohorYXqhYkDt92NIkxxhd1 r3qqBfbDmAFePgKZiFiXpPch40HYfy3QM6GchIupseWuO5bRSRu0Gw5ZeGBdkxfRuJxx Wbn+/VK2DKHfqP2AKM1Ko83N6vgM+u8x13eydWGUCHH4P1qLutBBK6tqT7FmOBfI0PIp iY8FotvGhdWoXta94oXSOkD/oeyOq92ZU9PDJpzgajDXNrHZsZEoe2SqiPmWu9jovnNN ROlBo6Zgc6V6qbeBkPdAiQg8QGMBkDFo3stt/Urz1U3pUJQw7cL14YsAIaKz6L2kmoK6 IQ+w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777927526; x=1778532326; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=38naadYyUxJ1fqV8HMsWZcBSB4PJy5I2xp4VmLB9+28=; b=mV9nVcRH+n3PIc/R8TsaQxBbqxkowyi0UWc+SyxgVEwn30EsPFt3qIKeZiT0jo1IHq vwDfnUZW8NwrGJeglNw7yv6LaI6/MR0AkpwzLQfRAjP/t70PYJ57F+kQoKh33teKfa3B o6l6LhCiBEfIHzuxevISsXRs+ZtGAFcDDy1LlbU09UR0txcuJxDNqniiqBWxMKKUaPSx sEN+/HvcaEd0MHH13bovosR2si0B7Ho7ezyfCuNE3PCoan2e0DIdqJzbmVbwf/ixdSWK Vpvn8NNelk0C63noucihtGFYFgNDyAxqvIXo4H0BO5aJVus2z+NTE3cZWM8libl1CVmb XjQQ== X-Gm-Message-State: AOJu0YzaaC/o802fbfHeBCVt4FP81w0HhsvgHWEo0XapJ8zWJrZahLHz 63MWbiCo/Wkt6U5h76/1w1xNkoLeZs5uvNshEIBS0+ZTTUn+NVoSO1Jx X-Gm-Gg: AeBDietYMalmvG4M1qMnpRGvC17wUCzYxmfPZxmVTWXAd1StfZJtvT4NznEKSgZqwQz TovGfCACrj10fxJvaxX/R6GQN4Q6vwI7gZzHqgU3mRT9guuT2YaSFlVXR89TjlS2L5pGnPnMc/L m9UBcGoLHi/Wa5MCmEfkpGblLXYJGih+lRk+i/lXv9Jjx94/5pKqWcnztGoVhizoTbQxQQXsnjS 596oBwfJVsA4PM20HlCUBPxJF36l9gbU5iVGIX/bqMfhM4vWKVQmq+RpbdDj16oY/YO9LroUXRd tY+ZAEo/WWCjW9TEeVXWbwXa5kE4yBC/DICt38r5TcELYHP0a/8qZgcQDWWquUZemP1EG5gS0fx mwuJwX6aFy6NjvxFYegqzQDi0rq7KsbJvX/fIC25+zdKxOqlfj0zHzGqfcIKjvjT/SxXuEzIE5L jmZyLvPU08xt00TX8zPcO0cMy5BvPAg9y2a6S0BMbCadzU0k8S0E7NSOTL5TLBnm9hfmg9j+6F X-Received: by 2002:a05:6820:81d5:b0:689:dfc8:5e3c with SMTP id 006d021491bc7-6998a56f88fmr133287eaf.3.1777927526319; Mon, 04 May 2026 13:45:26 -0700 (PDT) Received: from [100.82.231.29] (c-98-38-17-99.hsd1.co.comcast.net. [98.38.17.99]) by smtp.googlemail.com with ESMTPSA id 006d021491bc7-69689266bacsm7144713eaf.0.2026.05.04.13.45.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 13:45:25 -0700 (PDT) From: Jim Cromie Date: Mon, 04 May 2026 14:45:14 -0600 Subject: [PATCH 08/17] dyndbg: refactor param_set_dyndbg_classes and below 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: <20260504-dd-cleanups-2-v1-8-6fdd24040642@gmail.com> References: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> In-Reply-To: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> To: Andrew Morton , Jason Baron , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , Shuah Khan , Louis Chauvet Cc: linux-kernel@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=1777927513; l=6973; i=jim.cromie@gmail.com; s=20260203; h=from:subject:message-id; bh=o7xvrhkeutR2GpUrORK5W3plIJqLIC/hWqhAsvDVmBk=; b=fg5P/LuLoseYTgbI61dVxG3z7zhchI8J/1/1UROCkUxLrOQU75sIuNF3pI3gHYHd65+ha46bL LXaaawrTDzkCLhxsks/+eDjwO8/yuOsdOeX7mX/AvRSLEo7An+gbDvP X-Developer-Key: i=jim.cromie@gmail.com; a=ed25519; pk=C6E5ODlPQo7ZBynATXH9wg7K6HxP0pIXyf4s38Qw0XE= Refactor callchain below param_set_dyndbg_classes(1) to allow mod-name specific settings. Split (1) into upper/lower fns, adding modname param to lower, and passing NULL in from upper. Below that, add the same param to ddebug_apply_class_bitmap(), and pass it thru to _ddebug_queries(), replacing NULL with the param. This allows the callchain to update the classmap in just one module, vs just all as currently done. While the sysfs param is unlikely to ever update just one module, the callchain will be used for modprobe handling, which should update only that just-probed module. In ddebug_apply_class_bitmap(), also check for actual changes to the bits before announcing them, to declutter logs. No functional change. Reviewed-by: Louis Chauvet Signed-off-by: Jim Cromie --- lib/dynamic_debug.c | 65 ++++++++++++++++++++++++++++++++-----------------= ---- 1 file changed, 40 insertions(+), 25 deletions(-) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 3ae9ecabdad1..4313c8803007 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -605,9 +605,10 @@ static int ddebug_exec_queries(char *query, const char= *modname) return nfound; } =20 -/* apply a new bitmap to the sys-knob's current bit-state */ +/* apply a new class-param setting */ static int ddebug_apply_class_bitmap(const struct ddebug_class_param *dcp, - unsigned long *new_bits, unsigned long *old_bits) + unsigned long *new_bits, unsigned long *old_bits, + const char *query_modname) { #define QUERY_SIZE 128 char query[QUERY_SIZE]; @@ -615,7 +616,9 @@ static int ddebug_apply_class_bitmap(const struct ddebu= g_class_param *dcp, int matches =3D 0; int bi, ct; =20 - v2pr_info("apply: 0x%lx to: 0x%lx\n", *new_bits, *old_bits); + if (*new_bits !=3D *old_bits) + v2pr_info("apply bitmap: 0x%lx to: 0x%lx for %s\n", *new_bits, + *old_bits, query_modname ?: "'*'"); =20 for (bi =3D 0; bi < map->length; bi++) { if (test_bit(bi, new_bits) =3D=3D test_bit(bi, old_bits)) @@ -624,12 +627,16 @@ static int ddebug_apply_class_bitmap(const struct dde= bug_class_param *dcp, snprintf(query, QUERY_SIZE, "class %s %c%s", map->class_names[bi], test_bit(bi, new_bits) ? '+' : '-', dcp->flags); =20 - ct =3D ddebug_exec_queries(query, NULL); + ct =3D ddebug_exec_queries(query, query_modname); matches +=3D ct; =20 v2pr_info("bit_%d: %d matches on class: %s -> 0x%lx\n", bi, ct, map->class_names[bi], *new_bits); } + if (*new_bits !=3D *old_bits) + v2pr_info("applied bitmap: 0x%lx to: 0x%lx for %s\n", *new_bits, + *old_bits, query_modname ?: "'*'"); + return matches; } =20 @@ -684,7 +691,7 @@ static int param_set_dyndbg_classnames(const char *inst= r, const struct kernel_pa continue; } curr_bits ^=3D BIT(cls_id); - totct +=3D ddebug_apply_class_bitmap(dcp, &curr_bits, dcp->bits); + totct +=3D ddebug_apply_class_bitmap(dcp, &curr_bits, dcp->bits, NULL); *dcp->bits =3D curr_bits; v2pr_info("%s: changed bit %d:%s\n", KP_NAME(kp), cls_id, map->class_names[cls_id]); @@ -694,7 +701,7 @@ static int param_set_dyndbg_classnames(const char *inst= r, const struct kernel_pa old_bits =3D CLASSMAP_BITMASK(*dcp->lvl); curr_bits =3D CLASSMAP_BITMASK(cls_id + (wanted ? 1 : 0 )); =20 - totct +=3D ddebug_apply_class_bitmap(dcp, &curr_bits, &old_bits); + totct +=3D ddebug_apply_class_bitmap(dcp, &curr_bits, &old_bits, NULL); *dcp->lvl =3D (cls_id + (wanted ? 1 : 0)); v2pr_info("%s: changed bit-%d: \"%s\" %lx->%lx\n", KP_NAME(kp), cls_id, map->class_names[cls_id], old_bits, curr_bits); @@ -708,18 +715,9 @@ static int param_set_dyndbg_classnames(const char *ins= tr, const struct kernel_pa return 0; } =20 -/** - * param_set_dyndbg_classes - class FOO >control - * @instr: string echo>d to sysfs, input depends on map_type - * @kp: kp->arg has state: bits/lvl, map, map_type - * - * Enable/disable prdbgs by their class, as given in the arguments to - * DECLARE_DYNDBG_CLASSMAP. For LEVEL map-types, enforce relative - * levels by bitpos. - * - * Returns: 0 or <0 if error. - */ -int param_set_dyndbg_classes(const char *instr, const struct kernel_param = *kp) +static int param_set_dyndbg_module_classes(const char *instr, + const struct kernel_param *kp, + const char *mod_name) { const struct ddebug_class_param *dcp =3D kp->arg; const struct ddebug_class_map *map =3D dcp->map; @@ -756,8 +754,8 @@ int param_set_dyndbg_classes(const char *instr, const s= truct kernel_param *kp) KP_NAME(kp), inrep, CLASSMAP_BITMASK(map->length)); inrep &=3D CLASSMAP_BITMASK(map->length); } - v2pr_info("bits:%lx > %s\n", inrep, KP_NAME(kp)); - totct +=3D ddebug_apply_class_bitmap(dcp, &inrep, dcp->bits); + v2pr_info("bits:0x%lx > %s.%s\n", inrep, mod_name ?: "*", KP_NAME(kp)); + totct +=3D ddebug_apply_class_bitmap(dcp, &inrep, dcp->bits, mod_name); *dcp->bits =3D inrep; break; case DD_CLASS_TYPE_LEVEL_NUM: @@ -770,7 +768,7 @@ int param_set_dyndbg_classes(const char *instr, const s= truct kernel_param *kp) old_bits =3D CLASSMAP_BITMASK(*dcp->lvl); new_bits =3D CLASSMAP_BITMASK(inrep); v2pr_info("lvl:%ld bits:0x%lx > %s\n", inrep, new_bits, KP_NAME(kp)); - totct +=3D ddebug_apply_class_bitmap(dcp, &new_bits, &old_bits); + totct +=3D ddebug_apply_class_bitmap(dcp, &new_bits, &old_bits, mod_name= ); *dcp->lvl =3D inrep; break; default: @@ -779,16 +777,33 @@ int param_set_dyndbg_classes(const char *instr, const= struct kernel_param *kp) vpr_info("%s: total matches: %d\n", KP_NAME(kp), totct); return 0; } + +/** + * param_set_dyndbg_classes - classmap kparam setter + * @instr: string echo>d to sysfs, input depends on map_type + * @kp: kp->arg has state: bits/lvl, map, map_type + * + * enable/disable all class'd pr_debugs in the classmap. For LEVEL + * map-types, enforce * relative levels by bitpos. + * + * Returns: 0 or <0 if error. + */ +int param_set_dyndbg_classes(const char *instr, const struct kernel_param = *kp) +{ + return param_set_dyndbg_module_classes(instr, kp, NULL); +} EXPORT_SYMBOL(param_set_dyndbg_classes); =20 /** - * param_get_dyndbg_classes - classes reader + * param_get_dyndbg_classes - classmap kparam getter * @buffer: string description of controlled bits -> classes * @kp: kp->arg has state: bits, map * - * Reads last written state, underlying prdbg state may have been - * altered by direct >control. Displays 0x for DISJOINT, 0-N for - * LEVEL Returns: #chars written or <0 on error + * Reads last written state, underlying pr_debug states may have been + * altered by direct >control. Displays 0x for DISJOINT classmap + * types, 0-N for LEVEL types. + * + * Returns: ct of chars written or <0 on error */ int param_get_dyndbg_classes(char *buffer, const struct kernel_param *kp) { --=20 2.54.0 From nobody Sun Jun 14 01:34:53 2026 Received: from mail-oo1-f52.google.com (mail-oo1-f52.google.com [209.85.161.52]) (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 6EAF431E839 for ; Mon, 4 May 2026 20:45:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.52 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927534; cv=none; b=nu46fWdxRSqdFCjh/E1zmTm5DxIhsUgVLJ0s9mH9jg4VX1GS8fv9+MtLgDQMFtpb0OIhWbA746Z2vti+wIX8np7j8VICZZ3VmTs5UVEVmDD5Ql09b6fE99RAWqfoN3Qth49r/yRthhra70IszHN1KoY7SFxQwT/6RTXzoUUu5q4= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927534; c=relaxed/simple; bh=JZXjwW4jWxbmsrp9pcCx1mbkiF6OrJYXnqqrzYBS0w4=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=XrYm/PmVj2kSLRpgKoEqxoTPgJgol1uD7MdKHkMBd2XOYYCmqrfpkslgqu/J0AtQyQfPTRCJ9cgeOwgNK6Ukfb93pIOvZ7N4WJ/QiqqxK7uxjK9SUUQl4XDPPW4syzwJHuE2G+RtIiSPKompL1QetGHmzj9SB/MFKwFrESmnJRM= 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=LWte09Wt; arc=none smtp.client-ip=209.85.161.52 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="LWte09Wt" Received: by mail-oo1-f52.google.com with SMTP id 006d021491bc7-6948ff6b006so2357757eaf.2 for ; Mon, 04 May 2026 13:45:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777927528; x=1778532328; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=A6AWJq+iuX9rkBsQZzPPBkpT39IXEVqnsK+4ZJ/OL6o=; b=LWte09Wt6XJ6c/B7/0b2XsM/m3UfleHorw2z7e/ApSkGjkNZD5WdCdZ+bCMyCUKSUH qZPl+NrxkRwiJd61UHh5GyQmWkLdTq0bEWixlIpHIL0MNUttr/80Bv3X0EgMt//qtdLw G6IWFLnRTVyB8cp503nyypOk3nGHHeSvPH/8TiDK9x8UPDFYlt7F5fzpEmBorKzasXoA +xWZX15+ikXQT/USsc2HEqVaRYQmmRRcB2MjQq0lgCz52h51/g2QcKodtAqGz6P0/gyf rhOKcsPmlUAK5rXKmiBbRNybYGwVq5JBuI8JKitYfiOznoo6ThDCwgm58ZlRZuciV+xI 4hDA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777927528; x=1778532328; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=A6AWJq+iuX9rkBsQZzPPBkpT39IXEVqnsK+4ZJ/OL6o=; b=YA+yMcQ2abmW15+WPW91c6Mcq6XSaPTki46UcXRUpO8c9QpIcSdtHUzBvikEnpo1vR ccYNfdkf0p5bFWWHrZeAmdnt+ftedED/8Kfxm04V/bUTGzIFWflPbDTGbi6ZGgZxSpho EFW9wQUn33oAvOBFZqRHyvkOH84eYMokFgjM3xJYd8nl0rcoQgVceMiPOKUet2Bq/kS2 6ceuJ9QTZkKO/ttPyjTHcN60QxNR3Yy01+2bt2EnrhNObI7Q+1nhNzbQCwhnuBwrMMis mWvSUu4KzFED8Idaijl1MGbgRI9uDsEdY9gwwkhMBeLeOIZ3+R57LTR6Y2UgVqgFx1tI Zydg== X-Gm-Message-State: AOJu0YxShbq7Avcf0DZ6ml5OvHftmsJ5NoQPeShqRe3WzNIyB5EIGvRg Cy3IxLEjz8+lXOb54342WZ/O6bY7TNXhZku8sWLKTG165/f+9bNa6Dwl X-Gm-Gg: AeBDiesZQHeNFNhO/R6DNxigKzHwbsjk+i4eaUOPurHNfvCjCYReCeDYoA8udwuIc4t Dr84BwVUUWfbSl5Et11n1ecBOOwRzp2dazSYvLiynFfDaZnjR7j7TBswKopM9yeaNR/lcXf65F6 AF8v32b34TcRivD0V1PRGyYYManS3mUkf8Y3tn6XsbtDrQM4yYZJoPIQ2j4GHfkWlcI5+GS/p8T wpt5lDRaVu+fFm38qWIsMGrEFfCLrmkO0IXoSr1ZedwIABKEIFGkL32jew8f9fdDCJvg7Z5ynt+ 4hDsz8O0ydccUOefULz0GOO9Fd6LP5tNzAr6GB1DY6dwAsM7gPD16JHuwGBm+oR84qUWW1V6ah8 FN5Zs9JRlP31es8w8P9khNVsdcIqG5j0HWjCoykn6pxfYY+LBgFK2wN7vxmw3CHduCmwSC+Hh76 /yCFJSOFAON5SYPbO7IZCI/MOOkOoWq6wCjXW4a1ZCfO7KM8JfKOthGlvMExLgToAyJkiArzw0 X-Received: by 2002:a05:6820:210e:b0:696:7d51:79e3 with SMTP id 006d021491bc7-69697c60c61mr5959128eaf.42.1777927528202; Mon, 04 May 2026 13:45:28 -0700 (PDT) Received: from [100.82.231.29] (c-98-38-17-99.hsd1.co.comcast.net. [98.38.17.99]) by smtp.googlemail.com with ESMTPSA id 006d021491bc7-69689266bacsm7144713eaf.0.2026.05.04.13.45.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 13:45:27 -0700 (PDT) From: Jim Cromie Date: Mon, 04 May 2026 14:45:15 -0600 Subject: [PATCH 09/17] dyndbg: tighten fn-sig of ddebug_apply_class_bitmap 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: <20260504-dd-cleanups-2-v1-9-6fdd24040642@gmail.com> References: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> In-Reply-To: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> To: Andrew Morton , Jason Baron , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , Shuah Khan , Louis Chauvet Cc: linux-kernel@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=1777927513; l=3865; i=jim.cromie@gmail.com; s=20260203; h=from:subject:message-id; bh=JZXjwW4jWxbmsrp9pcCx1mbkiF6OrJYXnqqrzYBS0w4=; b=iqIVsPdjPxQ0kbii3QftSNVTypTv/hH5d4EWhD6WA8bVuPTvnPsVXpNzeMwKbYbEMmMTQAh0h 4R8GLfRD8FADhA9FAUUFYEwn/6j/0N9Dgg4Ibr1LWXbe9znvtswebss X-Developer-Key: i=jim.cromie@gmail.com; a=ed25519; pk=C6E5ODlPQo7ZBynATXH9wg7K6HxP0pIXyf4s38Qw0XE= old_bits arg is currently a pointer to the input bits, but this could allow inadvertent changes to the input by the fn. Disallow this. And constify new_bits while here. Reviewed-by: Louis Chauvet Signed-off-by: Jim Cromie --- lib/dynamic_debug.c | 21 +++++++++++---------- 1 file changed, 11 insertions(+), 10 deletions(-) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 4313c8803007..a18f4bc63473 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -607,7 +607,8 @@ static int ddebug_exec_queries(char *query, const char = *modname) =20 /* apply a new class-param setting */ static int ddebug_apply_class_bitmap(const struct ddebug_class_param *dcp, - unsigned long *new_bits, unsigned long *old_bits, + const unsigned long *new_bits, + const unsigned long old_bits, const char *query_modname) { #define QUERY_SIZE 128 @@ -616,12 +617,12 @@ static int ddebug_apply_class_bitmap(const struct dde= bug_class_param *dcp, int matches =3D 0; int bi, ct; =20 - if (*new_bits !=3D *old_bits) + if (*new_bits !=3D old_bits) v2pr_info("apply bitmap: 0x%lx to: 0x%lx for %s\n", *new_bits, - *old_bits, query_modname ?: "'*'"); + old_bits, query_modname ?: "'*'"); =20 for (bi =3D 0; bi < map->length; bi++) { - if (test_bit(bi, new_bits) =3D=3D test_bit(bi, old_bits)) + if (test_bit(bi, new_bits) =3D=3D test_bit(bi, &old_bits)) continue; =20 snprintf(query, QUERY_SIZE, "class %s %c%s", map->class_names[bi], @@ -633,9 +634,9 @@ static int ddebug_apply_class_bitmap(const struct ddebu= g_class_param *dcp, v2pr_info("bit_%d: %d matches on class: %s -> 0x%lx\n", bi, ct, map->class_names[bi], *new_bits); } - if (*new_bits !=3D *old_bits) + if (*new_bits !=3D old_bits) v2pr_info("applied bitmap: 0x%lx to: 0x%lx for %s\n", *new_bits, - *old_bits, query_modname ?: "'*'"); + old_bits, query_modname ?: "'*'"); =20 return matches; } @@ -691,7 +692,7 @@ static int param_set_dyndbg_classnames(const char *inst= r, const struct kernel_pa continue; } curr_bits ^=3D BIT(cls_id); - totct +=3D ddebug_apply_class_bitmap(dcp, &curr_bits, dcp->bits, NULL); + totct +=3D ddebug_apply_class_bitmap(dcp, &curr_bits, *dcp->bits, NULL); *dcp->bits =3D curr_bits; v2pr_info("%s: changed bit %d:%s\n", KP_NAME(kp), cls_id, map->class_names[cls_id]); @@ -701,7 +702,7 @@ static int param_set_dyndbg_classnames(const char *inst= r, const struct kernel_pa old_bits =3D CLASSMAP_BITMASK(*dcp->lvl); curr_bits =3D CLASSMAP_BITMASK(cls_id + (wanted ? 1 : 0 )); =20 - totct +=3D ddebug_apply_class_bitmap(dcp, &curr_bits, &old_bits, NULL); + totct +=3D ddebug_apply_class_bitmap(dcp, &curr_bits, old_bits, NULL); *dcp->lvl =3D (cls_id + (wanted ? 1 : 0)); v2pr_info("%s: changed bit-%d: \"%s\" %lx->%lx\n", KP_NAME(kp), cls_id, map->class_names[cls_id], old_bits, curr_bits); @@ -755,7 +756,7 @@ static int param_set_dyndbg_module_classes(const char *= instr, inrep &=3D CLASSMAP_BITMASK(map->length); } v2pr_info("bits:0x%lx > %s.%s\n", inrep, mod_name ?: "*", KP_NAME(kp)); - totct +=3D ddebug_apply_class_bitmap(dcp, &inrep, dcp->bits, mod_name); + totct +=3D ddebug_apply_class_bitmap(dcp, &inrep, *dcp->bits, mod_name); *dcp->bits =3D inrep; break; case DD_CLASS_TYPE_LEVEL_NUM: @@ -768,7 +769,7 @@ static int param_set_dyndbg_module_classes(const char *= instr, old_bits =3D CLASSMAP_BITMASK(*dcp->lvl); new_bits =3D CLASSMAP_BITMASK(inrep); v2pr_info("lvl:%ld bits:0x%lx > %s\n", inrep, new_bits, KP_NAME(kp)); - totct +=3D ddebug_apply_class_bitmap(dcp, &new_bits, &old_bits, mod_name= ); + totct +=3D ddebug_apply_class_bitmap(dcp, &new_bits, old_bits, mod_name); *dcp->lvl =3D inrep; break; default: --=20 2.54.0 From nobody Sun Jun 14 01:34:53 2026 Received: from mail-oo1-f50.google.com (mail-oo1-f50.google.com [209.85.161.50]) (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 E3E27246778 for ; Mon, 4 May 2026 20:45:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927533; cv=none; b=E7D6GU28G4x0A9bvJ6aTkQJ+lnyW9JXP00UyBu9jhjKORu6e76kii+oc4x5iMdndIt+L3ADmCeQdngus/RDMrFhcNV5A5MdgMtCfLCYTqsNUHuQKWx7KdnP/FRcGMl1nwzM5VCZ/HDqP+FINp6dG79VycCfK8EbZiIE21Zph74g= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927533; c=relaxed/simple; bh=YzpVlr+neWT2/LWkGMoyvfkqvUybg/U4Va9v6w4EBao=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=MWPqQppOfwxVm8ZW2iv00eROFgP2rzRnpDgM4wxHteL5wexYkGzetW+Ju2n/18TLSySAQ1aSQbUow+Ln7DPTp4qjrP3CXSWkLGpWWeB3BOkrgVhepikAiLQ241JjaOETVZD+axMpBue+0IDtHWGZBpO0f61Ad/g0H3UXFGv+aRY= 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=gWNmFoR/; arc=none smtp.client-ip=209.85.161.50 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="gWNmFoR/" Received: by mail-oo1-f50.google.com with SMTP id 006d021491bc7-6967080e6beso1332894eaf.2 for ; Mon, 04 May 2026 13:45:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777927530; x=1778532330; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=wim9cqsthvYPUEudyHNLJdRCqnGrz1B6yKCAEeqHKQ4=; b=gWNmFoR/r+RRFSfvPgkWY1bCzRqckrilykMfFS6SWkV7NYGAkRmZCndWCdsQayyUcC 3siNgwin+1sUuFU/P1pzwhxo2UG+o9nTOYm/9HbA9FWpTq704h/Hte4ZKt76KYPEWrtq WxW5WUlhvBR5lAYN12YszuxkGmonctUOepIy8yNoNyXDEDHBLyfOjhyX4GmqIm+npeyl WSC0qRrBM/LpFan21jVgmCBQBSCxvG7fouTHj/xGkO4rZhB4QV3ANR9rMvtE1rARn8P5 oxlRyPLZjoP2L0qJcve4pANdsh7C9hNIW5OSvdvWxV0fGIi6nI4O95gUf9p899S2oOHE I9Gg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777927530; x=1778532330; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=wim9cqsthvYPUEudyHNLJdRCqnGrz1B6yKCAEeqHKQ4=; b=qdZVRqXj7KYEIv/yN0vx/b4ibspPRCksVsvKdapSjE6q6b7kMQ5ZG4lhOwsPjxmUjI hCBfrnsAXiJF8k/D1m9Dic/BxGlIDy/H+fDjXznn2enM5cQiuPN5Dzyb75+NqRsOl0SF ggPY6fPdWKN1ZFzSy5H0aFf5FLruTijkb4OHsFUgZwhIzdXRWf1rIWfSKi4Z75VlE2g/ UegnaB9yrcIK6QwfMYwaF5/aBZMcVlvhEigmvEq3emz/cTFWEFO6X/46vX/Tdue/GivK 8oTa/Os0oZPpn6lxShMIrQbxx+iP6Mc8Fn8SMsfebKzsyv3L8vUkYK/tEw3n7gZUGGlm MEFQ== X-Gm-Message-State: AOJu0Yz4J+JdzETPnoEUqFa66hmDqgcwvIclWbbNZaiXvQsDQskcjUDV JGM8QlT6R2jqyWoWWz+nRDBh51L02P2NCYMQrvejTL0t/4Ouigf9nQF2uq88BvSl X-Gm-Gg: AeBDietKDccS2tP2qbvSASdHFizs0t5azyZiGXGEEvsUz2Blv9QJhCpIeUsRCaqqVbK DIho7acScporFVF2i79IQpZ9e498X1AN5X3j69mF6i8UXwi72/vpl/SUCwaUuzzQ/Y+EXB1SfnI Gzy3yQ7Ttr5r2yfyr3LvCHPbcXqzrFAGzD8DrRkZdZfOY97vtj+RLsORLHLAKuGOmuTAv1viR3X KQpDUzX3dWnIzkWXubqKPRJYJd87DoqkJvYRbkij4cXdQ5GwffPB6Nry+4Y+Lw/63xlaplaeqQ2 /O47R9+abh+rp8WhuIWA6L6Yh2kDvOGXMn4u0W0IEjxgMD5VyNgXxuq6c/x9v1hfHHysgiMLfCy 8Z5IHdnEFVusNHjqoPpWgYF7RA1V4UlwgMJhB98ocVhbpbcv04p1lOVrKF8RGe/t+5D7TtWKrpM 66rsrwSwT6xW03B1TaTN9wbdaFuT06Mym95Mt+r2iuFQmZBHCp+OL1fZPzUEWFhYS4M5ZtRn0aZ h0PuNZPT6U= X-Received: by 2002:a05:6820:16a6:b0:685:d435:1471 with SMTP id 006d021491bc7-696979c86d7mr5810090eaf.10.1777927529681; Mon, 04 May 2026 13:45:29 -0700 (PDT) Received: from [100.82.231.29] (c-98-38-17-99.hsd1.co.comcast.net. [98.38.17.99]) by smtp.googlemail.com with ESMTPSA id 006d021491bc7-69689266bacsm7144713eaf.0.2026.05.04.13.45.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 13:45:29 -0700 (PDT) From: Jim Cromie Date: Mon, 04 May 2026 14:45:16 -0600 Subject: [PATCH 10/17] dyndbg: replace classmap list with a vector 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: <20260504-dd-cleanups-2-v1-10-6fdd24040642@gmail.com> References: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> In-Reply-To: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> To: Andrew Morton , Jason Baron , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , Shuah Khan , Louis Chauvet Cc: linux-kernel@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=1777927513; l=6247; i=jim.cromie@gmail.com; s=20260203; h=from:subject:message-id; bh=YzpVlr+neWT2/LWkGMoyvfkqvUybg/U4Va9v6w4EBao=; b=Xdmn0YJItXbm6bnC/BTN5CwaHPz2R1X2hVi1LxvxVQ3JOz+xoR9SD3arQcO3wa2SIKiXYiFpH HEAIxQg15qTDsi1qRF0aVyx6PYq12W6mDI5A77AeZLtdtFbEuYICDDs X-Developer-Key: i=jim.cromie@gmail.com; a=ed25519; pk=C6E5ODlPQo7ZBynATXH9wg7K6HxP0pIXyf4s38Qw0XE= Classmaps are stored in an elf section/array, but currently are individually list-linked onto dyndbg's per-module ddebug_table for operation. This is unnecessary. Just like dyndbg's descriptors, classes are packed in compile order; so even with many builtin modules employing multiple classmaps, each modules' maps are packed contiguously, and can be treated as a array-start-address & array-length. So this drops the whole list building operation done in ddebug_attach_module_classes(), and removes the list-head members. The "select-by-modname" condition is reused to find the start,end of the subrange. NOTE: This "filter-by-modname" on classmaps should really be done in ddebug_add_module(1); ie at least one step closer to ddebug_init(2), which already splits up pr-debug descriptors into subranges by modname, then calls (1) on each. (2) knows nothing of classmaps currently, and doesn't need to. For now, just add comment. Reviewed-by: Louis Chauvet Signed-off-by: Jim Cromie --- include/linux/dynamic_debug.h | 1 - lib/dynamic_debug.c | 62 ++++++++++++++++++++++-----------------= ---- 2 files changed, 32 insertions(+), 31 deletions(-) diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index 92627a03b4d1..9fd36339db52 100644 --- a/include/linux/dynamic_debug.h +++ b/include/linux/dynamic_debug.h @@ -84,7 +84,6 @@ enum class_map_type { }; =20 struct ddebug_class_map { - struct list_head link; struct module *mod; const char *mod_name; /* needed for builtins */ const char **class_names; diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index a18f4bc63473..94a66c8537ab 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -45,10 +45,11 @@ extern struct ddebug_class_map __start___dyndbg_classes= []; extern struct ddebug_class_map __stop___dyndbg_classes[]; =20 struct ddebug_table { - struct list_head link, maps; + struct list_head link; const char *mod_name; - unsigned int num_ddebugs; struct _ddebug *ddebugs; + struct ddebug_class_map *classes; + unsigned int num_ddebugs, num_classes; }; =20 struct ddebug_query { @@ -149,12 +150,13 @@ static void vpr_info_dq(const struct ddebug_query *qu= ery, const char *msg) } =20 static struct ddebug_class_map *ddebug_find_valid_class(struct ddebug_tabl= e const *dt, - const char *class_string, int *class_id) + const char *class_string, + int *class_id) { struct ddebug_class_map *map; - int idx; + int i, idx; =20 - list_for_each_entry(map, &dt->maps, link) { + for (map =3D dt->classes, i =3D 0; i < dt->num_classes; i++, map++) { idx =3D match_string(map->class_names, map->length, class_string); if (idx >=3D 0) { *class_id =3D idx + map->base; @@ -165,7 +167,6 @@ static struct ddebug_class_map *ddebug_find_valid_class= (struct ddebug_table cons return NULL; } =20 -#define __outvar /* filled by callee */ /* * Search the tables for _ddebug's which match the given `query' and * apply the `flags' and `mask' to them. Returns number of matching @@ -227,7 +228,7 @@ static int ddebug_change(const struct ddebug_query *que= ry, unsigned int nfound =3D 0; struct flagsbuf fbuf, nbuf; struct ddebug_class_map *map =3D NULL; - int __outvar valid_class; + int valid_class; =20 /* search for matching ddebugs */ mutex_lock(&ddebug_lock); @@ -1134,9 +1135,10 @@ static void *ddebug_proc_next(struct seq_file *m, vo= id *p, loff_t *pos) =20 static const char *ddebug_class_name(struct ddebug_iter *iter, struct _dde= bug *dp) { - struct ddebug_class_map *map; + struct ddebug_class_map *map =3D iter->table->classes; + int i, nc =3D iter->table->num_classes; =20 - list_for_each_entry(map, &iter->table->maps, link) + for (i =3D 0; i < nc; i++, map++) if (class_in_range(dp->class_id, map)) return map->class_names[dp->class_id - map->base]; =20 @@ -1220,30 +1222,31 @@ static const struct proc_ops proc_fops =3D { .proc_write =3D ddebug_proc_write }; =20 -static void ddebug_attach_module_classes(struct ddebug_table *dt, - struct ddebug_class_map *classes, - int num_classes) +static void ddebug_attach_module_classes(struct ddebug_table *dt, struct _= ddebug_info *di) { struct ddebug_class_map *cm; - int i, j, ct =3D 0; + int i, nc =3D 0; =20 - for (cm =3D classes, i =3D 0; i < num_classes; i++, cm++) { + /* + * Find this module's classmaps in a subrange/wholerange of + * the builtin/modular classmap vector/section. Save the start + * and length of the subrange at its edges. + */ + for (cm =3D di->classes, i =3D 0; i < di->num_classes; i++, cm++) { =20 if (!strcmp(cm->mod_name, dt->mod_name)) { - - v2pr_info("class[%d]: module:%s base:%d len:%d ty:%d\n", i, - cm->mod_name, cm->base, cm->length, cm->map_type); - - for (j =3D 0; j < cm->length; j++) - v3pr_info(" %d: %d %s\n", j + cm->base, j, - cm->class_names[j]); - - list_add(&cm->link, &dt->maps); - ct++; + if (!nc) { + v2pr_info("start subrange, class[%d]: module:%s base:%d len:%d ty:%d\n= ", + i, cm->mod_name, cm->base, cm->length, cm->map_type); + dt->classes =3D cm; + } + nc++; } } - if (ct) - vpr_info("module:%s attached %d classes\n", dt->mod_name, ct); + if (nc) { + dt->num_classes =3D nc; + vpr_info("module:%s attached %d classes\n", dt->mod_name, nc); + } } =20 /* @@ -1275,10 +1278,9 @@ static int ddebug_add_module(struct _ddebug_info *di= , const char *modname) dt->num_ddebugs =3D di->num_descs; =20 INIT_LIST_HEAD(&dt->link); - INIT_LIST_HEAD(&dt->maps); =20 if (di->classes && di->num_classes) - ddebug_attach_module_classes(dt, di->classes, di->num_classes); + ddebug_attach_module_classes(dt, di); =20 mutex_lock(&ddebug_lock); list_add_tail(&dt->link, &ddebug_tables); @@ -1391,8 +1393,8 @@ static void ddebug_remove_all_tables(void) mutex_lock(&ddebug_lock); while (!list_empty(&ddebug_tables)) { struct ddebug_table *dt =3D list_entry(ddebug_tables.next, - struct ddebug_table, - link); + struct ddebug_table, + link); ddebug_table_free(dt); } mutex_unlock(&ddebug_lock); --=20 2.54.0 From nobody Sun Jun 14 01:34:53 2026 Received: from mail-oo1-f45.google.com (mail-oo1-f45.google.com [209.85.161.45]) (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 5A29831E85B for ; Mon, 4 May 2026 20:45:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927534; cv=none; b=bgpAnRIYVA0AC4fxFMDZxnNkHgmcDkmGe67JpnWDAueWIu9t0oA8MtDmT66+N0IDA720joYZY4lDJK7537PmOPC2xZ63gsvFN5F+M+6+JlZldITZorDALvDqeV4s/4jlRvMi7eTdCFJjDTqk4D4/pNFqBlBBrvidjVflTTxAOFU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927534; c=relaxed/simple; bh=NslGPf56TkgN4/j9izGGWGr472wtOkGpmHFdJWrry1U=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=QV6jxcv9e0zNm4RgqcC0AZkHC9xlIsGYeiPYZrztZS3PqvOfduqkW556wO7xgKH7ZwOd+kuVTfKleL4pNOTAhiO37tH7WFEYudlWM228XtjeWW4IdnUSmlfaCDZYq9kSSeHYuqmDiZ6DUFkc/fO8eCkyyWbKgezrr9y0Ay5BQGY= 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=dDZz7YGX; arc=none smtp.client-ip=209.85.161.45 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="dDZz7YGX" Received: by mail-oo1-f45.google.com with SMTP id 006d021491bc7-685017d0fbcso2462848eaf.3 for ; Mon, 04 May 2026 13:45:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777927531; x=1778532331; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=8qoclHCkjnqN+rteJqtNC7ysLMYwhIcJTEzsexq0zpA=; b=dDZz7YGXanxIpoIXidcrncu8nDnkpuOpavGtSFd3onU9Q/i7EV2NnAWJdyw8O7AmuH 12QXlZV6GdKRnMumEVNUBBnv9wFVY4BQcwVpd4n3vXbVLjijLXLH7xewCiSAfh/3fEYp C+jG2og4aOPMuGJSasJSWTXDoguKfp1Acq6zC70qbSHSdiuKAxvXIsM8l0vK8IGiybhQ 78glLg0TDjXXLnNfg6MGtDVgIRq+mwpcmlig1VDaqbK021CDf7tVg5dTXh0KFoYvnG6j 5dikwZGqM1x3RokddYDBVGnPRzreFwVtNfGndMF3heMmycX+Nto4FulE0IomIaHcoEp3 Arkw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777927531; x=1778532331; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=8qoclHCkjnqN+rteJqtNC7ysLMYwhIcJTEzsexq0zpA=; b=VRNaVEtPgCMqW+pBczkEH9sFPdbuBKgSPAIVw5lsjzMp2zeejI6Bu8eC09DOb/h72N 8TsUSgCldhMuStnutTaBuN564B9B2LiUn3St0Fu+ZWc6PgLuVihCakCHm47xTOW5spFD oTJX+QPURYjNIuBQZeehaCWI8p6vYeO2bAKz8V3w9rNFzeOsf2IK7ShqV4FG2p+M+Q6z eZZ2l2FJsFtirTeUTh6/bexcdhi2iBEEdr3qplGJ7ptQ0af0EManxD1iZXA2gBK11Uko F2JsNZJ7LRDUjwLbJRzFwk2735JVQCqcT0DNOHLs/GJQMEnjH0a9lMeOVSGd2o3dP+Eo K1tg== X-Gm-Message-State: AOJu0YzpVR6AJhPGLtADiCes35H9ww1Pr+Cg6ZtTAPnbqrrjGnZHm59R Xsi9HPMDwhWSHSCEFC6w6ShsOFmr9eO2WC5HHsibP36OY1EG4tGXQHg4 X-Gm-Gg: AeBDiev/sCZ+R9sT3dWl0IWSkkZ2IFX6vhDQS/XEzTTrFlGahnDh3Hb769QDskHopaG NVOUtFWJDeXFjGekvv3iSZfjZyIHW4FscwHqkM6ZJyaKPeqqGg62wDrO3qWTXvMsF5iSK3adnSR y550rqcY+bRy9AzrM/LBou80JaS7K3BPd6/xL4sYlP8PmK7hqZAwEp1NF90Qu5ZBx3y4K2t1Gye 9cHPHvpnRfu+1LLHtGY2DtyYexWeVIZrv4pXCD5iczGhnacXjm6H2SGylTXY5FfnjyZtJqa8tTu UDk8CDWKNBGE/BMb8kL51InQgrxVnEf0FioAdsGsjB2Tr0bsJ+4IHJ+qV73CKZKbarL/aJ/F1hj +dyjLNBkyFDgBd5Rxus8roEkJsCccQbZKf/VjkmMwFJ1zPwHhv/r5A3u5QtbuOaq875pG40PB0r bZjsXEUNXg034moXBtZynBO47THF8pzc4roOEiyMzl/Y4ulEmjOEMBuHIhFtzGnAvFj7wPfpe3 X-Received: by 2002:a4a:e909:0:b0:696:83be:84a1 with SMTP id 006d021491bc7-69697df6f52mr6282894eaf.56.1777927531300; Mon, 04 May 2026 13:45:31 -0700 (PDT) Received: from [100.82.231.29] (c-98-38-17-99.hsd1.co.comcast.net. [98.38.17.99]) by smtp.googlemail.com with ESMTPSA id 006d021491bc7-69689266bacsm7144713eaf.0.2026.05.04.13.45.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 13:45:30 -0700 (PDT) From: Jim Cromie Date: Mon, 04 May 2026 14:45:17 -0600 Subject: [PATCH 11/17] dyndbg: macrofy a 2-index for-loop pattern 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: <20260504-dd-cleanups-2-v1-11-6fdd24040642@gmail.com> References: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> In-Reply-To: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> To: Andrew Morton , Jason Baron , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , Shuah Khan , Louis Chauvet Cc: linux-kernel@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=1777927513; l=3514; i=jim.cromie@gmail.com; s=20260203; h=from:subject:message-id; bh=NslGPf56TkgN4/j9izGGWGr472wtOkGpmHFdJWrry1U=; b=aL9DILWqitpaXTi2Lq/XveMd/6MjFHAIaCLDStz6QGaHJLunCgyW01uKRPL1FfkVOTi1TSjzY eGisUcajPIfDpnllWPgO7j4IFinScltT4gwSEum6C7/DrErjEryYjIi X-Developer-Key: i=jim.cromie@gmail.com; a=ed25519; pk=C6E5ODlPQo7ZBynATXH9wg7K6HxP0pIXyf4s38Qw0XE= dynamic-debug currently has 2 __sections (__dyndbg, __dyndb_classes), struct _ddebug_info keeps track of them both, with 2 members each: _vec and _vec#_len. We need to loop over these sections, with index and record pointer, making ref to both _vec and _vec_len. This is already fiddly and error-prone, and will get worse as we add a 3rd section. Lets instead embed/abstract the fiddly-ness in the `for_subvec()` macro, and avoid repeating it going forward. This is a for-loop macro expander, so it syntactically expects to precede either a single statement or a { block } of them, and the usual typeof or do-while-0 tricks are unavailable to fix the multiple-expansion warning. The macro needs a lot from its caller: it needs 2 local vars, 1 of which is a ref to a contained struct with named members. To support these requirements, add: 1. __ASSERT_IS_LVALUE(_X): ie: ((void)sizeof((void)0, &(x))) 2. __ASSERT_HAS_VEC_MEMBERS(_X, _Y): compile-time check that the _Y "vector" exists ie: _X->_Y and _X->num_##_Y are lvalues. The for_subvec() macro then invokes these in the initialization of the for-loop; they disappear at runtime. Reviewed-by: Louis Chauvet Signed-off-by: Jim Cromie --- lib/dynamic_debug.c | 27 ++++++++++++++++++++++++--- 1 file changed, 24 insertions(+), 3 deletions(-) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 94a66c8537ab..8f614eba8ace 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -129,6 +129,28 @@ do { \ #define v3pr_info(fmt, ...) vnpr_info(3, fmt, ##__VA_ARGS__) #define v4pr_info(fmt, ...) vnpr_info(4, fmt, ##__VA_ARGS__) =20 +/* + * simplify a repeated for-loop pattern walking N steps in a T _vec + * member inside a struct _box. It expects int i and T *_sp to be + * declared in the caller. + * @_i: caller provided counter. + * @_sp: cursor into _vec, to examine each item. + * @_box: ptr to a struct containing @_vec member + * @_vec: name of a member in @_box + */ +#define __ASSERT_IS_LVALUE(x) ((void)sizeof((void)0, &(x))) +#define __ASSERT_HAS_VEC_MEMBER(_box, _vec) \ + (void)sizeof((_box)->_vec + (_box)->num_##_vec) + +#define for_subvec(_i, _sp, _box, _vec) \ + for (__ASSERT_IS_LVALUE(_i), \ + __ASSERT_IS_LVALUE(_sp), \ + __ASSERT_HAS_VEC_MEMBER(_box, _vec), \ + (_i) =3D 0, \ + (_sp) =3D (_box)->_vec; \ + (_i) < (_box)->num_##_vec; \ + (_i)++, (_sp)++) /* { block } */ + static void vpr_info_dq(const struct ddebug_query *query, const char *msg) { /* trim any trailing newlines */ @@ -156,7 +178,7 @@ static struct ddebug_class_map *ddebug_find_valid_class= (struct ddebug_table cons struct ddebug_class_map *map; int i, idx; =20 - for (map =3D dt->classes, i =3D 0; i < dt->num_classes; i++, map++) { + for_subvec(i, map, dt, classes) { idx =3D match_string(map->class_names, map->length, class_string); if (idx >=3D 0) { *class_id =3D idx + map->base; @@ -1232,8 +1254,7 @@ static void ddebug_attach_module_classes(struct ddebu= g_table *dt, struct _ddebug * the builtin/modular classmap vector/section. Save the start * and length of the subrange at its edges. */ - for (cm =3D di->classes, i =3D 0; i < di->num_classes; i++, cm++) { - + for_subvec(i, cm, di, classes) { if (!strcmp(cm->mod_name, dt->mod_name)) { if (!nc) { v2pr_info("start subrange, class[%d]: module:%s base:%d len:%d ty:%d\n= ", --=20 2.54.0 From nobody Sun Jun 14 01:34:53 2026 Received: from mail-ot1-f49.google.com (mail-ot1-f49.google.com [209.85.210.49]) (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 8C0442C21F1 for ; Mon, 4 May 2026 20:45:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.49 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927539; cv=none; b=sG3eFOFXbjJmuok4RX1vM6Xrvh4etnuT7poejP8LVVrktIkWonm+HcjCKQ9770mEeusCsfj1Vy0ecVewW+p0Q5ZwI8UOwm5TtXO7WIKeh1Kv/0zRntJv2i3sQcSkZxTmFoQYerppAJtFSWP+FPeAktSsOVok7Yvxve+sZOj9u4Q= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927539; c=relaxed/simple; bh=9/2llRQKRUUF2DLLB8X3d4vQqG/f1CjGYETLDFbrl6A=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=nhcydngofvpmWlSKHTYX0dAN1D3v+iqopTPW+F5Y2gKRnO/kVCvLOrO7KjraTZZzyIdQhkRQyEhjvokoI/SgFEcrvzIVZlrwriMk1tXd3++OB5whwsjFUo1XXBALGucaj4p3UOMQEYdeDf+6ll9v/BWlz9AxTkR6sv8oK8de12U= 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=AZSK3mh2; arc=none smtp.client-ip=209.85.210.49 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="AZSK3mh2" Received: by mail-ot1-f49.google.com with SMTP id 46e09a7af769-7d4be94eeacso5267678a34.2 for ; Mon, 04 May 2026 13:45:33 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777927532; x=1778532332; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=kSMFdzay3bJeOUeMkbmm2hqX+o3CbZrz1HC2bCNxt/g=; b=AZSK3mh2FpjL1vkGt7hVkVJri72m/IxhfCOvqEsiTnkPijURobyGgNWJMsfy+nYFPm 63NCxDyG+5JXlDmfopIk5nr+12hlBnYQ/OBSGKfl7ghmoiKMZMJWDItnEQPxa1MXXtCG xrXV7mWPLAy2qlHbECp1Uc6MvJjC9Ind459Y0+9PBY7TDkzjCRl6rAfTjPv8FCZWrQoL XwziCFzIuI6mkEk1q8rdmPRUu36ckJBGzwms7BzPi4XhbRKKlvLf2feeBWApnPR18sAV 9Wn7PDVlxBU7/DF94/p0IxJOKNOxM3Vz/R5BCvt+imGnVbn+HVioxGjvSzGg4dHK9Lu+ zIOw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777927532; x=1778532332; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=kSMFdzay3bJeOUeMkbmm2hqX+o3CbZrz1HC2bCNxt/g=; b=oSmLdy4IbLTWPd2ofrBZo91zj97zW2lY6ZbP8OnzUzOp5SSOqT4AiRowLUss7MhjnS /3zlnzVNAwHJlRHcBIGpJN6HcecV9oJ0TEB79EMeUD+0j1ewGvCo/OQV8hMkZ67zjWt2 dW7CzWakzaPcw9iq94pwnazEQdsQvVeHn4HfjOy2zobi+lsjcMOEqSx3XWoYbVi4KQei tCq6+LokKcjzJe0Z+38D09fjiNfAUduf0f1XQ0mxW4oMbkdP7QNLJEHLLowO9olnqktB Z7pVi/K2gnai4SwBE6p1nhpNj+pqDNzHsYkyz/Yx34RejlZzhg/uMeKqIUH6ZoVV8N95 i+rQ== X-Gm-Message-State: AOJu0YxE4lxdv7xupsuVmFnIuKDU08UNCmhtmNJkuOGa3vYXXxcmiYNT 8g1VIy6U/4xV9OOifCxgh9G+U7Y7P+yOdKKYby8ptn1F/VPtjkTbj64v X-Gm-Gg: AeBDievw4uS4KqyxZcmX9Wn+31Opbs/W+vPzpGwQnNCatCIeK3w3fKaQS0xZrZC9IVO Nz5pfJJUREuYjvuEKZfG83LtA+oPeHsxh/104P91Z51iOrgkKW5rcgieR1XHd0FyJnh2nYCJI+o bZhzpdJ7AIJKhfKq04RsPifrfgCxTZiSWHLdb5GoWqmkPCoEcixr5IxM5O/k8qKWXM3H37CA3WA 8JomGLBkd/0aKptC4tVAF4TWUu38FoKU0gys3zySV45j0Ou1f4lw/aCywsLvJ9hIOskZqUiMtwu VlSMvKQwvMWdfqLhmfEm/KprGA84JRJNneYjuPplKZnB6XuUc0hufboBMFckCW5/pqNoR+Uk4/8 ZFcGZxWDPjqdUXv7dQ1uajSiWVAS48b8r2KKFMibtCKR70A0HDfZt6wIBwyEO4tAyn+oSGXv+/O ZHCX/j/FvZb7//865klfy188ATJJy6k6ItsTxQtguMlgGNxobhY8f0Jwi3PkyRj2FZrfKFb62N X-Received: by 2002:a05:6820:81c9:b0:694:96b2:9947 with SMTP id 006d021491bc7-696979d8d5cmr5567876eaf.13.1777927532403; Mon, 04 May 2026 13:45:32 -0700 (PDT) Received: from [100.82.231.29] (c-98-38-17-99.hsd1.co.comcast.net. [98.38.17.99]) by smtp.googlemail.com with ESMTPSA id 006d021491bc7-69689266bacsm7144713eaf.0.2026.05.04.13.45.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 13:45:32 -0700 (PDT) From: Jim Cromie Date: Mon, 04 May 2026 14:45:18 -0600 Subject: [PATCH 12/17] dyndbg,module: make proper substructs in _ddebug_info 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: <20260504-dd-cleanups-2-v1-12-6fdd24040642@gmail.com> References: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> In-Reply-To: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> To: Andrew Morton , Jason Baron , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , Shuah Khan , Louis Chauvet Cc: linux-kernel@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=1777927513; l=16624; i=jim.cromie@gmail.com; s=20260203; h=from:subject:message-id; bh=9/2llRQKRUUF2DLLB8X3d4vQqG/f1CjGYETLDFbrl6A=; b=AZzBxaXj1XNjEKbqlNDrCgUq3X8wt5169KPSMuvkl45wLrzSgB4CjueOIDklznfJYN5G66bhR DMOkP64RsaSA1/5NbmoGyeQ7Piw8TVsRckpDA2xRMlhKIDzUdbciF8+ X-Developer-Key: i=jim.cromie@gmail.com; a=ed25519; pk=C6E5ODlPQo7ZBynATXH9wg7K6HxP0pIXyf4s38Qw0XE= recompose struct _ddebug_info, inserting proper sub-structs. The struct _ddebug_info has 2 pairs of _vec, num_##_vec fields, for descs and classes respectively. for_subvec() makes walking these vectors less cumbersome, now lets move those field pairs into their own "vec" structs: _ddebug_descs & _ddebug_class_maps, and re-compose struct _ddebug_info to contain them cleanly. This also lets us get rid of for_subvec()'s num_##_vec paste-up. Also recompose struct ddebug_table to contain a _ddebug_info. This reinforces its use as a cursor into relevant data for a builtin module, and access to the full _ddebug state for modules. NOTES: Fixup names: Normalize all struct names to "struct _ddebug_*" eliminating the minor/stupid variations created in classmaps-v1. Invariant: These vectors ref a contiguous subrange of __section memory in builtin/DATA or in loadable modules via mod->dyndbg_info; with guaranteed life-time for us. struct module contains a _ddebug_info field and module/main.c sets it up, so that gets adjusted rather obviously. Reviewed-by: Louis Chauvet Signed-off-by: Jim Cromie --- include/linux/dynamic_debug.h | 36 +++++++++----- kernel/module/main.c | 12 ++--- lib/dynamic_debug.c | 110 +++++++++++++++++++++-----------------= ---- lib/test_dynamic_debug.c | 2 +- 4 files changed, 86 insertions(+), 74 deletions(-) diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index 9fd36339db52..7a4bf40c1eb8 100644 --- a/include/linux/dynamic_debug.h +++ b/include/linux/dynamic_debug.h @@ -83,8 +83,8 @@ enum class_map_type { */ }; =20 -struct ddebug_class_map { - struct module *mod; +struct _ddebug_class_map { + struct module *mod; /* NULL for builtins */ const char *mod_name; /* needed for builtins */ const char **class_names; const int length; @@ -92,21 +92,33 @@ struct ddebug_class_map { enum class_map_type map_type; }; =20 -/* encapsulate linker provided built-in (or module) dyndbg data */ +/* + * @_ddebug_info: gathers module/builtin dyndbg_* __sections together. + * For builtins, it is used as a cursor, with the inner structs + * marking sub-vectors of the builtin __sections in DATA. + */ +struct _ddebug_descs { + struct _ddebug *start; + int len; +}; + +struct _ddebug_class_maps { + struct _ddebug_class_map *start; + int len; +}; + struct _ddebug_info { - struct _ddebug *descs; - struct ddebug_class_map *classes; - unsigned int num_descs; - unsigned int num_classes; + struct _ddebug_descs descs; + struct _ddebug_class_maps maps; }; =20 -struct ddebug_class_param { +struct _ddebug_class_param { union { unsigned long *bits; unsigned long *lvl; }; char flags[8]; - const struct ddebug_class_map *map; + const struct _ddebug_class_map *map; }; =20 /* @@ -125,7 +137,7 @@ struct ddebug_class_param { */ #define DECLARE_DYNDBG_CLASSMAP(_var, _maptype, _base, ...) \ static const char *_var##_classnames[] =3D { __VA_ARGS__ }; \ - static struct ddebug_class_map __aligned(8) __used \ + static struct _ddebug_class_map __aligned(8) __used \ __section("__dyndbg_classes") _var =3D { \ .mod =3D THIS_MODULE, \ .mod_name =3D KBUILD_MODNAME, \ @@ -253,7 +265,7 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor, * macro. */ #define _dynamic_func_call_cls(cls, fmt, func, ...) \ - __dynamic_func_call_cls(__UNIQUE_ID(ddebug), cls, fmt, func, ##__VA_ARGS_= _) + __dynamic_func_call_cls(__UNIQUE_ID(_ddebug), cls, fmt, func, ##__VA_ARGS= __) #define _dynamic_func_call(fmt, func, ...) \ _dynamic_func_call_cls(_DPRINTK_CLASS_DFLT, fmt, func, ##__VA_ARGS__) =20 @@ -263,7 +275,7 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor, * with precisely the macro's varargs. */ #define _dynamic_func_call_cls_no_desc(cls, fmt, func, ...) \ - __dynamic_func_call_cls_no_desc(__UNIQUE_ID(ddebug), cls, fmt, \ + __dynamic_func_call_cls_no_desc(__UNIQUE_ID(_ddebug), cls, fmt, \ func, ##__VA_ARGS__) #define _dynamic_func_call_no_desc(fmt, func, ...) \ _dynamic_func_call_cls_no_desc(_DPRINTK_CLASS_DFLT, fmt, \ diff --git a/kernel/module/main.c b/kernel/module/main.c index 46dd8d25a605..c2b6e70f2e77 100644 --- a/kernel/module/main.c +++ b/kernel/module/main.c @@ -2774,12 +2774,12 @@ static int find_module_sections(struct module *mod,= struct load_info *info) pr_warn("%s: Ignoring obsolete parameters\n", mod->name); =20 #ifdef CONFIG_DYNAMIC_DEBUG_CORE - mod->dyndbg_info.descs =3D section_objs(info, "__dyndbg", - sizeof(*mod->dyndbg_info.descs), - &mod->dyndbg_info.num_descs); - mod->dyndbg_info.classes =3D section_objs(info, "__dyndbg_classes", - sizeof(*mod->dyndbg_info.classes), - &mod->dyndbg_info.num_classes); + mod->dyndbg_info.descs.start =3D section_objs(info, "__dyndbg_descriptors= ", + sizeof(*mod->dyndbg_info.descs.start), + &mod->dyndbg_info.descs.len); + mod->dyndbg_info.maps.start =3D section_objs(info, "__dyndbg_class_maps", + sizeof(*mod->dyndbg_info.maps.start), + &mod->dyndbg_info.maps.len); #endif =20 return 0; diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 8f614eba8ace..83c5b27314da 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -41,15 +41,13 @@ =20 extern struct _ddebug __start___dyndbg[]; extern struct _ddebug __stop___dyndbg[]; -extern struct ddebug_class_map __start___dyndbg_classes[]; -extern struct ddebug_class_map __stop___dyndbg_classes[]; +extern struct _ddebug_class_map __start___dyndbg_classes[]; +extern struct _ddebug_class_map __stop___dyndbg_classes[]; =20 struct ddebug_table { struct list_head link; const char *mod_name; - struct _ddebug *ddebugs; - struct ddebug_class_map *classes; - unsigned int num_ddebugs, num_classes; + struct _ddebug_info info; }; =20 struct ddebug_query { @@ -136,19 +134,19 @@ do { \ * @_i: caller provided counter. * @_sp: cursor into _vec, to examine each item. * @_box: ptr to a struct containing @_vec member - * @_vec: name of a member in @_box + * @_vec: name of a vector member in @_box */ #define __ASSERT_IS_LVALUE(x) ((void)sizeof((void)0, &(x))) #define __ASSERT_HAS_VEC_MEMBER(_box, _vec) \ - (void)sizeof((_box)->_vec + (_box)->num_##_vec) + ((void)sizeof((_box)->_vec.start + (_box)->_vec.len)) =20 #define for_subvec(_i, _sp, _box, _vec) \ for (__ASSERT_IS_LVALUE(_i), \ __ASSERT_IS_LVALUE(_sp), \ __ASSERT_HAS_VEC_MEMBER(_box, _vec), \ (_i) =3D 0, \ - (_sp) =3D (_box)->_vec; \ - (_i) < (_box)->num_##_vec; \ + (_sp) =3D (_box)->_vec.start; \ + (_i) < (_box)->_vec.len; \ (_i)++, (_sp)++) /* { block } */ =20 static void vpr_info_dq(const struct ddebug_query *query, const char *msg) @@ -171,14 +169,14 @@ static void vpr_info_dq(const struct ddebug_query *qu= ery, const char *msg) query->first_lineno, query->last_lineno, query->class_string); } =20 -static struct ddebug_class_map *ddebug_find_valid_class(struct ddebug_tabl= e const *dt, +static struct _ddebug_class_map *ddebug_find_valid_class(struct ddebug_tab= le const *dt, const char *class_string, int *class_id) { - struct ddebug_class_map *map; + struct _ddebug_class_map *map; int i, idx; =20 - for_subvec(i, map, dt, classes) { + for_subvec(i, map, &dt->info, maps) { idx =3D match_string(map->class_names, map->length, class_string); if (idx >=3D 0) { *class_id =3D idx + map->base; @@ -249,7 +247,7 @@ static int ddebug_change(const struct ddebug_query *que= ry, unsigned int newflags; unsigned int nfound =3D 0; struct flagsbuf fbuf, nbuf; - struct ddebug_class_map *map =3D NULL; + struct _ddebug_class_map *map =3D NULL; int valid_class; =20 /* search for matching ddebugs */ @@ -270,8 +268,8 @@ static int ddebug_change(const struct ddebug_query *que= ry, valid_class =3D _DPRINTK_CLASS_DFLT; } =20 - for (i =3D 0; i < dt->num_ddebugs; i++) { - struct _ddebug *dp =3D &dt->ddebugs[i]; + for (i =3D 0; i < dt->info.descs.len; i++) { + struct _ddebug *dp =3D &dt->info.descs.start[i]; =20 if (!ddebug_match_desc(query, dp, valid_class)) continue; @@ -629,14 +627,14 @@ static int ddebug_exec_queries(char *query, const cha= r *modname) } =20 /* apply a new class-param setting */ -static int ddebug_apply_class_bitmap(const struct ddebug_class_param *dcp, +static int ddebug_apply_class_bitmap(const struct _ddebug_class_param *dcp, const unsigned long *new_bits, const unsigned long old_bits, const char *query_modname) { #define QUERY_SIZE 128 char query[QUERY_SIZE]; - const struct ddebug_class_map *map =3D dcp->map; + const struct _ddebug_class_map *map =3D dcp->map; int matches =3D 0; int bi, ct; =20 @@ -672,8 +670,8 @@ static int ddebug_apply_class_bitmap(const struct ddebu= g_class_param *dcp, /* accept comma-separated-list of [+-] classnames */ static int param_set_dyndbg_classnames(const char *instr, const struct ker= nel_param *kp) { - const struct ddebug_class_param *dcp =3D kp->arg; - const struct ddebug_class_map *map =3D dcp->map; + const struct _ddebug_class_param *dcp =3D kp->arg; + const struct _ddebug_class_map *map =3D dcp->map; unsigned long curr_bits, old_bits; char *cl_str, *p, *tmp; int cls_id, totct =3D 0; @@ -743,8 +741,8 @@ static int param_set_dyndbg_module_classes(const char *= instr, const struct kernel_param *kp, const char *mod_name) { - const struct ddebug_class_param *dcp =3D kp->arg; - const struct ddebug_class_map *map =3D dcp->map; + const struct _ddebug_class_param *dcp =3D kp->arg; + const struct _ddebug_class_map *map =3D dcp->map; unsigned long inrep, new_bits, old_bits; int rc, totct =3D 0; =20 @@ -831,8 +829,8 @@ EXPORT_SYMBOL(param_set_dyndbg_classes); */ int param_get_dyndbg_classes(char *buffer, const struct kernel_param *kp) { - const struct ddebug_class_param *dcp =3D kp->arg; - const struct ddebug_class_map *map =3D dcp->map; + const struct _ddebug_class_param *dcp =3D kp->arg; + const struct _ddebug_class_map *map =3D dcp->map; =20 switch (map->map_type) { =20 @@ -1083,8 +1081,8 @@ static struct _ddebug *ddebug_iter_first(struct ddebu= g_iter *iter) } iter->table =3D list_entry(ddebug_tables.next, struct ddebug_table, link); - iter->idx =3D iter->table->num_ddebugs; - return &iter->table->ddebugs[--iter->idx]; + iter->idx =3D iter->table->info.descs.len; + return &iter->table->info.descs.start[--iter->idx]; } =20 /* @@ -1105,10 +1103,10 @@ static struct _ddebug *ddebug_iter_next(struct ddeb= ug_iter *iter) } iter->table =3D list_entry(iter->table->link.next, struct ddebug_table, link); - iter->idx =3D iter->table->num_ddebugs; + iter->idx =3D iter->table->info.descs.len; --iter->idx; } - return &iter->table->ddebugs[iter->idx]; + return &iter->table->info.descs.start[iter->idx]; } =20 /* @@ -1152,16 +1150,19 @@ static void *ddebug_proc_next(struct seq_file *m, v= oid *p, loff_t *pos) return dp; } =20 -#define class_in_range(class_id, map) \ - (class_id >=3D map->base && class_id < map->base + map->length) +static bool ddebug_class_in_range(const int class_id, const struct _ddebug= _class_map *map) +{ + return (class_id >=3D map->base && + class_id < map->base + map->length); +} =20 -static const char *ddebug_class_name(struct ddebug_iter *iter, struct _dde= bug *dp) +static const char *ddebug_class_name(struct ddebug_table *dt, struct _ddeb= ug *dp) { - struct ddebug_class_map *map =3D iter->table->classes; - int i, nc =3D iter->table->num_classes; + struct _ddebug_class_map *map; + int i; =20 - for (i =3D 0; i < nc; i++, map++) - if (class_in_range(dp->class_id, map)) + for_subvec(i, map, &dt->info, maps) + if (ddebug_class_in_range(dp->class_id, map)) return map->class_names[dp->class_id - map->base]; =20 return NULL; @@ -1194,7 +1195,7 @@ static int ddebug_proc_show(struct seq_file *m, void = *p) seq_putc(m, '"'); =20 if (dp->class_id !=3D _DPRINTK_CLASS_DFLT) { - class =3D ddebug_class_name(iter, dp); + class =3D ddebug_class_name(iter->table, dp); if (class) seq_printf(m, " class:%s", class); else @@ -1246,7 +1247,7 @@ static const struct proc_ops proc_fops =3D { =20 static void ddebug_attach_module_classes(struct ddebug_table *dt, struct _= ddebug_info *di) { - struct ddebug_class_map *cm; + struct _ddebug_class_map *cm; int i, nc =3D 0; =20 /* @@ -1254,18 +1255,18 @@ static void ddebug_attach_module_classes(struct dde= bug_table *dt, struct _ddebug * the builtin/modular classmap vector/section. Save the start * and length of the subrange at its edges. */ - for_subvec(i, cm, di, classes) { + for_subvec(i, cm, di, maps) { if (!strcmp(cm->mod_name, dt->mod_name)) { if (!nc) { v2pr_info("start subrange, class[%d]: module:%s base:%d len:%d ty:%d\n= ", i, cm->mod_name, cm->base, cm->length, cm->map_type); - dt->classes =3D cm; + dt->info.maps.start =3D cm; } nc++; } } if (nc) { - dt->num_classes =3D nc; + dt->info.maps.len =3D nc; vpr_info("module:%s attached %d classes\n", dt->mod_name, nc); } } @@ -1278,10 +1279,10 @@ static int ddebug_add_module(struct _ddebug_info *d= i, const char *modname) { struct ddebug_table *dt; =20 - if (!di->num_descs) + if (!di->descs.len) return 0; =20 - v3pr_info("add-module: %s %d sites\n", modname, di->num_descs); + v3pr_info("add-module: %s %d sites\n", modname, di->descs.len); =20 dt =3D kzalloc_obj(*dt); if (dt =3D=3D NULL) { @@ -1295,19 +1296,18 @@ static int ddebug_add_module(struct _ddebug_info *d= i, const char *modname) * this struct ddebug_table. */ dt->mod_name =3D modname; - dt->ddebugs =3D di->descs; - dt->num_ddebugs =3D di->num_descs; + dt->info =3D *di; =20 INIT_LIST_HEAD(&dt->link); =20 - if (di->classes && di->num_classes) + if (di->maps.len) ddebug_attach_module_classes(dt, di); =20 mutex_lock(&ddebug_lock); list_add_tail(&dt->link, &ddebug_tables); mutex_unlock(&ddebug_lock); =20 - vpr_info("%3u debug prints in module %s\n", di->num_descs, modname); + vpr_info("%3u debug prints in module %s\n", di->descs.len, modname); return 0; } =20 @@ -1454,10 +1454,10 @@ static int __init dynamic_debug_init(void) char *cmdline; =20 struct _ddebug_info di =3D { - .descs =3D __start___dyndbg, - .classes =3D __start___dyndbg_classes, - .num_descs =3D __stop___dyndbg - __start___dyndbg, - .num_classes =3D __stop___dyndbg_classes - __start___dyndbg_classes, + .descs.start =3D __start___dyndbg, + .maps.start =3D __start___dyndbg_classes, + .descs.len =3D __stop___dyndbg - __start___dyndbg, + .maps.len =3D __stop___dyndbg_classes - __start___dyndbg_classes, }; =20 #ifdef CONFIG_MODULES @@ -1486,8 +1486,8 @@ static int __init dynamic_debug_init(void) =20 if (strcmp(modname, iter->modname)) { mod_ct++; - di.num_descs =3D mod_sites; - di.descs =3D iter_mod_start; + di.descs.len =3D mod_sites; + di.descs.start =3D iter_mod_start; ret =3D ddebug_add_module(&di, modname); if (ret) goto out_err; @@ -1497,8 +1497,8 @@ static int __init dynamic_debug_init(void) iter_mod_start =3D iter; } } - di.num_descs =3D mod_sites; - di.descs =3D iter_mod_start; + di.descs.len =3D mod_sites; + di.descs.start =3D iter_mod_start; ret =3D ddebug_add_module(&di, modname); if (ret) goto out_err; @@ -1508,8 +1508,8 @@ static int __init dynamic_debug_init(void) i, mod_ct, (int)((mod_ct * sizeof(struct ddebug_table)) >> 10), (int)((i * sizeof(struct _ddebug)) >> 10)); =20 - if (di.num_classes) - v2pr_info(" %d builtin ddebug class-maps\n", di.num_classes); + if (di.maps.len) + v2pr_info(" %d builtin ddebug class-maps\n", di.maps.len); =20 /* now that ddebug tables are loaded, process all boot args * again to find and activate queries given in dyndbg params. diff --git a/lib/test_dynamic_debug.c b/lib/test_dynamic_debug.c index 77c2a669b6af..36c9d9acbf6b 100644 --- a/lib/test_dynamic_debug.c +++ b/lib/test_dynamic_debug.c @@ -41,7 +41,7 @@ module_param_cb(do_prints, ¶m_ops_do_prints, NULL, 06= 00); */ #define DD_SYS_WRAP(_model, _flags) \ static unsigned long bits_##_model; \ - static struct ddebug_class_param _flags##_model =3D { \ + static struct _ddebug_class_param _flags##_model =3D { \ .bits =3D &bits_##_model, \ .flags =3D #_flags, \ .map =3D &map_##_model, \ --=20 2.54.0 From nobody Sun Jun 14 01:34:53 2026 Received: from mail-oo1-f46.google.com (mail-oo1-f46.google.com [209.85.161.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 073FE324718 for ; Mon, 4 May 2026 20:45:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.46 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927539; cv=none; b=AUftSd6swRY0y1i8Wf1y+/SCOosHbfjbyl6GnQAwd6Ev4da3XW0APOhzh5M2acRHUKlb9uwUD3PwqAwBBlBFraxn20GMSW6t7TRLk7pBoViQIFB3JPhvZ/ul59K2kdwQ9EC9YSx+LyF6BQ/4yOYtYK6rjd+nrpETE0jDE0w7GYU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927539; c=relaxed/simple; bh=cvpyPjgBUZvJMXWxvbAPJHHdCeJYjPF8j74Dxznr/8s=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=ovfwxPEZLewKV3SbndjaDVrvjlIlW0NnvL9+UGVP3jfhXKROjGeTb8SGxdF87yuYKiC6EYrfxJUK+f79owuLxqIBJ2qHuBwC07QE5SKOJVAt5zRlio5USYk6jpbU5xrx27rLGG9dVAOPE4+x+bl+APOInMyAM7T0cVEOwtQ5J24= 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=ASaDpn5w; arc=none smtp.client-ip=209.85.161.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="ASaDpn5w" Received: by mail-oo1-f46.google.com with SMTP id 006d021491bc7-6967080e6beso1332914eaf.2 for ; Mon, 04 May 2026 13:45:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777927533; x=1778532333; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=+iZawPPQ+X0bNikqrWnKmDXKxMGCDUmFmcpPVDJmjyY=; b=ASaDpn5wA4gWGDrf0Kl8uWNHLeXv+bTtBCKiBOBe3Iwc/7PkYl850tuQo2qe+/meA0 z92SqfFhWlYaW6WE1vZ+CcAc4zUh0x6D9jVf8cd+0tVdBHjwPukCJueYODe8WLxIDC0T e7AVEpG7eHMxc9N3il/MU+VsSH/zB8R2V0uVspLiPJABlQa1e/Nz4nHmATTidqaa7Rfp dsEAmY+NaKW9Wa0oOJgC7wufudAxP4itvtFppUgiFOR28G1GbAr6zjRoxG7JcAYyPSSj g03qRQyYcOvJwEZx7pyFyq7J8nPB16k21Dg/uq9KGiiHT9m8TpH7Altg6dN4o8wm8fbW 7+hQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777927533; x=1778532333; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=+iZawPPQ+X0bNikqrWnKmDXKxMGCDUmFmcpPVDJmjyY=; b=RPDSyXWqXRdnSAIteGxOjrJr3xwjphp5Lebl+MpKw+STDsyGW8E2FQUPWPvElXjYtd ccjBzic61Hx+xu+hkG+CMP1dqdvsT3ow2qhDCluOrjcaMnp0jP2jcZ5IVPz0PvD1OPeV WVmySI+d7TGFwv4GKmZ/aTSOf9V2GEwui0hnYV4O7QnohLdxev8jUYCCB6+OS/qprMHq 8fZ2klJ73H9LOCJC9/9iCiWizeY2rksVQ+5NywN8ZzTtDXsBvic2QXcSLUfNyfTaY0s9 CyIykG5PX63XZuUajdBTDtLU1UkC30QoRABy7ayesDwZkvFn5JDMLJh0/YC9Tw+fBahA /rPQ== X-Gm-Message-State: AOJu0YxSVNPUZyoxCn1On3ZDQU2Kgcw6pmwRKuMz6nh1yXoY86nz0hde 2G4ZFR5Q7Eu3BvpxvdY/DNZnH+SXqvZKds3W7hqzNO/ThXt3KF7NRxuy X-Gm-Gg: AeBDiesGo3d4EGJLPhwsmy+XYEYl/DX/gN2qiMCoS3R69tCNSgnJlazRw+V+SeAaUw+ dDHaJ/8x6kIvTloFJw2Expu2dtsJGwMu5a+3/ooSdBfHJyqGmkPr5nzf1sB23qNd8IUZ53KCRyZ 0UztInXhGi8mhjDz0tqvORtu7wnWdQzu/5RD1BOsQxM3KI84T74U+Qn+bIpLJnj/sI5GVLUlSUJ XXkmoVRCufXzMPZulCN4eiW6ed5+s8hcDKFMLZNEMX0MqlHfe4CBHfFq31ivAL//MzMph1qgsa+ ik8t4DnsiZisp4n1e9a/x1UAT5nZAglxUfFzDbTUP6V0vsFRJNGsrkxAHabRZhKL/iN6hHg9H7W HW3xg0b0k+z6ExNfLyXfn2e3OUrgvzYTD4ZlLGACUtmxlImT+4pXZxsZI21IHSeCJ3hypOGQ8n9 lf6HEWkmUhI02j/bb35johBiDfqomRj5q+wDAmHK/CBV3sy40YlM6+rTh/d4TiZfXmQTgqKTQD X-Received: by 2002:a05:6820:2214:b0:696:1450:ff14 with SMTP id 006d021491bc7-69697c64d5fmr5570398eaf.37.1777927533407; Mon, 04 May 2026 13:45:33 -0700 (PDT) Received: from [100.82.231.29] (c-98-38-17-99.hsd1.co.comcast.net. [98.38.17.99]) by smtp.googlemail.com with ESMTPSA id 006d021491bc7-69689266bacsm7144713eaf.0.2026.05.04.13.45.32 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 13:45:33 -0700 (PDT) From: Jim Cromie Date: Mon, 04 May 2026 14:45:19 -0600 Subject: [PATCH 13/17] dyndbg: move mod_name down from struct ddebug_table to _ddebug_info 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: <20260504-dd-cleanups-2-v1-13-6fdd24040642@gmail.com> References: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> In-Reply-To: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> To: Andrew Morton , Jason Baron , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , Shuah Khan , Louis Chauvet Cc: linux-kernel@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=1777927513; l=7701; i=jim.cromie@gmail.com; s=20260203; h=from:subject:message-id; bh=cvpyPjgBUZvJMXWxvbAPJHHdCeJYjPF8j74Dxznr/8s=; b=gGm7NM5Z53+s6mQeyZ3eOhd7I+c2zrov3fuZtR3kvuJGMbp1FsRdwJg/yxIU1eSPQ6b+pHLZB oDV+KfE3Wx0DS6iG+/RBAYW3DROE5RQXNmD9Hy3uiWqrfGfYPETGaLc X-Developer-Key: i=jim.cromie@gmail.com; a=ed25519; pk=C6E5ODlPQo7ZBynATXH9wg7K6HxP0pIXyf4s38Qw0XE= struct _ddebug_info already has most of dyndbg's info for a module; push debug_table.mod_name down into it, finishing the encapsulation. This allows refactoring several callchains, passing &_ddebug_info instead of &ddebug_table, and hoisting the "&dt->info" deref up instead of repeating it thru the callchans ddebug_table contains a _ddebug_info member, so its users keep access to mod_name, just now with "->info." added in. In static ddebug_add_module(&di), reinforce the cursor-model by dropping the modname arg, and setting di->mod_name at each caller. Reviewed-by: Louis Chauvet Signed-off-by: Jim Cromie --- v12 . moved up 1 position in series, ahead of hoist... --- include/linux/dynamic_debug.h | 1 + lib/dynamic_debug.c | 50 ++++++++++++++++++++++-----------------= ---- 2 files changed, 27 insertions(+), 24 deletions(-) diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index 7a4bf40c1eb8..7d60da0b9506 100644 --- a/include/linux/dynamic_debug.h +++ b/include/linux/dynamic_debug.h @@ -108,6 +108,7 @@ struct _ddebug_class_maps { }; =20 struct _ddebug_info { + const char *mod_name; struct _ddebug_descs descs; struct _ddebug_class_maps maps; }; diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 83c5b27314da..4065c57637f2 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -46,7 +46,6 @@ extern struct _ddebug_class_map __stop___dyndbg_classes[]; =20 struct ddebug_table { struct list_head link; - const char *mod_name; struct _ddebug_info info; }; =20 @@ -253,10 +252,11 @@ static int ddebug_change(const struct ddebug_query *q= uery, /* search for matching ddebugs */ mutex_lock(&ddebug_lock); list_for_each_entry(dt, &ddebug_tables, link) { + struct _ddebug_info *di =3D &dt->info; =20 /* match against the module name */ if (query->module && - !match_wildcard(query->module, dt->mod_name)) + !match_wildcard(query->module, di->mod_name)) continue; =20 if (query->class_string) { @@ -268,8 +268,8 @@ static int ddebug_change(const struct ddebug_query *que= ry, valid_class =3D _DPRINTK_CLASS_DFLT; } =20 - for (i =3D 0; i < dt->info.descs.len; i++) { - struct _ddebug *dp =3D &dt->info.descs.start[i]; + for (i =3D 0; i < di->descs.len; i++) { + struct _ddebug *dp =3D &di->descs.start[i]; =20 if (!ddebug_match_desc(query, dp, valid_class)) continue; @@ -289,7 +289,7 @@ static int ddebug_change(const struct ddebug_query *que= ry, #endif v4pr_info("changed %s:%d [%s]%s %s =3D> %s\n", trim_prefix(dp->filename), dp->lineno, - dt->mod_name, dp->function, + di->mod_name, dp->function, ddebug_describe_flags(dp->flags, &fbuf), ddebug_describe_flags(newflags, &nbuf)); dp->flags =3D newflags; @@ -1156,12 +1156,12 @@ static bool ddebug_class_in_range(const int class_i= d, const struct _ddebug_class class_id < map->base + map->length); } =20 -static const char *ddebug_class_name(struct ddebug_table *dt, struct _ddeb= ug *dp) +static const char *ddebug_class_name(struct _ddebug_info *di, struct _ddeb= ug *dp) { struct _ddebug_class_map *map; int i; =20 - for_subvec(i, map, &dt->info, maps) + for_subvec(i, map, di, maps) if (ddebug_class_in_range(dp->class_id, map)) return map->class_names[dp->class_id - map->base]; =20 @@ -1189,13 +1189,13 @@ static int ddebug_proc_show(struct seq_file *m, voi= d *p) =20 seq_printf(m, "%s:%u [%s]%s =3D%s \"", trim_prefix(dp->filename), dp->lineno, - iter->table->mod_name, dp->function, + iter->table->info.mod_name, dp->function, ddebug_describe_flags(dp->flags, &flags)); seq_escape_str(m, dp->format, ESCAPE_SPACE, "\t\r\n\""); seq_putc(m, '"'); =20 if (dp->class_id !=3D _DPRINTK_CLASS_DFLT) { - class =3D ddebug_class_name(iter->table, dp); + class =3D ddebug_class_name(&iter->table->info, dp); if (class) seq_printf(m, " class:%s", class); else @@ -1256,7 +1256,7 @@ static void ddebug_attach_module_classes(struct ddebu= g_table *dt, struct _ddebug * and length of the subrange at its edges. */ for_subvec(i, cm, di, maps) { - if (!strcmp(cm->mod_name, dt->mod_name)) { + if (!strcmp(cm->mod_name, dt->info.mod_name)) { if (!nc) { v2pr_info("start subrange, class[%d]: module:%s base:%d len:%d ty:%d\n= ", i, cm->mod_name, cm->base, cm->length, cm->map_type); @@ -1267,7 +1267,7 @@ static void ddebug_attach_module_classes(struct ddebu= g_table *dt, struct _ddebug } if (nc) { dt->info.maps.len =3D nc; - vpr_info("module:%s attached %d classes\n", dt->mod_name, nc); + vpr_info("module:%s attached %d classes\n", dt->info.mod_name, nc); } } =20 @@ -1275,27 +1275,26 @@ static void ddebug_attach_module_classes(struct dde= bug_table *dt, struct _ddebug * Allocate a new ddebug_table for the given module * and add it to the global list. */ -static int ddebug_add_module(struct _ddebug_info *di, const char *modname) +static int ddebug_add_module(struct _ddebug_info *di) { struct ddebug_table *dt; =20 if (!di->descs.len) return 0; =20 - v3pr_info("add-module: %s %d sites\n", modname, di->descs.len); + v3pr_info("add-module: %s %d sites\n", di->mod_name, di->descs.len); =20 dt =3D kzalloc_obj(*dt); if (dt =3D=3D NULL) { - pr_err("error adding module: %s\n", modname); + pr_err("error adding module: %s\n", di->mod_name); return -ENOMEM; } /* - * For built-in modules, name lives in .rodata and is - * immortal. For loaded modules, name points at the name[] - * member of struct module, which lives at least as long as - * this struct ddebug_table. + * For built-in modules, name (as supplied in di by its + * callers) lives in .rodata and is immortal. For loaded + * modules, name points at the name[] member of struct module, + * which lives at least as long as this struct ddebug_table. */ - dt->mod_name =3D modname; dt->info =3D *di; =20 INIT_LIST_HEAD(&dt->link); @@ -1307,7 +1306,7 @@ static int ddebug_add_module(struct _ddebug_info *di,= const char *modname) list_add_tail(&dt->link, &ddebug_tables); mutex_unlock(&ddebug_lock); =20 - vpr_info("%3u debug prints in module %s\n", di->descs.len, modname); + vpr_info("%3u debug prints in module %s\n", di->descs.len, di->mod_name); return 0; } =20 @@ -1370,7 +1369,7 @@ static int ddebug_remove_module(const char *mod_name) =20 mutex_lock(&ddebug_lock); list_for_each_entry_safe(dt, nextdt, &ddebug_tables, link) { - if (dt->mod_name =3D=3D mod_name) { + if (dt->info.mod_name =3D=3D mod_name) { ddebug_table_free(dt); ret =3D 0; break; @@ -1390,7 +1389,8 @@ static int ddebug_module_notify(struct notifier_block= *self, unsigned long val, =20 switch (val) { case MODULE_STATE_COMING: - ret =3D ddebug_add_module(&mod->dyndbg_info, mod->name); + mod->dyndbg_info.mod_name =3D mod->name; + ret =3D ddebug_add_module(&mod->dyndbg_info); if (ret) WARN(1, "Failed to allocate memory: dyndbg may not work properly.\n"); break; @@ -1488,7 +1488,8 @@ static int __init dynamic_debug_init(void) mod_ct++; di.descs.len =3D mod_sites; di.descs.start =3D iter_mod_start; - ret =3D ddebug_add_module(&di, modname); + di.mod_name =3D modname; + ret =3D ddebug_add_module(&di); if (ret) goto out_err; =20 @@ -1499,7 +1500,8 @@ static int __init dynamic_debug_init(void) } di.descs.len =3D mod_sites; di.descs.start =3D iter_mod_start; - ret =3D ddebug_add_module(&di, modname); + di.mod_name =3D modname; + ret =3D ddebug_add_module(&di); if (ret) goto out_err; =20 --=20 2.54.0 From nobody Sun Jun 14 01:34:53 2026 Received: from mail-oo1-f42.google.com (mail-oo1-f42.google.com [209.85.161.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 1EDBE327BEC for ; Mon, 4 May 2026 20:45:36 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.42 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927541; cv=none; b=PTfOYJ80NAd0h6fSOm6ZWYhw5JE5UDZJhs+ekBdni/z4ksLegESUEd3CfNfU9MhKHdgHXkIhyFmHMtgb6Gstor73Aeqnif9XPrpzh5sVzPSg21a/6eIEIegOhIYCNuW3JDOhcGDLxzHpyhVyweaxkbBL/QIf0CpSgH98ZSCwoFw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927541; c=relaxed/simple; bh=DKL3NEYNkLT6AeW3tGBzlBU8SoqnCLFTHnLDJZrfZZo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dq2VyvKDMD0ZA+CnpiN2j/6GWCAO1do+WPkoWZYL8T2yuLXGWl1vpqu+1lf8jSkLuMWB3W5GS57T1e2MtzLW7LfdJQ0PeIF2N4k3nZV01hYHKDtnlKNquPMlCblNuQlNZVPLXdTm8V17prRaU0ydSsftKBgUEvBK/Id4WdEX9G4= 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=EYJdfYms; arc=none smtp.client-ip=209.85.161.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="EYJdfYms" Received: by mail-oo1-f42.google.com with SMTP id 006d021491bc7-6949831a7bcso2503807eaf.1 for ; Mon, 04 May 2026 13:45:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777927534; x=1778532334; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Br7qcpiGPSj2JmE5U3/ZGo89ps4boWTHGEyMJP8s7vk=; b=EYJdfYmsY86yU857B0kr9oeFzhsOmB4xULl+ZYFRyJo+KmhDkGfgu1FUkHVyvj9+Jl dNRoQJ+9L8Ie4tNm4c999U5qZT+R2yji87yhpsYtXmSi/vrLgaGQySAFvkJFa0OI/CzQ raaTqvHy0BdU/uLni5ZRQnu2imEVzl2ab+a4aBKA9MsUuWBQmJJklUxY4vOT72Rtzzm5 cyy7lq35ca+soLPY93HeqguUkVmF4tmJZr9/26a2r9YiHVnJRrETmx2OTMYPu/iHifGg onvDcO/lCbzKZYCnqbY5TYFjqksbzTTgFq22PNmCZRL7XQ1XNi6K8MCni0yWxwNczDqs vJZw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777927534; x=1778532334; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Br7qcpiGPSj2JmE5U3/ZGo89ps4boWTHGEyMJP8s7vk=; b=r4Y0gYkjxxk/yIIZ9nyR2z6EGXvBV//k9755vB4vChqHJjFgmNVCHAEgJ4LsesJvJ7 dl6dFEZMrsp1SaTAdG65HdwzRR8zhCSKTk6jnFPQt4duKmGsLpWIRm02pt2tvMITwgdh xTqGrNlcjZb8/CbxP6Pv3YnHNC+0jxotoWX6BcQmrooafBdfGuwM5b4o8vhvTm4s4P8K nfo1XIO6EM3AR2XyRdIQqhOT8rpn6Ks/aH5SP0ycRYcvwdnJai0374mS0snxicfmrJWl jIFtDcYCt/r7LMZ7FrdO2QxfiirYv6wIrk+U4rRcW7/VeDOC6L5y5Y3qd5RDkWpgjS5D 0u/w== X-Gm-Message-State: AOJu0Yy7axOa17JY800PTmL/9cU5FnAGDl/7CIfSkO/q67PxRA5lQryy N1j1GSnNB2Q71/aA+wL0zqc3XzSYYlDZB7gmTuvLBynpR8njW1f7sZro X-Gm-Gg: AeBDievrpiy0TLBjQmYq1VGkXLSyDa6x5iNqypGYuOjRRYVfSgJw07ZeeYULYQnJXFP Z3Udw923vsSNo/EkJP6mAIK0d+GPsFHsnEuX7G/aKxygG2Oe/GpjGO+U7Kyofkm/zuePdeJ+ciE jkFEy3e+msuCqdTjrCQV6YtsM3SRwNLeOcMLTXxYzdU/inWjT6GdMG7Qsjk8Of3C8scZ5BPX+Vq nb7taE/R2VLzZGddr1yQnxqU+5w3H4F6r6OqAbfdiAzxIdat6ZoUpHAfpHI3Bc6WoeZC46JSTmw 4Mwu5Y5x7FTfowBVjN5frpur7fIOW36XDQgZmxVmEQFsjrryvqplw20owPm8E8Kccnwx0roHROs hYJDrOM4d9+zBxpMiQtsnJnksPjwXwTYLGaOlF6obqYN6zNuudM6XjpLZPryQmnkNH+cNGBXd65 qR0ltsptOHt50wfLcjf5lcDsSo9iv/pFDJkri6MBwpFGqRt/iC948huM9vZWiUStOUvrn2IPRIa fgIXzsB6A8= X-Received: by 2002:a4a:ee85:0:b0:688:c97d:bfc3 with SMTP id 006d021491bc7-69697c41b7emr5109337eaf.38.1777927534448; Mon, 04 May 2026 13:45:34 -0700 (PDT) Received: from [100.82.231.29] (c-98-38-17-99.hsd1.co.comcast.net. [98.38.17.99]) by smtp.googlemail.com with ESMTPSA id 006d021491bc7-69689266bacsm7144713eaf.0.2026.05.04.13.45.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 13:45:34 -0700 (PDT) From: Jim Cromie Date: Mon, 04 May 2026 14:45:20 -0600 Subject: [PATCH 14/17] dyndbg: hoist classmap-filter-by-modname up to ddebug_add_module 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: <20260504-dd-cleanups-2-v1-14-6fdd24040642@gmail.com> References: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> In-Reply-To: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> To: Andrew Morton , Jason Baron , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , Shuah Khan , Louis Chauvet Cc: linux-kernel@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=1777927513; l=3965; i=jim.cromie@gmail.com; s=20260203; h=from:subject:message-id; bh=DKL3NEYNkLT6AeW3tGBzlBU8SoqnCLFTHnLDJZrfZZo=; b=yq8Txsr8bIzmiRhadcjHnLMNs/sapqhed8qLLgEzSAa0+PfCMKNobkXl8S6boay7zYiFSWV1A nx2nllgQBJMAvR1+0/NV1xvwd914go+J3k+0nFpHrbuJGYw/7Df0sxs X-Developer-Key: i=jim.cromie@gmail.com; a=ed25519; pk=C6E5ODlPQo7ZBynATXH9wg7K6HxP0pIXyf4s38Qw0XE= The body of ddebug_attach_module_classes() is dominated by a code-block that finds the contiguous subrange of classmaps matching on modname, and saves it into the ddebug_table's info record. Implement this block in a macro to accommodate different component vectors in the "box" (as named in the for_subvec macro). We will reuse this macro shortly. And hoist its invocation out of ddebug_attach_module_classes() up into ddebug_add_module(). This moves the filtering step up closer to dynamic_debug_init(), which already segments the builtin pr_debug descriptors on their mod_name boundaries. Reviewed-by: Louis Chauvet Signed-off-by: Jim Cromie --- v10?- reordered params to match kdoc v12- refactor/rename: s/dd_mark_vector_subrange/dd_set_module_subrange/ 1. Renamed the macro from dd_mark_vector_subrange to ddebug_set_module_subrange to better reflect its purpose of narrowing a vector to a module-specific subrange. 2. Simplified the arguments by removing the redundant _dst, as the _di pointer already provides access to the target _ddebug_info struct. 3. Refactored for Clarity: Instead of overwriting the struct's start pointer while the for_subvec loop is using it to iterate, I introduced a temporary __start variable. This avoids the "subtle" side effect and makes the logic easier to follow. 4. Updated Documentation: Improved the comment block to explicitly state that the macro scans for the first match and counts contiguous elements. --- lib/dynamic_debug.c | 37 +++++++++++++++++++++++++++++++++++-- 1 file changed, 35 insertions(+), 2 deletions(-) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 4065c57637f2..546b3e9ec25c 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -169,8 +169,8 @@ static void vpr_info_dq(const struct ddebug_query *quer= y, const char *msg) } =20 static struct _ddebug_class_map *ddebug_find_valid_class(struct ddebug_tab= le const *dt, - const char *class_string, - int *class_id) + const char *class_string, + int *class_id) { struct _ddebug_class_map *map; int i, idx; @@ -1271,6 +1271,35 @@ static void ddebug_attach_module_classes(struct ddeb= ug_table *dt, struct _ddebug } } =20 +/* + * Narrow a _ddebug_info's vector (@_vec) to the contiguous subrange + * of elements where ->mod_name matches @__di->mod_name. + * + * This scans the @_di->_vec for the first element matching the module + * name, and counts contiguous matches to define the subrange. + * + * @_i: caller-provided index var + * @_sp: cursor into @_vec + * @_di: pointer to the struct _ddebug_info to be narrowed + * @_vec: name of the vector member (must have .start and .len) + */ +#define ddebug_set_module_subrange(_i, _sp, _di, _vec) ({ \ + struct _ddebug_info *__di =3D (_di); \ + typeof(__di->_vec.start) __start =3D NULL; \ + int __nc =3D 0; \ + for_subvec(_i, _sp, __di, _vec) { \ + if (!strcmp((_sp)->mod_name, __di->mod_name)) { \ + if (!__nc++) \ + __start =3D (_sp); \ + } else if (__nc) { \ + break; /* end of consecutive matches */ \ + } \ + } \ + if (__nc) \ + __di->_vec.start =3D __start; \ + __di->_vec.len =3D __nc; \ +}) + /* * Allocate a new ddebug_table for the given module * and add it to the global list. @@ -1278,6 +1307,8 @@ static void ddebug_attach_module_classes(struct ddebu= g_table *dt, struct _ddebug static int ddebug_add_module(struct _ddebug_info *di) { struct ddebug_table *dt; + struct _ddebug_class_map *cm; + int i; =20 if (!di->descs.len) return 0; @@ -1299,6 +1330,8 @@ static int ddebug_add_module(struct _ddebug_info *di) =20 INIT_LIST_HEAD(&dt->link); =20 + ddebug_set_module_subrange(i, cm, &dt->info, maps); + if (di->maps.len) ddebug_attach_module_classes(dt, di); =20 --=20 2.54.0 From nobody Sun Jun 14 01:34:53 2026 Received: from mail-oa1-f47.google.com (mail-oa1-f47.google.com [209.85.160.47]) (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 865D73264C2 for ; Mon, 4 May 2026 20:45:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.160.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927542; cv=none; b=dmx5WR0uRiL5Dkbcfs6JvfcltMXXENH3x6/y6awnvgFoo2v21eZxYMO2q3jfLAYj9A/TkagRQhli9vV71mMc7BiIHPhplDPVXlabq0faX5JE4Gs1hu2Vy5uN5js+pG68G9zx4cFuYjLrFRK8U2Lyktw07AoJl4svI+n5YAYQDo0= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927542; c=relaxed/simple; bh=dtqu57tTiTg+/ZbSLGxcKg17Z/e0rhUuOqHamIrCW50=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=FyeKIXPufgUXPQ+/a6kDZ4SZb/Wf+Eja1PCkY7wduT0nlQik7oEbkqdJ8MS+8l63eGJR5/ifNP1vYuekoeK9BYWoWqyg/NX3NHFeNukBxYwAsQBDQRoaMVfPDKLyv3rPv/HJJVbAFYMVWYseZI27yCEAX52cFN3M7BoERf4+iew= 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=eCEZJrRR; arc=none smtp.client-ip=209.85.160.47 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="eCEZJrRR" Received: by mail-oa1-f47.google.com with SMTP id 586e51a60fabf-40423dbe98bso1997823fac.2 for ; Mon, 04 May 2026 13:45:37 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777927535; x=1778532335; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=CoAUjtO0rUn4rdhSkIXC4btc4762MSmMYn3G6l7f49E=; b=eCEZJrRRoejAU2lauM/h75yIhjE8Tb0jt7JnQvcknVRrBXCucwn2+GxYVrLNFu5dc2 gcFUemVAaSjOw5g/n8wx7Xyo+4yMC/HaePyMEImVlkug7A6ntNRWPBtmi40s3JEgwEG+ htkpKaTFvzZHfL5uSO32esWPtYLe4tna4xCFFU3xESIv5RFiYYYQ6MYgI3PQwUQnyZEM I/CGm0E1x7Unmg4HqqEwj2fWi5rN/oqLhwqo/G0nKmM6yyXGnVLg8FfkDNFMA9Z8yjeI TQ/906LSbzrSKzAPiAUw4hTUHz6p/TaR5mgXuRN7gep5Ag8qsfdeZ1Zv1/GJkJr1ZHq5 3xeA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777927535; x=1778532335; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=CoAUjtO0rUn4rdhSkIXC4btc4762MSmMYn3G6l7f49E=; b=juVoLyEdfNFp+rQECUh+HhU/ldCBYqxEOnk8HYml0I9lcanC9NgZRwO6w9a4u5HHDw tlCGbpX1XFIVN1XyNT48YcbWQyP+96xTaviATRlrofOcNC6X7iGpMltZhQu5JGHAqef3 gqYrdj/vRGqz8lJvAzlpBQY1zTlRCEVwnoN9VFg77HhlKxrW0/FjYxQ7ltJ9VavUAHMt EepI5Vle96LXky+KLDbl0XCbAE9+EcPp7S0S8UaaezmaSZzukc5ifPnTD8WwKlt2j3Au gTkWW4voXMqHRlM24tgj2kKpIACddT/ydeIbO5iUXP+5DKG+9yBRTv6AnkOc8Zw+Kx+e hs8A== X-Gm-Message-State: AOJu0Yxbl03mkfeAcxBqt1grECr5kh4/WfWqK3fHjhZDlg4V1aZCKdiU QSrO2ltswv6zzON/b4hkki02FGlMIO0vmoL8sm5qaLWZbPy4VFVBjn/t X-Gm-Gg: AeBDietdOmH7mBn3uWwhIec7RKCSnnDITdxkM3Uk8qqDky45Wi9BXv2qTfaP70lsgWS y5otcKF8n0aus9r56KN3m1M5z8puWm5HNbOrJ4KSKza1W0LVrGzhuH53B+5PlKiLuEc6u7ffSf3 /i+R6eQgxcC/M2HoeDtvvwPKTqoPmXRRm/Ie2UY891OJIqgo6BC3eS1tvLEYym685R7TJX6Ebpn gauIk2NauXTNDqyY4ZSDgRblnTc/OT+9MD57HZBs5y/gVxZf+7vk6nv2PahFV2Ptao/SgiWqSaM mHFDLbrsvjVqYpXyMeNYtrWGpXafJeP6SZr8mvCj+oBZoQvny3KWrifEiA3D7DaR7Q9AeqHWQuJ 4woSro2VcSxr3KI4TZR2mPIKK+ViFJdNNuqaC6a7dK+xN1DaXNF2FqZKAfQb8YMDHTJ8ObWxQT4 P+mh7axx6d7nfhvps3AUyvj+qfHUSKBT2fbBxw/pF40v+ysPGZHec23ZbAYXGwf7F4SOgMjcP4 X-Received: by 2002:a05:6820:1987:b0:694:8683:3860 with SMTP id 006d021491bc7-6998d252929mr90078eaf.48.1777927535621; Mon, 04 May 2026 13:45:35 -0700 (PDT) Received: from [100.82.231.29] (c-98-38-17-99.hsd1.co.comcast.net. [98.38.17.99]) by smtp.googlemail.com with ESMTPSA id 006d021491bc7-69689266bacsm7144713eaf.0.2026.05.04.13.45.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 13:45:35 -0700 (PDT) From: Jim Cromie Date: Mon, 04 May 2026 14:45:21 -0600 Subject: [PATCH 15/17] dyndbg-API: remove DD_CLASS_TYPE_(DISJOINT|LEVEL)_NAMES and code 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: <20260504-dd-cleanups-2-v1-15-6fdd24040642@gmail.com> References: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> In-Reply-To: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> To: Andrew Morton , Jason Baron , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , Shuah Khan , Louis Chauvet Cc: linux-kernel@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=1777927513; l=8443; i=jim.cromie@gmail.com; s=20260203; h=from:subject:message-id; bh=dtqu57tTiTg+/ZbSLGxcKg17Z/e0rhUuOqHamIrCW50=; b=c/Sl7rMZ7diJO/iWFgCrMmdMX6ZJo9LCBiUPWHNhjxWT3ygpYEoFxxwgyaKC89wToaHEPtbcB VtsEFx+NUpuByf4xr4J/PvObxIhBfFchZHlH4vew9w7dhEv53c8y54r X-Developer-Key: i=jim.cromie@gmail.com; a=ed25519; pk=C6E5ODlPQo7ZBynATXH9wg7K6HxP0pIXyf4s38Qw0XE= Remove the DD_CLASS_TYPE_*_NAMES classmap types and code. These 2 classmap types accept class names at the PARAM interface, for example: echo +DRM_UT_CORE,-DRM_UT_KMS > /sys/module/drm/parameters/debug_names The code works, but its only used by test-dynamic-debug, and wasn't asked for by anyone else, so reduce LOC & test-surface; simplify things. Also rename enum class_map_type to enum ddebug_class_map_type. Reviewed-by: Louis Chauvet Signed-off-by: Jim Cromie --- include/linux/dynamic_debug.h | 23 +++------- lib/dynamic_debug.c | 102 ++++----------------------------------= ---- lib/test_dynamic_debug.c | 26 ----------- 3 files changed, 14 insertions(+), 137 deletions(-) diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index 7d60da0b9506..027e96e0889b 100644 --- a/include/linux/dynamic_debug.h +++ b/include/linux/dynamic_debug.h @@ -59,27 +59,16 @@ struct _ddebug { #endif } __attribute__((aligned(8))); =20 -enum class_map_type { +enum ddebug_class_map_type { DD_CLASS_TYPE_DISJOINT_BITS, /** - * DD_CLASS_TYPE_DISJOINT_BITS: classes are independent, one per bit. - * expecting hex input. Built for drm.debug, basis for other types. + * DD_CLASS_TYPE_DISJOINT_BITS: classes are independent, mapped to bits[0= ..N]. + * Expects hex input. Built for drm.debug, basis for other types. */ DD_CLASS_TYPE_LEVEL_NUM, /** - * DD_CLASS_TYPE_LEVEL_NUM: input is numeric level, 0-N. - * N turns on just bits N-1 .. 0, so N=3D0 turns all bits off. - */ - DD_CLASS_TYPE_DISJOINT_NAMES, - /** - * DD_CLASS_TYPE_DISJOINT_NAMES: input is a CSV of [+-]CLASS_NAMES, - * classes are independent, like _DISJOINT_BITS. - */ - DD_CLASS_TYPE_LEVEL_NAMES, - /** - * DD_CLASS_TYPE_LEVEL_NAMES: input is a CSV of [+-]CLASS_NAMES, - * intended for names like: INFO,DEBUG,TRACE, with a module prefix - * avoid EMERG,ALERT,CRIT,ERR,WARNING: they're not debug + * DD_CLASS_TYPE_LEVEL_NUM: input is numeric level, 0..N. + * Input N turns on bits 0..N-1 */ }; =20 @@ -89,7 +78,7 @@ struct _ddebug_class_map { const char **class_names; const int length; const int base; /* index of 1st .class_id, allows split/shared space */ - enum class_map_type map_type; + enum ddebug_class_map_type map_type; }; =20 /* diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 546b3e9ec25c..21e70a0919c8 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -667,76 +667,6 @@ static int ddebug_apply_class_bitmap(const struct _dde= bug_class_param *dcp, =20 #define CLASSMAP_BITMASK(width) ((1UL << (width)) - 1) =20 -/* accept comma-separated-list of [+-] classnames */ -static int param_set_dyndbg_classnames(const char *instr, const struct ker= nel_param *kp) -{ - const struct _ddebug_class_param *dcp =3D kp->arg; - const struct _ddebug_class_map *map =3D dcp->map; - unsigned long curr_bits, old_bits; - char *cl_str, *p, *tmp; - int cls_id, totct =3D 0; - bool wanted; - - cl_str =3D tmp =3D kstrdup_and_replace(instr, '\n', '\0', GFP_KERNEL); - if (!tmp) - return -ENOMEM; - - /* start with previously set state-bits, then modify */ - curr_bits =3D old_bits =3D *dcp->bits; - vpr_info("\"%s\" > %s:0x%lx\n", cl_str, KP_NAME(kp), curr_bits); - - for (; cl_str; cl_str =3D p) { - p =3D strchr(cl_str, ','); - if (p) - *p++ =3D '\0'; - - if (*cl_str =3D=3D '-') { - wanted =3D false; - cl_str++; - } else { - wanted =3D true; - if (*cl_str =3D=3D '+') - cl_str++; - } - cls_id =3D match_string(map->class_names, map->length, cl_str); - if (cls_id < 0) { - pr_err("%s unknown to %s\n", cl_str, KP_NAME(kp)); - continue; - } - - /* have one or more valid class_ids of one *_NAMES type */ - switch (map->map_type) { - case DD_CLASS_TYPE_DISJOINT_NAMES: - /* the +/- pertains to a single bit */ - if (test_bit(cls_id, &curr_bits) =3D=3D wanted) { - v3pr_info("no change on %s\n", cl_str); - continue; - } - curr_bits ^=3D BIT(cls_id); - totct +=3D ddebug_apply_class_bitmap(dcp, &curr_bits, *dcp->bits, NULL); - *dcp->bits =3D curr_bits; - v2pr_info("%s: changed bit %d:%s\n", KP_NAME(kp), cls_id, - map->class_names[cls_id]); - break; - case DD_CLASS_TYPE_LEVEL_NAMES: - /* cls_id =3D N in 0..max. wanted +/- determines N or N-1 */ - old_bits =3D CLASSMAP_BITMASK(*dcp->lvl); - curr_bits =3D CLASSMAP_BITMASK(cls_id + (wanted ? 1 : 0 )); - - totct +=3D ddebug_apply_class_bitmap(dcp, &curr_bits, old_bits, NULL); - *dcp->lvl =3D (cls_id + (wanted ? 1 : 0)); - v2pr_info("%s: changed bit-%d: \"%s\" %lx->%lx\n", KP_NAME(kp), cls_id, - map->class_names[cls_id], old_bits, curr_bits); - break; - default: - pr_err("illegal map-type value %d\n", map->map_type); - } - } - kfree(tmp); - vpr_info("total matches: %d\n", totct); - return 0; -} - static int param_set_dyndbg_module_classes(const char *instr, const struct kernel_param *kp, const char *mod_name) @@ -745,29 +675,17 @@ static int param_set_dyndbg_module_classes(const char= *instr, const struct _ddebug_class_map *map =3D dcp->map; unsigned long inrep, new_bits, old_bits; int rc, totct =3D 0; - - switch (map->map_type) { - - case DD_CLASS_TYPE_DISJOINT_NAMES: - case DD_CLASS_TYPE_LEVEL_NAMES: - /* handle [+-]classnames list separately, we are done here */ - return param_set_dyndbg_classnames(instr, kp); - - case DD_CLASS_TYPE_DISJOINT_BITS: - case DD_CLASS_TYPE_LEVEL_NUM: - /* numeric input, accept and fall-thru */ - rc =3D kstrtoul(instr, 0, &inrep); - if (rc) { - pr_err("expecting numeric input: %s > %s\n", instr, KP_NAME(kp)); - return -EINVAL; - } - break; - default: - pr_err("%s: bad map type: %d\n", KP_NAME(kp), map->map_type); + char *nl; + + rc =3D kstrtoul(instr, 0, &inrep); + if (rc) { + nl =3D strchr(instr, '\n'); + if (nl) + *nl =3D '\0'; + pr_err("expecting numeric input, not: %s > %s\n", instr, KP_NAME(kp)); return -EINVAL; } =20 - /* only _BITS,_NUM (numeric) map-types get here */ switch (map->map_type) { case DD_CLASS_TYPE_DISJOINT_BITS: /* expect bits. mask and warn if too many */ @@ -833,12 +751,8 @@ int param_get_dyndbg_classes(char *buffer, const struc= t kernel_param *kp) const struct _ddebug_class_map *map =3D dcp->map; =20 switch (map->map_type) { - - case DD_CLASS_TYPE_DISJOINT_NAMES: case DD_CLASS_TYPE_DISJOINT_BITS: return scnprintf(buffer, PAGE_SIZE, "0x%lx\n", *dcp->bits); - - case DD_CLASS_TYPE_LEVEL_NAMES: case DD_CLASS_TYPE_LEVEL_NUM: return scnprintf(buffer, PAGE_SIZE, "%ld\n", *dcp->lvl); default: diff --git a/lib/test_dynamic_debug.c b/lib/test_dynamic_debug.c index 36c9d9acbf6b..9c3e53cd26bd 100644 --- a/lib/test_dynamic_debug.c +++ b/lib/test_dynamic_debug.c @@ -74,13 +74,6 @@ DECLARE_DYNDBG_CLASSMAP(map_disjoint_bits, DD_CLASS_TYPE= _DISJOINT_BITS, 0, DD_SYS_WRAP(disjoint_bits, p); DD_SYS_WRAP(disjoint_bits, T); =20 -/* symbolic input, independent bits */ -enum cat_disjoint_names { LOW =3D 11, MID, HI }; -DECLARE_DYNDBG_CLASSMAP(map_disjoint_names, DD_CLASS_TYPE_DISJOINT_NAMES, = 10, - "LOW", "MID", "HI"); -DD_SYS_WRAP(disjoint_names, p); -DD_SYS_WRAP(disjoint_names, T); - /* numeric verbosity, V2 > V1 related */ enum cat_level_num { V0 =3D 14, V1, V2, V3, V4, V5, V6, V7 }; DECLARE_DYNDBG_CLASSMAP(map_level_num, DD_CLASS_TYPE_LEVEL_NUM, 14, @@ -88,13 +81,6 @@ DECLARE_DYNDBG_CLASSMAP(map_level_num, DD_CLASS_TYPE_LEV= EL_NUM, 14, DD_SYS_WRAP(level_num, p); DD_SYS_WRAP(level_num, T); =20 -/* symbolic verbosity */ -enum cat_level_names { L0 =3D 22, L1, L2, L3, L4, L5, L6, L7 }; -DECLARE_DYNDBG_CLASSMAP(map_level_names, DD_CLASS_TYPE_LEVEL_NAMES, 22, - "L0", "L1", "L2", "L3", "L4", "L5", "L6", "L7"); -DD_SYS_WRAP(level_names, p); -DD_SYS_WRAP(level_names, T); - /* stand-in for all pr_debug etc */ #define prdbg(SYM) __pr_debug_cls(SYM, #SYM " msg\n") =20 @@ -102,10 +88,6 @@ static void do_cats(void) { pr_debug("doing categories\n"); =20 - prdbg(LOW); - prdbg(MID); - prdbg(HI); - prdbg(D2_CORE); prdbg(D2_DRIVER); prdbg(D2_KMS); @@ -129,14 +111,6 @@ static void do_levels(void) prdbg(V5); prdbg(V6); prdbg(V7); - - prdbg(L1); - prdbg(L2); - prdbg(L3); - prdbg(L4); - prdbg(L5); - prdbg(L6); - prdbg(L7); } =20 static void do_prints(void) --=20 2.54.0 From nobody Sun Jun 14 01:34:53 2026 Received: from mail-oo1-f41.google.com (mail-oo1-f41.google.com [209.85.161.41]) (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 D57C63254A2 for ; Mon, 4 May 2026 20:45:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.161.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927548; cv=none; b=mgyesJBRYniP98UTCwysxn2z+AlmPhXOnDeIxtAcMqVTxFGFyX9yJYc3f+9loFZFVBfgS84JfllABobDmaomDPYEKBOM8jpXBbJGgs3dUbr5U1UGRHu8NEzFsQ5g0tYhFC0MKVteG4dgQJzHk/ecC9mhiI1seaXpGh2jfNH4vfw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927548; c=relaxed/simple; bh=HUQ0mLcNudkicbeewp+OjYx5/v+lNJVyI+yllTTxfMo=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=N+ZDGPOg+wNaXqx9OQ7sl04A8ses5jl0pREXiml/EOa/cuT9u5EmPDa2AIwSoqwK0gNIx9V4/XXjZ2clMtfG83ybICGf28TqDIsrBp7OeQbxK027YaVtkH2lYl68xOEiU5Auuj2vzhxVzQgCn1vAv03Tw9qJJnQh9P5YwwPSVzY= 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=LFSHElxA; arc=none smtp.client-ip=209.85.161.41 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="LFSHElxA" Received: by mail-oo1-f41.google.com with SMTP id 006d021491bc7-66ee7b9af94so1861150eaf.0 for ; Mon, 04 May 2026 13:45:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777927537; x=1778532337; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Y3NXRpnDY3pcVCodoGkidsnjPerNv+a1qOYpGvIl9oE=; b=LFSHElxAu+3e67X70PFteYg/tFKvcfnE2SvqqJWYhBl7lCegOlWk6nzMJwjUlRHSCF cljf0mSYCUrybCVNLGtkm5WzeXqv+j7VG5gBf3HJJfN4VZpieFtf0+YwKinf5VAycILG E8OgT8rHzGJp9kA3FU9Vo/1NLKERxJZoaMNxvTMaikSKvbfo57gdM25emhW8qccU/gal ffzJto4TiMeTVpg9iegjveRrhHPSUAQPE1CF0MPMFNGKqlqN1FwYRf7PDQCfRDIuFuyy xnTyHJbfFEAyrNospGlq8Yhr7E+jo+7thTcpBbhmsxJstHuUwFbN4U0Mu+eakYLF1DLd dHcQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777927537; x=1778532337; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Y3NXRpnDY3pcVCodoGkidsnjPerNv+a1qOYpGvIl9oE=; b=EworfSsKsiuH8gQYaQttEvDt/ARPi6ma2JyP+CErIz/2Vz6njcI72M4X9vdXlTonL6 ubp6RWoGEKVR8YCxRMwRxJ/Stm/XHyM5lNWjtw0bfzvgbBwTTl5BF57llqWIiZydfWOE ZaO7Zmg0ZTlQJ6fycFb9/QMR36vwMIl8fWtW4IPZgU4aspNS8pkQ7wp5UByI+sFNTokW ZJ9Ozd82BQgQsvqXosLLJhB1i2oUKeyz2hPwkNz0yBSu4ZpySpR4/4ra4zk3tavo4Fs7 FIjs/3oVMKh5XDbHn5h5u7l8OaQWudqkcYote1G7DMG4QpdqE00tDc/kx5T9rOmzEhQX b96g== X-Gm-Message-State: AOJu0YwLWPztyt0z3lCYT5PJ9fpO50Rr9iBL+D3cWY13Vc8Up8h6gh8C opS8TLgh4C/NFmTidSbZ9zOof6rouLsFyh7mHC6Zu2+M7fcfXWP+KCkR X-Gm-Gg: AeBDiesotd6uzDT1GZ3/W4AOw250YVqSJrxAkLXBBlvLSXBwENAGt0VsWyTxMP2BuvP rFrn49uOGisK+FEFW898oQl0tknIZsgPNkekW9McKNmE1jRCT9fQANNXyubk9UrrMtJIlM5cDRK 9xmedgDYeX6GtmNXdf/SY7nMB3oeKSp+K9/Zttfd6pqroXixxCnPYQg7hkQdPY9rkxyCrVe6iXw 0u/YmwLygIywW9Kj+y5aIUeItBjlXYOuhXgUZUaJRXZofu2jTDZBtjQUNUEF7MOzXe3KZCinpX6 SO/GBPBsmIRFRUq/8RDTwZD4au+Ol80bYopeyR5gCCWEnsBmUgKf8k5KZPxhBMfq69pPixLiy1l 7T6FTPuwBGaDZJC0OoOnWlzEe/Ng/x7bpal6uYtaIuLkm6X8s2gxbWyPz9TTKubUU5LOCBwGs7o zvDIqkaxgo89QYLM1C7pu1LXan/lzJOC5Fj4FosylpUIioSp4b0QTYGaZ52AZj7ONZ6dUiWMfy X-Received: by 2002:a05:6820:2109:b0:694:9910:f77e with SMTP id 006d021491bc7-696979c9bbemr5253173eaf.4.1777927536906; Mon, 04 May 2026 13:45:36 -0700 (PDT) Received: from [100.82.231.29] (c-98-38-17-99.hsd1.co.comcast.net. [98.38.17.99]) by smtp.googlemail.com with ESMTPSA id 006d021491bc7-69689266bacsm7144713eaf.0.2026.05.04.13.45.35 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 13:45:36 -0700 (PDT) From: Jim Cromie Date: Mon, 04 May 2026 14:45:22 -0600 Subject: [PATCH 16/17] selftests-dyndbg: add a dynamic_debug run_tests target 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: <20260504-dd-cleanups-2-v1-16-6fdd24040642@gmail.com> References: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> In-Reply-To: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> To: Andrew Morton , Jason Baron , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , Shuah Khan , Louis Chauvet Cc: linux-kernel@vger.kernel.org, linux-modules@vger.kernel.org, linux-kselftest@vger.kernel.org, Jim Cromie , =?utf-8?q?=C5=81ukasz_Bartosik?= X-Mailer: b4 0.14.3 X-Developer-Signature: v=1; a=ed25519-sha256; t=1777927513; l=12833; i=jim.cromie@gmail.com; s=20260203; h=from:subject:message-id; bh=HUQ0mLcNudkicbeewp+OjYx5/v+lNJVyI+yllTTxfMo=; b=StwIGSARi//V1ITdjlTwE2M9mYDCI3v/4vbEul3cckSxSs+CN/KI4rfHBxCd8WFz48O0piy+O 5xueqHtJ/hNC7HHFaxLlF2LeIwXyHU4no60DxQDT4UeSUKidf+VntlL X-Developer-Key: i=jim.cromie@gmail.com; a=ed25519; pk=C6E5ODlPQo7ZBynATXH9wg7K6HxP0pIXyf4s38Qw0XE= Add a selftest script for dynamic-debug. The config requires CONFIG_TEST_DYNAMIC_DEBUG=3Dm and CONFIG_TEST_DYNAMIC_DEBUG_SUBMOD=3Dm, which tacitly requires either CONFIG_DYNAMIC_DEBUG=3Dy or CONFIG_DYNAMIC_DEBUG_CORE=3Dy ATM this has just basic_tests(), which modify pr_debug() flags in the builtin params module. This means they're available to manipulate and observe the effects in "cat control". This is backported from another feature branch; the support-fns (thx Lukas) have unused features at the moment, they'll get used shortly. The script enables simple virtme-ng testing: [jimc@gandalf b0-ftrace]$ vrun_t virtme-ng 1.32+115.g07b109d doing: vng --name v6.14-rc4-60-gd5f48427de0c \ --user root -v -p 4 -a dynamic_debug.verbose=3D3 V=3D1 \ -- ../tools/testing/selftests/dynamic_debug/dyndbg_selftest.sh virtme: waiting for virtiofsd to start .. And add dynamic_debug to TARGETS, so `make run_tests` sees it properly For the impatient, set TARGETS explicitly: [root@v6 selftests]# make TARGETS=3Ddynamic_debug run_tests make[1]: Nothing to be done for 'all'. TAP version 13 1..1 # timeout set to 45 # selftests: dynamic_debug: dyndbg_selftest.sh # # BASIC_TESTS 95.422122] dyndbg: query 0: 0"=3D_" mod:* ... NOTES check KCONFIG_CONFIG to avoid silly fails Several tests are dependent upon config choices. Lets avoid failing where that is noise. The KCONFIG_CONFIG var exists to convey the config-file around. If the var names a file, read it and extract the relevant CONFIG items, and use them to skip the dependent tests, thus avoiding the fails that would follow, and the disruption to whatever CI is running these selftests. If the envar doesn't name a config-file, ".config" is assumed. CONFIG_DYNAMIC_DEBUG=3Dy: basic-tests() and comma-terminator-tests() test for the presence of the builtin pr_debugs in module/main.c, which I deemed stable and therefore safe to count. That said, the test fails if only CONFIG_DYNAMIC_DEBUG_CORE=3Dy is set. It could be rewritten to test against test-dynamic-debug.ko, but that just trades one config dependence for another. CONFIG_TEST_DYNAMIC_DEBUG=3Dm As written, test_percent_splitting() modprobes test_dynamic_debug, enables several classes, and counts them. It could be re-written to work for the builtin module also, but builtin test modules are not a common or desirable build/config. Reviewed-by: Louis Chauvet Co-developed-by: =C5=81ukasz Bartosik Signed-off-by: =C5=81ukasz Bartosik Signed-off-by: Jim Cromie --- MAINTAINERS | 1 + tools/testing/selftests/Makefile | 1 + tools/testing/selftests/dynamic_debug/Makefile | 9 + tools/testing/selftests/dynamic_debug/config | 7 + .../selftests/dynamic_debug/dyndbg_selftest.sh | 257 +++++++++++++++++= ++++ 5 files changed, 275 insertions(+) diff --git a/MAINTAINERS b/MAINTAINERS index 882214b0e7db..bbd750ce24d3 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -9073,6 +9073,7 @@ S: Maintained F: include/linux/dynamic_debug.h F: lib/dynamic_debug.c F: lib/test_dynamic_debug.c +F: tools/testing/selftests/dynamic_debug/* =20 DYNAMIC INTERRUPT MODERATION M: Tal Gilboa diff --git a/tools/testing/selftests/Makefile b/tools/testing/selftests/Mak= efile index 6e59b8f63e41..17c4ddbcee89 100644 --- a/tools/testing/selftests/Makefile +++ b/tools/testing/selftests/Makefile @@ -27,6 +27,7 @@ TARGETS +=3D drivers/net/team TARGETS +=3D drivers/net/virtio_net TARGETS +=3D drivers/platform/x86/intel/ifs TARGETS +=3D dt +TARGETS +=3D dynamic_debug TARGETS +=3D efivarfs TARGETS +=3D exec TARGETS +=3D fchmodat2 diff --git a/tools/testing/selftests/dynamic_debug/Makefile b/tools/testing= /selftests/dynamic_debug/Makefile new file mode 100644 index 000000000000..6d06fa7f1040 --- /dev/null +++ b/tools/testing/selftests/dynamic_debug/Makefile @@ -0,0 +1,9 @@ +# SPDX-License-Identifier: GPL-2.0-only +# borrowed from Makefile for user memory selftests + +# No binaries, but make sure arg-less "make" doesn't trigger "run_tests" +all: + +TEST_PROGS :=3D dyndbg_selftest.sh + +include ../lib.mk diff --git a/tools/testing/selftests/dynamic_debug/config b/tools/testing/s= elftests/dynamic_debug/config new file mode 100644 index 000000000000..0f906ff53908 --- /dev/null +++ b/tools/testing/selftests/dynamic_debug/config @@ -0,0 +1,7 @@ + +# basic tests ref the builtin params module +CONFIG_DYNAMIC_DEBUG=3Dm + +# more testing is possible with these +# CONFIG_TEST_DYNAMIC_DEBUG=3Dm +# CONFIG_TEST_DYNAMIC_DEBUG_SUBMOD=3Dm diff --git a/tools/testing/selftests/dynamic_debug/dyndbg_selftest.sh b/too= ls/testing/selftests/dynamic_debug/dyndbg_selftest.sh new file mode 100755 index 000000000000..465fad3f392c --- /dev/null +++ b/tools/testing/selftests/dynamic_debug/dyndbg_selftest.sh @@ -0,0 +1,257 @@ +#!/bin/bash +# SPDX-License-Identifier: GPL-2.0-only + +V=3D${V:=3D0} # invoke as V=3D1 $0 for global verbose +RED=3D"\033[0;31m" +GREEN=3D"\033[0;32m" +YELLOW=3D"\033[0;33m" +BLUE=3D"\033[0;34m" +MAGENTA=3D"\033[0;35m" +CYAN=3D"\033[0;36m" +NC=3D"\033[0;0m" +error_msg=3D"" + +[ -e /proc/dynamic_debug/control ] || { + echo -e "${RED}: this test requires CONFIG_DYNAMIC_DEBUG=3Dy ${NC}" + exit 0 # nothing to test here, no good reason to fail. +} + +# need info to avoid failures due to untestable configs + +[ -f "$KCONFIG_CONFIG" ] || KCONFIG_CONFIG=3D".config" +if [ -f "$KCONFIG_CONFIG" ]; then + echo "# consulting KCONFIG_CONFIG: $KCONFIG_CONFIG" + grep -q "CONFIG_DYNAMIC_DEBUG=3Dy" $KCONFIG_CONFIG ; LACK_DD_BUILTIN= =3D$? + grep -q "CONFIG_TEST_DYNAMIC_DEBUG=3Dm" $KCONFIG_CONFIG ; LACK_TMOD=3D= $? + grep -q "CONFIG_TEST_DYNAMIC_DEBUG_SUBMOD=3Dm" $KCONFIG_CONFIG ; LACK_= TMOD_SUBMOD=3D$? + if [ $V -eq 1 ]; then + echo LACK_DD_BUILTIN: $LACK_DD_BUILTIN + echo LACK_TMOD: $LACK_TMOD + echo LACK_TMOD_SUBMOD: $LACK_TMOD_SUBMOD + fi +else + LACK_DD_BUILTIN=3D0 + LACK_TMOD=3D0 + LACK_TMOD_SUBMOD=3D0 +fi + +function vx () { + echo $1 > /sys/module/dynamic_debug/parameters/verbose +} + +function ddgrep () { + grep $1 /proc/dynamic_debug/control +} + +function doprints () { + cat /sys/module/test_dynamic_debug/parameters/do_prints +} + +function ddcmd () { + exp_exit_code=3D0 + num_args=3D$# + if [ "${@:$#}" =3D "pass" ]; then + num_args=3D$#-1 + elif [ "${@:$#}" =3D "fail" ]; then + num_args=3D$#-1 + exp_exit_code=3D1 + fi + args=3D${@:1:$num_args} + output=3D$((echo "$args" > /proc/dynamic_debug/control) 2>&1) + exit_code=3D$? + error_msg=3D$(echo $output | cut -d ":" -f 5 | sed -e 's/^[[:space:]]*= //') + handle_exit_code $BASH_LINENO $FUNCNAME $exit_code $exp_exit_code +} + +function handle_exit_code() { + local exp_exit_code=3D0 + [ $# =3D=3D 4 ] && exp_exit_code=3D$4 + if [ $3 -ne $exp_exit_code ]; then + echo -e "${RED}: $BASH_SOURCE:$1 $2() expected to exit with code $= exp_exit_code" + [ $3 =3D=3D 1 ] && echo "Error: '$error_msg'" + exit + fi +} + +# $1 - pattern to match, pattern in $1 is enclosed by spaces for a match "= "\s$1\s" +# $2 - number of times the pattern passed in $1 is expected to match +# $3 - optional can be set either to "-r" or "-v" +# "-r" means relaxed matching in this case pattern provided in $1 is= passed +# as is without enclosing it with spaces +# "-v" prints matching lines +# $4 - optional when $3 is set to "-r" then $4 can be used to pass "-v" +function check_match_ct { + pattern=3D"\s$1\s" + exp_cnt=3D0 + + [ "$3" =3D=3D "-r" ] && pattern=3D"$1" + let cnt=3D$(ddgrep "$pattern" | wc -l) + if [ $V -eq 1 ] || [ "$3" =3D=3D "-v" ] || [ "$4" =3D=3D "-v" ]; then + echo -ne "${BLUE}" && ddgrep $pattern && echo -ne "${NC}" + fi + [ $# -gt 1 ] && exp_cnt=3D$2 + if [ $cnt -ne $exp_cnt ]; then + echo -e "${RED}: $BASH_SOURCE:$BASH_LINENO check failed expected $= exp_cnt on $1, got $cnt" + exit + else + echo ": $cnt matches on $1" + fi +} + +# $1 - trace instance name +# #2 - if > 0 then directory is expected to exist, if <=3D 0 then otherwise +# $3 - "-v" for verbose +function check_trace_instance_dir { + if [ -e /sys/kernel/tracing/instances/$1 ]; then + if [ "$3" =3D=3D "-v" ] ; then + echo "ls -l /sys/kernel/tracing/instances/$1: " + ls -l /sys/kernel/tracing/instances/$1 + fi + if [ $2 -le 0 ]; then + echo -e "${RED}: $BASH_SOURCE:$BASH_LINENO error trace instanc= e \ + '/sys/kernel/tracing/instances/$1' does exist" + exit + fi + else + if [ $2 -gt 0 ]; then + echo -e "${RED}: $BASH_SOURCE:$BASH_LINENO error trace instanc= e \ + '/sys/kernel/tracing/instances/$1' does not exist" + exit + fi + fi +} + +function tmark { + echo $* > /sys/kernel/tracing/trace_marker +} + +# $1 - trace instance name +# $2 - line number +# $3 - if > 0 then the instance is expected to be opened, otherwise +# the instance is expected to be closed +function check_trace_instance { + output=3D$(tail -n9 /proc/dynamic_debug/control | grep ": Opened trace= instances" \ + | xargs -n1 | grep $1) + if [ "$output" !=3D $1 ] && [ $3 -gt 0 ]; then + echo -e "${RED}: $BASH_SOURCE:$2 trace instance $1 is not opened" + exit + fi + if [ "$output" =3D=3D $1 ] && [ $3 -le 0 ]; then + echo -e "${RED}: $BASH_SOURCE:$2 trace instance $1 is not closed" + exit + fi +} + +function is_trace_instance_opened { + check_trace_instance $1 $BASH_LINENO 1 +} + +function is_trace_instance_closed { + check_trace_instance $1 $BASH_LINENO 0 +} + +# $1 - trace instance directory to delete +# $2 - if > 0 then directory is expected to be deleted successfully, if <= =3D 0 then otherwise +function del_trace_instance_dir() { + exp_exit_code=3D1 + [ $2 -gt 0 ] && exp_exit_code=3D0 + output=3D$((rmdir /sys/kernel/debug/tracing/instances/$1) 2>&1) + exit_code=3D$? + error_msg=3D$(echo $output | cut -d ":" -f 3 | sed -e 's/^[[:space:]]*= //') + handle_exit_code $BASH_LINENO $FUNCNAME $exit_code $exp_exit_code +} + +function error_log_ref { + # to show what I got + : echo "# error-log-ref: $1" + : echo cat \$2 +} + +function ifrmmod { + lsmod | grep $1 2>&1>/dev/null && rmmod $1 +} + +# $1 - text to search for +function search_trace() { + search_trace_name 0 1 $1 +} + +# $1 - trace instance name, 0 for global event trace +# $2 - line number counting from the bottom +# $3 - text to search for +function search_trace_name() { + if [ "$1" =3D "0" ]; then + buf=3D$(cat /sys/kernel/debug/tracing/trace) + line=3D$(tail -$2 /sys/kernel/debug/tracing/trace | head -1 | sed -e = 's/^[[:space:]]*//') + else + buf=3D$(cat /sys/kernel/debug/tracing/instances/$1/trace) + line=3D$(tail -$2 /sys/kernel/debug/tracing/instances/$1/trace | head= -1 | \ + sed -e 's/^[[:space:]]*//') + fi + if [ $2 =3D 0 ]; then + # whole-buf check + output=3D$(echo $buf | grep "$3") + else + output=3D$(echo $line | grep "$3") + fi + if [ "$output" =3D "" ]; then + echo -e "${RED}: $BASH_SOURCE:$BASH_LINENO search for '$3' fai= led \ + in line '$line' or '$buf'" + exit + fi + if [ $V =3D 1 ]; then + echo -e "${MAGENTA}: search_trace_name in $1 found: \n$output \nin:${= BLUE} $buf ${NC}" + fi +} + +# $1 - error message to check +function check_err_msg() { + if [ "$error_msg" !=3D "$1" ]; then + echo -e "${RED}: $BASH_SOURCE:$BASH_LINENO error message '$error_m= sg' \ + does not match with '$1'" + exit + fi +} + +function basic_tests { + echo -e "${GREEN}# BASIC_TESTS ${NC}" + if [ $LACK_DD_BUILTIN -eq 1 ]; then + echo "SKIP" + return + fi + ddcmd =3D_ # zero everything + check_match_ct =3Dp 0 + + # module params are builtin to handle boot args + check_match_ct '\[params\]' 4 -r + ddcmd module params +mpf + check_match_ct =3Dpmf 4 + + # multi-cmd input, newline separated, with embedded comments + cat <<"EOF" > /proc/dynamic_debug/control + module params =3D_ # clear params + module params +mf # set flags + module params func parse_args +sl # other flags +EOF + check_match_ct =3Dmf 3 + check_match_ct =3Dmfsl 1 + ddcmd =3D_ +} + +tests_list=3D( + basic_tests +) + +# Run tests + +ifrmmod test_dynamic_debug_submod +ifrmmod test_dynamic_debug + +for test in "${tests_list[@]}" +do + $test + echo "" +done +echo -en "${GREEN}# Done on: " +date +echo -en "${NC}" --=20 2.54.0 From nobody Sun Jun 14 01:34:53 2026 Received: from mail-ot1-f47.google.com (mail-ot1-f47.google.com [209.85.210.47]) (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 5E98632BF5D for ; Mon, 4 May 2026 20:45:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.210.47 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927548; cv=none; b=tFTuzTaJbEBP4sEnAPwaBwXMYeW635E/GAvLFO8g+EEWGp4ePUhsu6HfQ1C6jlUYyMmK3mNyyQgDGgDA2w/5GKyw8ffYwimBoANUBKSLwiZCiZu9pJ2T45flx6midymkCd+YNNmAU6FL5Wzbvs52D0aJEBaRvA04cAPABhGgHKs= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1777927548; c=relaxed/simple; bh=YZwMAR3uqET/bZH1qZJj95QcpN0V++SSyz4QoqNaiUk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=dsBQtxKiWBMCWvsGu3VesAKB0xzIKUPGGSH4v0299WU/rAjaw6DWBWY3zb5RG905RVnsSHF98rwV8Na+l8gsQcLKzm48orTUo7ncgKicNmaGq5nRV5i+I6fjSbLqBTcuOX+t1VdTR2UYFBG5HwgwL9PFesXST31TQ5S6xWS6B7Y= 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=U+9dnfDo; arc=none smtp.client-ip=209.85.210.47 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="U+9dnfDo" Received: by mail-ot1-f47.google.com with SMTP id 46e09a7af769-7de44ed7a11so3749437a34.1 for ; Mon, 04 May 2026 13:45:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20251104; t=1777927538; x=1778532338; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=3nmzwB7G7wQji/lU/ygTPGmrlGNrlrcnn35fzNwdq90=; b=U+9dnfDoUWfFxRDkfXIu6OMMgD7h/o5jK0z87sroarYMb4njliyxoIDWfMdFhdXaXs wdmzWDL/VnfXvp6/c4GXJHMhI8Idzkyw0daOoM1YiQC2scseTZHODpGU+iMBSE+he/b+ 6cYBBxc6eRElXH42gep1/69pn+Gv+L+Ho1T3qvfjN36DuJnxtIew3ajoHB4F5EFb7DMq 7vfflndq0yfRDbdv+duZnj3PNmJ+uGlwP3FgrEaYCOsJ9j7kchGLiww+78qE6XtTNMDi BnU2WFOeVTcij0ldHSUHYHR4iHDkYcWmu/tTwmS5Opg50ZcpEjthFNxHY/z1KSI9IRId IpRw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1777927538; x=1778532338; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=3nmzwB7G7wQji/lU/ygTPGmrlGNrlrcnn35fzNwdq90=; b=nSr1kLKnmLjHKoezW/meLdJPx2hNzV8bHvTpLPsSv0D25wxubQqDIg48n9imF84Olm o+5fSjPajwZfRlJ/eQklZK8ZSMJwxl8aC8NyWYL0a9Gq/9mm/16IINETek9Cog/dbvtz SVXq+8gnLrkd+M7ZYXJKLBIZm61LPof+KUajXK89RWr4XJY77hxcvg8OLLlYF/5I7pIJ VZa/N+jcCh1JC6RCywPVbQP/iehZU1egD0SEy/70rnUVvahpVax0e+uRWClA+RZsStYz 0yd2E9l/VM2mRqLhagXr7A/qERrU7o99PYdcFVHi87vtE4YfBpiWtXnUMhLVTIlVQ1jc AKqQ== X-Gm-Message-State: AOJu0YwNPb2LiPECtSQP9/QGIbTUt+ZUao9Hifg9MM+1xrNLZZ7xJnCJ zCwmWpW4qV7+WL5xVcFdrF4Is/0oahuIDV7BjrEI4WxP4rxY1t/umdJt X-Gm-Gg: AeBDiesp+40BeUcNr1Hkpdp8IIriGlMckCGCOickIpAgOL3y5YFn1nh7Yg1GuBMdcW5 3ggzbuYKqJ6HSwrpcJpd1mGEKstHqKewhs3CunNxZz3DLNl4Fi65K5mUQu+zbcoRiRTA9QG5RBL 00QTZCEAZk/wCMLbrtA86w8voewTgxMEJ8YPZh8rgh9tJXTEMl2QqR1TmsWA+mkv7vh9CqPlnwe ZvnUiVF3u3hgs9ecs0WklFtrvtBxU/vAci52ShiEZvp0+xlhaX08xWYY1aaNz9/X1n3qZD4B360 DrULT/nNFxPfYM/44IGIaFj1gjH4kgqhHT79oPD8SD166co8+KjRoW4BhEQwpV5F0WHSXiYsQKw YRVluMeJiyoLLyl7AWBYCJLJNgW/M0nsasCa82X3AE0/JeLUAteHF/wjHHhXgTLRGVH/Lfo4jh1 HV1LaVfrM83xGHANR3nEwlgSL0jRgbiuQZyGrc5Xa8XjwwCoZC82zmjjeAHL/+mByAc85OBjRt X-Received: by 2002:a05:6820:2908:b0:696:14c0:3f9f with SMTP id 006d021491bc7-696979ad3c5mr5336413eaf.11.1777927538248; Mon, 04 May 2026 13:45:38 -0700 (PDT) Received: from [100.82.231.29] (c-98-38-17-99.hsd1.co.comcast.net. [98.38.17.99]) by smtp.googlemail.com with ESMTPSA id 006d021491bc7-69689266bacsm7144713eaf.0.2026.05.04.13.45.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 04 May 2026 13:45:37 -0700 (PDT) From: Jim Cromie Date: Mon, 04 May 2026 14:45:23 -0600 Subject: [PATCH 17/17] dyndbg: change __dynamic_func_call_cls* macros into expressions 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: <20260504-dd-cleanups-2-v1-17-6fdd24040642@gmail.com> References: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> In-Reply-To: <20260504-dd-cleanups-2-v1-0-6fdd24040642@gmail.com> To: Andrew Morton , Jason Baron , Luis Chamberlain , Petr Pavlu , Daniel Gomez , Sami Tolvanen , Aaron Tomlin , Shuah Khan , Louis Chauvet Cc: linux-kernel@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=1777927513; l=2145; i=jim.cromie@gmail.com; s=20260203; h=from:subject:message-id; bh=YZwMAR3uqET/bZH1qZJj95QcpN0V++SSyz4QoqNaiUk=; b=eISda3doke6ER4wdyvj6HcSygG7ahPVJyzRZLi0/2Xp1UhRLhMFfOJo3ZTRiElFtSC1U9xb7z NOeCSToXMEdBLWMSznSMQx3SVwpwr30T98dHODRqXEtoAIJAy012N13 X-Developer-Key: i=jim.cromie@gmail.com; a=ed25519; pk=C6E5ODlPQo7ZBynATXH9wg7K6HxP0pIXyf4s38Qw0XE= The Xe driver's XE_IOCTL_DBG macro calls drm_dbg() from inside an if (expression). This breaks when CONFIG_DRM_USE_DYNAMIC_DEBUG=3Dy because the invoked macro has a do-while-0 wrapper, and is not an expression. if (cond && (drm_dbg("expr-form"),1)) { ... do some more stuff } Fix for this usage by changing __dynamic_func_call_cls{,_no_desc} macros into expressions, by replacing the do-while-0s with a ({ }) wrapper. In the common usage, the trailing ';' converts the expression into a statement. drm_dbg("statement form"); Reviewed-by: Louis Chauvet Signed-off-by: Jim Cromie --- include/linux/dynamic_debug.h | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index 027e96e0889b..3aa51e7f1938 100644 --- a/include/linux/dynamic_debug.h +++ b/include/linux/dynamic_debug.h @@ -224,24 +224,24 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor, * (|_cls): adds in _DPRINT_CLASS_DFLT as needed * (|_no_desc): former gets callsite descriptor as 1st arg (for prdbgs) */ -#define __dynamic_func_call_cls(id, cls, fmt, func, ...) do { \ +#define __dynamic_func_call_cls(id, cls, fmt, func, ...) ({ \ DEFINE_DYNAMIC_DEBUG_METADATA_CLS(id, cls, fmt); \ if (DYNAMIC_DEBUG_BRANCH(id)) { \ func(&id, ##__VA_ARGS__); \ __dynamic_dump_stack(id); \ } \ -} while (0) +}) #define __dynamic_func_call(id, fmt, func, ...) \ __dynamic_func_call_cls(id, _DPRINTK_CLASS_DFLT, fmt, \ func, ##__VA_ARGS__) =20 -#define __dynamic_func_call_cls_no_desc(id, cls, fmt, func, ...) do { \ +#define __dynamic_func_call_cls_no_desc(id, cls, fmt, func, ...) ({ \ DEFINE_DYNAMIC_DEBUG_METADATA_CLS(id, cls, fmt); \ if (DYNAMIC_DEBUG_BRANCH(id)) { \ func(__VA_ARGS__); \ __dynamic_dump_stack(id); \ } \ -} while (0) +}) #define __dynamic_func_call_no_desc(id, fmt, func, ...) \ __dynamic_func_call_cls_no_desc(id, _DPRINTK_CLASS_DFLT, \ fmt, func, ##__VA_ARGS__) --=20 2.54.0