Received: by 2002:a05:6358:bb9e:b0:b9:5105:a5b4 with SMTP id df30csp2377546rwb; Sun, 4 Sep 2022 14:44:10 -0700 (PDT) X-Google-Smtp-Source: AA6agR7QU5RccbO/t1fQiG780SjwrBHndCGQLy6DyREJRgvFuFW8/MfRBKHS0s85LHa+FxW2cSxB X-Received: by 2002:aa7:d341:0:b0:44e:67f1:5a2d with SMTP id m1-20020aa7d341000000b0044e67f15a2dmr3800856edr.175.1662327849889; Sun, 04 Sep 2022 14:44:09 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1662327849; cv=none; d=google.com; s=arc-20160816; b=RQpA2gpJY3POFBWiI6oENak9LNzLazZGcb+FvkMirOuMEEK1wjoZY2FD8tslhmFOcG a5cxg2+6k5egJ+foV8KEyh3XJoZLREinzr0zqhqNiYwuuSzMdcNu6s8l7HS2lbsVN6CB CTee4kn7r8aqwTQzp73BtdpPmMRlxTG+hgpvJhBP4dWe3ULUVnR4a/ABIVs2r2OtBPIA IKjjTfwovQGDDtvYbeWedp2mt/kkMf0mR2ZybeLeuq2We4NcONyT9TKfjhiKEzQZqnHT j73YdKmGgsgOT4AKq38fltQMdaIACa4b6eAkYIsSEQ/t+oC5z4ks1ERZnObBw0YSMTtQ WDYw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :message-id:date:subject:cc:to:from:dkim-signature; bh=Rk0v3z6nbpdvu88IImrHMGbLoUUPdnPRh/3Godzt1FA=; b=qu8oJDtArSCNL9ffL5KyZmcG6sHoqc2Qo79WuGhlYorMrv6v5X7yDhQnor3rKo59/8 r9UyGV1wNZK0Jl4EKG4/8wpss9FU9MhizJDuLOIb+n/S2oz9QKuifla7jm1TQ87aaPhR qMs7MLzVXTxiKvjFDCBy7O5DNfpXxMAzJswOiDpSmeBRwKLjph6XaYzZKR9wjL4D+jiG HcsNORMdNWK/LfJGt5fbM+n12lU4Nfvnd37FPAmHRijCC8qw5jwNf11kxkwPUHrRZViD k4F459oo+EvvVHHyDljdKzvJ+W6qjxMKv1n2GSdW4ixgJo4rGCfQoB3hfzAhCVoEaFf4 4ygg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=J2j1esbk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id r22-20020a170906365600b0074155a3486esi5471126ejb.901.2022.09.04.14.43.43; Sun, 04 Sep 2022 14:44:09 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@gmail.com header.s=20210112 header.b=J2j1esbk; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=QUARANTINE dis=NONE) header.from=gmail.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S234657AbiIDVmE (ORCPT + 99 others); Sun, 4 Sep 2022 17:42:04 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:45990 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S230015AbiIDVmC (ORCPT ); Sun, 4 Sep 2022 17:42:02 -0400 Received: from mail-il1-x12a.google.com (mail-il1-x12a.google.com [IPv6:2607:f8b0:4864:20::12a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C20412B62D for ; Sun, 4 Sep 2022 14:41:59 -0700 (PDT) Received: by mail-il1-x12a.google.com with SMTP id d16so3872997ils.8 for ; Sun, 04 Sep 2022 14:41:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:from:to:cc:subject:date; bh=Rk0v3z6nbpdvu88IImrHMGbLoUUPdnPRh/3Godzt1FA=; b=J2j1esbki5TiJj8l6H2Q6c2JHxiCFaB7O6YGdT/pn7Ag+2yqvlGJJweNSqogG5zEb3 diZzFKrda46JEN7PyM8gc/0Xahl4bAs5OoUt1yopJui7ZMfGo//PDQeA59ddFWxzg3vz gqvfrHJ06LSDXQQTH322kmGT2t5nLF5iYUtCtLULrNzzZclYuwWFMpEPMJNuuaJz2f5E KlO5OmjsdjFozKTAmalEqVDHQzJH1gBZ4o6kAqUA0n3MRbhARGj+Pg2J3y5bONpqxZMN 9gxyQ4asUPXvVEsUeYypcYKMsqMw/Nl60eI1KOPpWsEPBmGHn30hJUDfnigMHVwuBZIX 6LBw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; h=content-transfer-encoding:mime-version:message-id:date:subject:cc :to:from:x-gm-message-state:from:to:cc:subject:date; bh=Rk0v3z6nbpdvu88IImrHMGbLoUUPdnPRh/3Godzt1FA=; b=jyfXHG3l67/uhkmJjjhmLWVaurDxS7xZlHNDAYv74lE6QifRFuJO1HZJtve8JvB+tf RW86lSXIfbyFOULajKCkBPQNd3elenOR3kkE3cPLqAAgt1tWM6rbVKYl5rDy4nA3TIq2 quMI8det5SABsyZCryUpz34OjunAJvdcq6iSo3++sBy3frhH9KViKyWJfFhfnaBWWGBi EEIY0JJGFDDACba/QSrPFztdc42uE3RRrnDsvZAj/Ae6x3vUsh9R6pIEITzJQpORO/BK +YPzjFJ5ekicq80Qso66Jm1+Hn86TBKac1J3xLzJgL7Md4l4OFOnSNI8OOzcRHwpjYGm qQRw== X-Gm-Message-State: ACgBeo0DgKFs0R9+uVZu7ON7ccdy1BfMpz/eCTBkREOLalNDZRUsMPe3 9DHBmv8uj7N7xwjjMdtjiis= X-Received: by 2002:a05:6e02:543:b0:2eb:5d3c:dde6 with SMTP id i3-20020a056e02054300b002eb5d3cdde6mr12602343ils.84.1662327719085; Sun, 04 Sep 2022 14:41:59 -0700 (PDT) Received: from frodo.. (c-73-78-62-130.hsd1.co.comcast.net. [73.78.62.130]) by smtp.googlemail.com with ESMTPSA id e12-20020a056602044c00b006889ea7be7bsm3727688iov.29.2022.09.04.14.41.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sun, 04 Sep 2022 14:41:58 -0700 (PDT) From: Jim Cromie To: jbaron@akamai.com, gregkh@linuxfoundation.org, dri-devel@lists.freedesktop.org, amd-gfx@lists.freedesktop.org, intel-gvt-dev@lists.freedesktop.org, intel-gfx@lists.freedesktop.org, linux-kernel@vger.kernel.org Cc: daniel.vetter@ffwll.ch, seanpaul@chromium.org, robdclark@gmail.com, linux@rasmusvillemoes.dk, joe@perches.com, Jim Cromie Subject: [PATCH v6 00/57] DYNDBG: opt-in class'd debug for modules, use in drm. Date: Sun, 4 Sep 2022 15:40:37 -0600 Message-Id: <20220904214134.408619-1-jim.cromie@gmail.com> X-Mailer: git-send-email 2.37.2 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,FREEMAIL_FROM, RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org hi Greg, Jason, DRM-folk, Steven, If Im not too late for linux-next in this cycle, heres V6. Diffs are minor: - rebased onto e47eb90a0a9a (tag: next-20220901, linux-next/master) gets past Kconfig conflict, same for drm-tip. - uint debug_level, not ulong. to fit nouveau. - -1 on param-read-back, to match prev write val. - added back tracefs parts, missing from -V5 updated for tracing/events: Add __vstring() and __assign_vstr() helper macros no decorations-lite in TP_printk, do it right later. - commit-msg tweaks Theres also new RFC stuff with the potential to reduce the size of the __dyndbgs section by 20%. Not ready for prime time, or linux-next, but I hope compelling. FEATURE DESCRIPTION dyndbg provides DECLARE_DYNAMIC_DEBUG_CLASSMAP() which allows module authors to declare "good" class-names, of 4 types. DYNAMIC_DEBUG_CLASSMAP(drm_debug_classes, DD_CLASS_TYPE_DISJOINT_BITS, offset, "DRM_UT_CORE", "DRM_UT_DRIVER", "DRM_UT_KMS", "DRM_UT_PRIME", "DRM_UT_ATOMIC", "DRM_UT_VBL", "DRM_UT_STATE", "DRM_UT_LEASE", "DRM_UT_DP", "DRM_UT_DRMRES"); That usage authorizes dyndbg to set class'd pr_debugs accordingly: echo class DRM_UT_CORE +p > /proc/dynamic_debug/control echo class DRM_UT_KMS +p > /proc/dynamic_debug/control Because the DRM modules declare the same classes, they each authorize dyndbg with the same classnames, which allows dyndbg to effect changes to its selected class'd prdbgs. Opting in by using the macro effectively privatizes the limited 63-classes available per module; only modules which share classnames must coordinate their use of the common range, and they can independently use the remaining id-space. Other dyndbg filtering pertains too, so single sites can be selected. 4 DD_CLASS_TYPE_*_*s determine 2 behaviors: DISJOINT bits are independent, like drm.debug categories LEVELs 3>2, turns on level-2, like nouveau debug-levels NUM/BITS numeric input, bitmap if disjoint, else 0-32. NAMES accept proper names, like DRM_UT_CORE Dyndbg provides param-callbacks which enforce those behaviors: # DISJOINT_BITS echo 0x03 > /sys/module/drm/parameters/debug # LEVEL_NUM echo 3 > /sys/module/drm/nouveau/debug-mumble* # DISJOINT_NAMES echo +DRM_UT_CORE,+DRM_UT_KMS,-DRM_UT_DRIVER > /sys/module/drm/parameters/debug_categories # LEVEL_NAMES echo NV_TRACE > /sys/module/nouveau/parameters/debug-mumble* That design choice is allowed cuz verbosity is always attached to a (user visible) interface, and theres no reason not to put the implementation there (in the callback). It also considerably simplifies things; ddebug_change can treat class_id's as disjoint, period. Jim Cromie (57): prep: dyndbg: fix static_branch manipulation dyndbg: fix module.dyndbg handling dyndbg: show both old and new in change-info dyndbg: reverse module walk in cat control dyndbg: reverse module.callsite walk in cat control dyndbg: use ESCAPE_SPACE for cat control dyndbg: let query-modname override actual module name dyndbg: add test_dynamic_debug module dyndbg: drop EXPORTed dynamic_debug_exec_queries dyndbg: cleanup auto vars in dynamic_debug_init dyndbg: gather __dyndbg[] state into struct _ddebug_info class feature: dyndbg: add class_id to pr_debug callsites dyndbg: add __pr_debug_cls for testing dyndbg: add DECLARE_DYNDBG_CLASSMAP macro kernel/module: add __dyndbg_classes section dyndbg: add ddebug_attach_module_classes dyndbg: validate class FOO by checking with module doc-dyndbg: describe "class CLASS_NAME" query support doc-dyndbg: edit dynamic-debug-howto for brevity, audience dyndbg: add drm.debug style (drm/parameters/debug) bitmap support dyndbg: test DECLARE_DYNDBG_CLASSMAP, sysfs nodes drm-use-case: drm_print: condense enum drm_debug_category drm: POC drm on dyndbg - use in core, 2 helpers, 3 drivers. drm_print: interpose drm_*dbg with forwarding macros drm_print: wrap drm_*_dbg in dyndbg descriptor factory macro drm-print.h: include dyndbg header drm-print: add drm_dbg_driver to improve namespace symmetry drm_print: refine drm_debug_enabled for jump-label drm_print: prefer bare printk KERN_DEBUG on generic fn drm_print: add _ddebug descriptor to drm_*dbg prototypes nouveau: change nvkm_debug/trace to use dev_dbg POC nouveau: adapt NV_DEBUG, NV_ATOMIC to use DRM.debug nouveau: WIP add 2 LEVEL_NUM classmaps for CLI, SUBDEV dyndbg-tracefs: dyndbg: add _DPRINTK_FLAGS_ENABLED dyndbg: add _DPRINTK_FLAGS_TRACE dyndbg: add write-events-to-tracefs code dyndbg: add 2 trace-events: drm_debug, drm_devdbg dyndbg: add 2 more trace-events: pr_debug, dev_dbg dyndbg/drm: POC add tracebits sysfs-knob RFC-20%-data-reclaim: dyndbg: abstraction macros for modname,function,filename fields dyndbg: split repeating columns to new struct _ddebug_site dyndbg: shrink lineno field by 2 bits dyndbg: add _index,_map to struct _ddebug dyndbg: extend __ddebug_add_module proto to allow packing sites dyndbg: de-duplicate sites dyndbg: drop site-> in add-module, more needed dyndbg: demote iter->site in _init dyndbg: add .gnu.linkonce slot in vmlinux.lds.h KEEPs dyndbg: add structs _ddebug_hdr, _ddebug_site_hdr dyndbg: count unique callsites dyndbg: prevent build bugs via -DNO_DYNAMIC_DEBUG_TABLE dyndbg: add DEFINE_DYNAMIC_DEBUG_TABLE, use it tacitly RFC dyndbg: add/use is_dyndbg_header then set _uplink dyndbg: add .gnu.linkonce. & __dyndbg* sections in module.lds.h dyndbg: dynamic_debug_sites_reclaim() using free_reserved_page() WAG dyndbg: work ddebug_map_site dyndbg: fiddle with readback value on LEVEL_NAMES types .../admin-guide/dynamic-debug-howto.rst | 249 +++--- MAINTAINERS | 2 + arch/arm/boot/compressed/Makefile | 2 + arch/sparc/vdso/Makefile | 2 + arch/x86/boot/compressed/Makefile | 1 + arch/x86/entry/vdso/Makefile | 3 + arch/x86/purgatory/Makefile | 1 + drivers/firmware/efi/libstub/Makefile | 3 +- drivers/gpu/drm/Kconfig | 12 + drivers/gpu/drm/Makefile | 2 + drivers/gpu/drm/amd/amdgpu/amdgpu_drv.c | 14 + drivers/gpu/drm/display/drm_dp_helper.c | 13 + drivers/gpu/drm/drm_crtc_helper.c | 13 + drivers/gpu/drm/drm_print.c | 83 +- drivers/gpu/drm/i915/i915_params.c | 12 + .../gpu/drm/nouveau/include/nvkm/core/debug.h | 16 + .../drm/nouveau/include/nvkm/core/subdev.h | 17 +- drivers/gpu/drm/nouveau/nouveau_drm.c | 20 + drivers/gpu/drm/nouveau/nouveau_drv.h | 16 +- drivers/gpu/drm/nouveau/nvkm/core/subdev.c | 23 + include/asm-generic/module.lds.h | 12 +- include/asm-generic/vmlinux.lds.h | 10 + include/drm/drm_print.h | 85 +- include/linux/dynamic_debug.h | 286 ++++++- include/trace/events/drm.h | 54 ++ include/trace/events/dyndbg.h | 73 ++ kernel/module/internal.h | 4 +- kernel/module/main.c | 22 +- lib/Kconfig.debug | 10 + lib/Makefile | 1 + lib/dynamic_debug.c | 792 +++++++++++++++--- lib/test_dynamic_debug.c | 165 ++++ 32 files changed, 1680 insertions(+), 338 deletions(-) create mode 100644 include/trace/events/drm.h create mode 100644 include/trace/events/dyndbg.h create mode 100644 lib/test_dynamic_debug.c -- 2.37.2