From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mail-io1-f50.google.com (mail-io1-f50.google.com [209.85.166.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 6AF7B2FB97B for ; Tue, 18 Nov 2025 20:18:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.166.50 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763497141; cv=none; b=MrRQNnGhHkofslPPLB/DofwifUUp1CFFHNyc0OsiuKbBpkA7WZJ8MdKHuZtkU/rC688ESVrFgfw/0gbn4zIdnyirAqwInxe++2+bChI5x7FHj42StLVb+CLml438RaVnVFqUlSfHE56n1cSFxqz6oS3x+nUSeMhH/vaP52ViINs= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1763497141; c=relaxed/simple; bh=tBOE2q7VYGRbrP1xxsW92RYr2KOi46sxYu5fr103wFA=; h=From:To:Cc:Subject:Date:Message-ID:MIME-Version:Content-Type; b=c49Dz59rhrQiDEEMXIt35+Jnv2jlVP6CfKMeIiOAN4ly1I5zuxNM10u32SEBo4xZxKNrec5GJf5pOVm3Mq9wlrWBYZHrhzWMrA8T4mMMWwhVTRrmC2H7d6OuvLf1mO/8sfdXvuvGMk1UkwqIxW/PiOCJD62HPKOWw55u3E9j1Zw= 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=enq5YQf1; arc=none smtp.client-ip=209.85.166.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="enq5YQf1" Received: by mail-io1-f50.google.com with SMTP id ca18e2360f4ac-94895f6b144so248040139f.0 for ; Tue, 18 Nov 2025 12:18:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20230601; t=1763497136; x=1764101936; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date:message-id:reply-to; bh=RPQ6bCd475QA3fFyi62XDKAbBtsp5mWcyPeF56KHPAA=; b=enq5YQf1DSS6I/7zOa99gtbiKLXkm3DstYUGDbS84AWFiJVEmayZ/QImdEKdnJ9L2q xdtCE33UC+UGbkav/MdTCiwAhtnvmv6HTjqt+oPoLm+c/qHd+SB+0GnsJNcddiz3rAbt HKlJvxTo9iyQVmMzr3YkBTRr8gjc3HnFZEiuEPl/QB12/5oV8XBuO5cyjsY+TjmXfTAu H0AqtqeoKtXsH6lpbevJFvs1pnhFBmBOMC4yL8vdIsuWUdTut+r/gPbn8/C6Zr3Vd1nq QAMtLxg8vJUPCq0jNr+yBPpOqSojPTQfg+Rw0nt6qhGf8sl+pOs2qq3KxUbxfBpbQuUb EElw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1763497136; x=1764101936; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-gg:x-gm-message-state:from:to:cc:subject:date :message-id:reply-to; bh=RPQ6bCd475QA3fFyi62XDKAbBtsp5mWcyPeF56KHPAA=; b=JI7MQgoSjdpyJVUtcqPAeBl7MUwoApuBXGCi9U0OzFofMLzGkbD1jtuxFv7z3ODe2K K2dk4CXqXA/3mFvGV+d3yOvqo4wBklltMCw8tZIiSBL/vmUURkTPFFm52+dQMaRU5fgE /tTlqkaMN1ZBOFfLkdGfl4PqbB8BeyMfnmmIgUTlq/BlqFX/RnkDWWp03Veu3QnKNn8t tyH9qFUxM+gYosB8SqtY2pdZNb2HSUMb37vfrFRWVEtnMFLOB/gCPgbL8t0ipSHPDj6r BYMJv05hoYR5OeNWBtAQEpc1AJRW0XCwp2luU7MAD5ZGIsA4wGi4sLbkzz0CdHa90I6D Ue6A== X-Gm-Message-State: AOJu0Yzw4+Ixuz7uB6XL67utz4sl0am4Kem2HIY1zLyhJcG8VO9rPx79 14TPvYPnu73yW+t9WduarcTOeheHu3mGTcM4QEZtECKCymyCfUsgn5bwHsxayahQ X-Gm-Gg: ASbGncs29RRN9n/3jbl7cmnX2aumdRLNYa08kTCg/VgFJTzgTQtb8CPIE9yZ6UZdGLn qFEt7gaFMokIiEv4+fW1S7ws8TcsPjrCcFaPmTM9wmVuDXPPSqUW7kLMME5rWjwkclflgQnYkW0 2mC/j4QUdG8ABKJfv/J/qzlGSAh98e93Vv/sa5C6gddLNqVq/SgRUNdgKQ8oud7nGKxhb7/HR51 jC3DF3ekFQnavs1vIAuRTXVr/rXLl1vLt1366eIrYJ0nHEXUZLoig/z5pNk0EQrNzPCZre9be1g UUHju6JttsN11K9bTZkCkRuEP6b5UkBi3322XXdByty7R87TM2SZex43A2IVIs5+kjIi+JtBDYr BCdL4gJyIFfioQd3B4sGhoBJa7eR9galjA9oCVKlIgMhsVANWJhMDY9cmcLt7Gf6sE6XT45QNwY wg5n31SHZNABuS3tKxMSTHaflc4FVJUsIq3ZeIEIBY4A3E2fIn/QyD/6pvb9YCJFh5UOLbeVG2m KEnnw== X-Google-Smtp-Source: AGHT+IGLKPvUaWh32Ij0DANLQunKC5RJTP4+T+giKkMfHFhirmWBSXdriag7nPqi2IUKcYIbQ7kG5A== X-Received: by 2002:a05:6602:29cf:b0:948:3f60:a620 with SMTP id ca18e2360f4ac-948e0cd1b09mr2103070039f.1.1763497135810; Tue, 18 Nov 2025 12:18:55 -0800 (PST) Received: from godzilla.raven-morpho.ts.net (c-98-38-17-99.hsd1.co.comcast.net. [98.38.17.99]) by smtp.googlemail.com with ESMTPSA id ca18e2360f4ac-948fd4c273bsm419823939f.18.2025.11.18.12.18.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 18 Nov 2025 12:18:55 -0800 (PST) From: Jim Cromie To: linux-kernel@vger.kernel.org, dri-devel@lists.freedesktop.org, gregkh@linuxfoundation.org, jbaron@akamai.com Cc: ukaszb@chromium.org, louis.chauvet@bootlin.com, Jim Cromie Subject: [PATCH v6 00/31] drm/dyndbg: Fix dynamic debug classmap regression Date: Tue, 18 Nov 2025 13:18:10 -0700 Message-ID: <20251118201842.1447666-1-jim.cromie@gmail.com> X-Mailer: git-send-email 2.51.1 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: 8bit hello all, commit aad0214f3026 ("dyndbg: add DECLARE_DYNDBG_CLASSMAP macro") added dyndbg's "classmaps" feature, which brought dyndbg's 0-off-cost debug to DRM. Dyndbg wired to /sys/module/drm/parameters/debug, mapped its bits to classes named "DRM_UT_*", and effected the callsite enablements only on updates to the sys-node (and underlying >control). Sadly, it hit a CI failure, resulting in: commit bb2ff6c27bc9 ("drm: Disable dynamic debug as broken") The regression was that drivers, when modprobed, did not get the drm.debug=0xff turn-on action, because that had already been done for drm.ko itself. The core design bug is in the DECLARE_DYNDBG_CLASSMAP macro. Its use in both drm.ko (ie core) and all drivers.ko meant that they couldn't fundamentally distinguish their respective roles. They each "re-defined" the classmap separately, breaking K&R-101. My ad-hoc test scripting helped to hide the error from me, by 1st testing various combos of boot-time module.dyndbg=... and drm.debug=... configurations, and then inadvertently relying upon those initializations. This series addresses both failings: It replaces DECLARE_DYNDBG_CLASSMAP with - `DYNAMIC_DEBUG_CLASSMAP_DEFINE`: Used by core modules (e.g., `drm.ko`) to define their classmaps. Based upon DECLARE, it exports the classmap so USE can use it. - `DYNAMIC_DEBUG_CLASSMAP_USE`: this lets other "subsystem" users create a linkage to the classmap defined elsewhere (ie drm.ko). These users can then find their "parent" and apply its settings. It adds a selftest script, and a 2nd "sub-module" to recapitulate DRM's multi-module "subsystem" use-case, including the specific failure scenario. It also adds minor parsing enhancements, allowing easier construction of multi-part debug configurations. These enhancements are used to test classmaps in particular, but are not otherwize required. Thank you for your review. P.S. Id also like to "tease" some other work: 1. patchset to send pr_debugs to tracefs on +T flag allows 63 "private" tracebufs, 1 "common" one (at 0) "drm.debug_2trace=0x1ff" is possible from Lukas Bartoski 2. patchset to save 40% of DATA_DATA footprint move (modname,filename,function) to struct _ddebug_site save their descriptor intervals to 3 maple-trees 3 accessors fetch on descriptor, from trees move __dyndbg_sites __section to INIT_DATA 3. patchset to cache dynamic-prefixes should hide 2.s cost increase. Jim Cromie (31): fixes, cleanups, simple stuff: dyndbg: factor ddebug_match_desc out from ddebug_change dyndbg: add stub macro for DECLARE_DYNDBG_CLASSMAP docs/dyndbg: update examples \012 to \n docs/dyndbg: explain flags parse 1st test-dyndbg: fixup CLASSMAP usage error dyndbg: reword "class unknown," to "class:_UNKNOWN_" dyndbg: make ddebug_class_param union members same size dyndbg: drop NUM_TYPE_ARRAY dyndbg: tweak pr_fmt to avoid expansion conflicts dyndbg: reduce verbose/debug clutter callchain grooming, re-structs, code simplify/dedup by macros: dyndbg: refactor param_set_dyndbg_classes and below dyndbg: tighten fn-sig of ddebug_apply_class_bitmap dyndbg: replace classmap list with a vector dyndbg: macrofy a 2-index for-loop pattern dyndbg,module: make proper substructs in _ddebug_info dyndbg: hoist classmap-filter-by-modname up to ddebug_add_module dyndbg: move mod_name down from struct ddebug_table to _ddebug_info dyndbg-API: remove DD_CLASS_TYPE_(DISJOINT|LEVEL)_NAMES and code selftests-dyndbg: add a dynamic_debug run_tests target dyndbg: change __dynamic_func_call_cls* macros into expressions core fix, api misuse errors, etc. dyndbg-API: replace DECLARE_DYNDBG_CLASSMAP dyndbg: detect class_id reservation conflicts dyndbg: check DYNAMIC_DEBUG_CLASSMAP_DEFINE args at compile-time dyndbg-test: change do_prints testpoint to accept a loopct dyndbg-API: promote DYNAMIC_DEBUG_CLASSMAP_PARAM to API dyndbg: treat comma as a token separator dyndbg: split multi-query strings with % selftests-dyndbg: add test_mod_submod dyndbg: resolve "protection" of class'd pr_debug dyndbg: add DYNAMIC_DEBUG_CLASSMAP_USE_(dd_class_name, offset) docs/dyndbg: add classmap info to howto .../admin-guide/dynamic-debug-howto.rst | 179 +++- MAINTAINERS | 3 +- include/asm-generic/vmlinux.lds.h | 5 +- include/linux/dynamic_debug.h | 302 +++++-- kernel/module/main.c | 15 +- lib/Kconfig.debug | 24 +- lib/Makefile | 5 + lib/dynamic_debug.c | 776 +++++++++++------- lib/test_dynamic_debug.c | 198 +++-- lib/test_dynamic_debug_submod.c | 21 + tools/testing/selftests/Makefile | 1 + .../testing/selftests/dynamic_debug/Makefile | 9 + tools/testing/selftests/dynamic_debug/config | 7 + .../dynamic_debug/dyndbg_selftest.sh | 373 +++++++++ 14 files changed, 1457 insertions(+), 461 deletions(-) create mode 100644 lib/test_dynamic_debug_submod.c create mode 100644 tools/testing/selftests/dynamic_debug/Makefile create mode 100644 tools/testing/selftests/dynamic_debug/config create mode 100755 tools/testing/selftests/dynamic_debug/dyndbg_selftest.sh -- 2.51.1