From nobody Wed Dec 31 11:06:44 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7C6D9C4167D for ; Fri, 3 Nov 2023 13:10:27 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377085AbjKCNK1 (ORCPT ); Fri, 3 Nov 2023 09:10:27 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43022 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233010AbjKCNKY (ORCPT ); Fri, 3 Nov 2023 09:10:24 -0400 Received: from mail-lf1-x134.google.com (mail-lf1-x134.google.com [IPv6:2a00:1450:4864:20::134]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 22AA2111 for ; Fri, 3 Nov 2023 06:10:18 -0700 (PDT) Received: by mail-lf1-x134.google.com with SMTP id 2adb3069b0e04-507cd62472dso3363373e87.0 for ; Fri, 03 Nov 2023 06:10:18 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1699017016; x=1699621816; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=8zUmexXYrH/NJmdEkqNApaAeDNWEfVHwHcSuDaoz6R8=; b=BOgzkm6kpxr7ZZyV5UoocE7xui+iogZH/xS2gIhQGdYbZExRi2fW/sZJ1KQ7Lu8ZsB Wh9QrLW2AhLw912h+dBmrjfv9X32dViVJVfMKz6KmWo7AkkHunrP5/5ArCVcDNYwOTLR POZVo3fFZhw91csIyY41A74J71usQ7KjZUqfr6YfHJquKQ8lxmX+ZmW0qAjtSv8g1Xyb siwe5wAF1Ce3Ut8M5xk/fyGT9Up467RtNRQhz4qFj+rxMxvFGLUcERszuNzaJxh2zivS LFSJihXUEfBdxlY+m+4LCleb1/bDT3a5qluGi0rxV4ztqegXHrLarP0i+nKfIkoflO3f 9dcA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699017016; x=1699621816; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=8zUmexXYrH/NJmdEkqNApaAeDNWEfVHwHcSuDaoz6R8=; b=JcPQJ5EfNdkq7xZZ8APh47eoiWqka0ZSgt8X8t8FQK34dcyN1lgmGE5dOSD3TdVCIW 2aReeQJBYiXxk1EvlCmaRpLlTzRLWzwBxcpnPn+XyYe2+64Lz18A6/7714EUqSGo9E3h bvEeETKl81cL6RnJnOBhZaaoaa46tUWCaJqWRdSMcJ4TWoGDG/5XztXDB6SB9GpyxO7x fY1ENMuMdHeBBJcWcaFrhEBQ7tqLRIfiEUwV0xCjlrApN4G5ENLSgtyvwUV13AoQacOV asVDH/pB68rqkPpR3ymCCcmphbvPp/INpnI9ladtf21gp+AV0n4gDMNP3Kc1k9CJ8k3G e97g== X-Gm-Message-State: AOJu0Yyj1ntNTWZqNgKijuNVTJr/luMI4x7cna2gyxVM8L7gC9OxO4h4 j5MnxHh4u/+hcghQY/lCAaJo X-Google-Smtp-Source: AGHT+IGCcE0jOiEDjSrTLznkWsHEtLUtlRMYD0e7fCAoyXodPE9tkEchzvfwzlPb/ZC/c85hWpqlew== X-Received: by 2002:ac2:4824:0:b0:504:3499:7c2b with SMTP id 4-20020ac24824000000b0050434997c2bmr973009lft.21.1699017016407; Fri, 03 Nov 2023 06:10:16 -0700 (PDT) Received: from ukaszb-l.wifi.semihalf.net ([83.142.187.85]) by smtp.gmail.com with ESMTPSA id f21-20020ac25335000000b00507a69a4799sm216336lfh.270.2023.11.03.06.10.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 06:10:16 -0700 (PDT) From: =?UTF-8?q?=C5=81ukasz=20Bartosik?= To: Jason Baron , Jim Cromie , Andrew Morton , Kees Cook , Douglas Anderson Cc: Guenter Roeck , Yaniv Tzoreff , Benson Leung , Steven Rostedt , Vincent Whitchurch , Pekka Paalanen , Sean Paul , Daniel Vetter , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v1 01/12] dyndbg: add _DPRINTK_FLAGS_ENABLED Date: Fri, 3 Nov 2023 14:10:00 +0100 Message-Id: <20231103131011.1316396-2-lb@semihalf.com> X-Mailer: git-send-email 2.38.3 In-Reply-To: <20231103131011.1316396-1-lb@semihalf.com> References: <20231103131011.1316396-1-lb@semihalf.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Jim Cromie Distinguish the condition: _DPRINTK_FLAGS_ENABLED from the bit: _DPRINTK_FLAGS_PRINT, and re-define former in terms of latter, in preparation to add a 2nd bit: _DPRINTK_FLAGS_TRACE Update JUMP_LABEL code block to check _DPRINTK_FLAGS_ENABLED symbol. Also add a 'K' to get new symbol _DPRINTK_FLAGS_PRINTK, in order to break any stale uses. CC: vincent.whitchurch@axis.com Signed-off-by: Jim Cromie --- include/linux/dynamic_debug.h | 10 ++++++---- lib/dynamic_debug.c | 8 ++++---- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index 4fcbf4d4fd0a..7be791af7cf1 100644 --- a/include/linux/dynamic_debug.h +++ b/include/linux/dynamic_debug.h @@ -32,7 +32,7 @@ struct _ddebug { * writes commands to /dynamic_debug/control */ #define _DPRINTK_FLAGS_NONE 0 -#define _DPRINTK_FLAGS_PRINT (1<<0) /* printk() a message using the format= */ +#define _DPRINTK_FLAGS_PRINTK (1 << 0) /* printk() a message using the for= mat */ #define _DPRINTK_FLAGS_INCL_MODNAME (1<<1) #define _DPRINTK_FLAGS_INCL_FUNCNAME (1<<2) #define _DPRINTK_FLAGS_INCL_LINENO (1<<3) @@ -44,8 +44,10 @@ struct _ddebug { _DPRINTK_FLAGS_INCL_LINENO | _DPRINTK_FLAGS_INCL_TID |\ _DPRINTK_FLAGS_INCL_SOURCENAME) =20 +#define _DPRINTK_FLAGS_ENABLED _DPRINTK_FLAGS_PRINTK + #if defined DEBUG -#define _DPRINTK_FLAGS_DEFAULT _DPRINTK_FLAGS_PRINT +#define _DPRINTK_FLAGS_DEFAULT _DPRINTK_FLAGS_PRINTK #else #define _DPRINTK_FLAGS_DEFAULT 0 #endif @@ -199,10 +201,10 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor, =20 #ifdef DEBUG #define DYNAMIC_DEBUG_BRANCH(descriptor) \ - likely(descriptor.flags & _DPRINTK_FLAGS_PRINT) + likely(descriptor.flags & _DPRINTK_FLAGS_ENABLED) #else #define DYNAMIC_DEBUG_BRANCH(descriptor) \ - unlikely(descriptor.flags & _DPRINTK_FLAGS_PRINT) + unlikely(descriptor.flags & _DPRINTK_FLAGS_ENABLED) #endif =20 #endif /* CONFIG_JUMP_LABEL */ diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 6fba6423cc10..ee0cb37153ef 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -89,7 +89,7 @@ static inline const char *trim_prefix(const char *path) } =20 static const struct { unsigned flag:8; char opt_char; } opt_array[] =3D { - { _DPRINTK_FLAGS_PRINT, 'p' }, + { _DPRINTK_FLAGS_PRINTK, 'p' }, { _DPRINTK_FLAGS_INCL_MODNAME, 'm' }, { _DPRINTK_FLAGS_INCL_FUNCNAME, 'f' }, { _DPRINTK_FLAGS_INCL_SOURCENAME, 's' }, @@ -247,10 +247,10 @@ static int ddebug_change(const struct ddebug_query *q= uery, if (newflags =3D=3D dp->flags) continue; #ifdef CONFIG_JUMP_LABEL - if (dp->flags & _DPRINTK_FLAGS_PRINT) { - if (!(newflags & _DPRINTK_FLAGS_PRINT)) + if (dp->flags & _DPRINTK_FLAGS_ENABLED) { + if (!(newflags & _DPRINTK_FLAGS_ENABLED)) static_branch_disable(&dp->key.dd_key_true); - } else if (newflags & _DPRINTK_FLAGS_PRINT) { + } else if (newflags & _DPRINTK_FLAGS_ENABLED) { static_branch_enable(&dp->key.dd_key_true); } #endif --=20 2.42.0.869.gea05f2083d-goog From nobody Wed Dec 31 11:06:44 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 02F2FC4332F for ; Fri, 3 Nov 2023 13:10:33 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377200AbjKCNKd (ORCPT ); Fri, 3 Nov 2023 09:10:33 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:43030 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1376706AbjKCNK1 (ORCPT ); Fri, 3 Nov 2023 09:10:27 -0400 Received: from mail-lf1-x12d.google.com (mail-lf1-x12d.google.com [IPv6:2a00:1450:4864:20::12d]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 2443C1A8 for ; Fri, 3 Nov 2023 06:10:19 -0700 (PDT) Received: by mail-lf1-x12d.google.com with SMTP id 2adb3069b0e04-507be298d2aso2552420e87.1 for ; Fri, 03 Nov 2023 06:10:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1699017017; x=1699621817; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=uhWtxM0qS6kRyTFS+yHc5Oehyo7Hed75UZyn2RY1SHs=; b=CzmZz9a238rOXfNbgg2ABmsVemX8oNTwFrVYX+ARpKYJeob2f5vXQZ2w/0X/hganWQ tugNcztMK0f6fkwMQUjAojB/LbAYBftge7yJYeaf3kEhGIwGfg0hSOn72roT6MeK3JUa 6QSrYiFJ6VF+PiTL9DhHHOhldOiPXGzFfgowMp2Agkoy6vX0FCj3gZpOeOe7WgAXE9CY JV1+h7SivlaFiHvZmQJIyZNo2r/LB2RLMm2oYdr/yzccu7C0U54x22c+WI7nDhq73k0I f0rO9WDNoymLq2V43coY9gG0cBbwbeX9z/+GL7oE1bdjX6c9xfN3TDxWCtTZMLV7qPxJ dncw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699017017; x=1699621817; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uhWtxM0qS6kRyTFS+yHc5Oehyo7Hed75UZyn2RY1SHs=; b=kQ3KlVYUB02cakuk5fGxZBFwRUXkmXr+vZwvRisxT5OX4+gQZDh6lMbv24ZWYnHWI5 jIQCOSFMNqFcIeCPeYFroVnMx85TpwECwKT2jg/ikBwxIUA7lT4/M5YpC8QWMiBtq4zK vSuAd2wJjcFUdzL0YPT0nt20bY8fLFz/AEwr2E5GQOU9LfJ4WlNj40EoAovS/PPAJip4 0/cnIKDzN1XjlEhiDvrjo/74ZaTFpXDpxoYliJKbt68arJU62WaX0dkQfUIEvqdLgews ZQkhHy9dImxGLeAH+VZ+z3VXtq6MePxkL0CSSPbLTn0y8LKwQhfY8ggm3GaZTx8l3rjA 865Q== X-Gm-Message-State: AOJu0Yxt6tQgrYnEQ/o7lEDoi1tbke3knT47j+pvLmKo08yoZccNhw2b th6EdpAiH/MJkZHOdBuKI5wxprPX79Qy20M+Fe/f X-Google-Smtp-Source: AGHT+IG6q0aJI6J5+4iBm5dvQHxXgkv3aKium5C/q4Dh0pH4eX2eFdJAJv9bVJeeKtUNHU6zmYMtng== X-Received: by 2002:ac2:446e:0:b0:4fe:2f8a:457e with SMTP id y14-20020ac2446e000000b004fe2f8a457emr16338767lfl.43.1699017017298; Fri, 03 Nov 2023 06:10:17 -0700 (PDT) Received: from ukaszb-l.wifi.semihalf.net ([83.142.187.85]) by smtp.gmail.com with ESMTPSA id f21-20020ac25335000000b00507a69a4799sm216336lfh.270.2023.11.03.06.10.16 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 06:10:17 -0700 (PDT) From: =?UTF-8?q?=C5=81ukasz=20Bartosik?= To: Jason Baron , Jim Cromie , Andrew Morton , Kees Cook , Douglas Anderson Cc: Guenter Roeck , Yaniv Tzoreff , Benson Leung , Steven Rostedt , Vincent Whitchurch , Pekka Paalanen , Sean Paul , Daniel Vetter , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v1 02/12] dyndbg: add _DPRINTK_FLAGS_TRACE Date: Fri, 3 Nov 2023 14:10:01 +0100 Message-Id: <20231103131011.1316396-3-lb@semihalf.com> X-Mailer: git-send-email 2.38.3 In-Reply-To: <20231103131011.1316396-1-lb@semihalf.com> References: <20231103131011.1316396-1-lb@semihalf.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Jim Cromie Add new flag, and OR it into _DPRINTK_FLAGS_ENABLED definition CC: vincent.whitchurch@axis.com Signed-off-by: Jim Cromie --- include/linux/dynamic_debug.h | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index 7be791af7cf1..497130816e9c 100644 --- a/include/linux/dynamic_debug.h +++ b/include/linux/dynamic_debug.h @@ -33,6 +33,9 @@ struct _ddebug { */ #define _DPRINTK_FLAGS_NONE 0 #define _DPRINTK_FLAGS_PRINTK (1 << 0) /* printk() a message using the for= mat */ +#define _DPRINTK_FLAGS_TRACE (1 << 6) +#define _DPRINTK_FLAGS_ENABLED (_DPRINTK_FLAGS_PRINTK | _DPRINTK_FLAGS_TRA= CE) + #define _DPRINTK_FLAGS_INCL_MODNAME (1<<1) #define _DPRINTK_FLAGS_INCL_FUNCNAME (1<<2) #define _DPRINTK_FLAGS_INCL_LINENO (1<<3) @@ -44,8 +47,6 @@ struct _ddebug { _DPRINTK_FLAGS_INCL_LINENO | _DPRINTK_FLAGS_INCL_TID |\ _DPRINTK_FLAGS_INCL_SOURCENAME) =20 -#define _DPRINTK_FLAGS_ENABLED _DPRINTK_FLAGS_PRINTK - #if defined DEBUG #define _DPRINTK_FLAGS_DEFAULT _DPRINTK_FLAGS_PRINTK #else --=20 2.42.0.869.gea05f2083d-goog From nobody Wed Dec 31 11:06:44 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 28F2BC4167B for ; Fri, 3 Nov 2023 13:10:35 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377571AbjKCNKg (ORCPT ); Fri, 3 Nov 2023 09:10:36 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48764 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377096AbjKCNK1 (ORCPT ); Fri, 3 Nov 2023 09:10:27 -0400 Received: from mail-lj1-x22a.google.com (mail-lj1-x22a.google.com [IPv6:2a00:1450:4864:20::22a]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E7AE21BC for ; Fri, 3 Nov 2023 06:10:19 -0700 (PDT) Received: by mail-lj1-x22a.google.com with SMTP id 38308e7fff4ca-2c50305c5c4so28980371fa.1 for ; Fri, 03 Nov 2023 06:10:19 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1699017018; x=1699621818; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=Ct2b7qLLtnf8Wqvv6t/AwVn4yO4VWwiciLhACuMIYEU=; b=bEIb+OOOP/FD3sp07syu2ncmEYppH3w2idLF5W72gbHk5zzaXc3OxyEt8GNGyPXhVI VVYWLnsbTT3SZ45DAWNZ66Ngf6jfAVLVcTD5oEcSKP0qtrAbmTD6Nd4s39KFx/G1tBwM jX8SeVo+yzFPxpSXtLASVQW0gTRM+m07P1+AGJbsPlq0dqm+OMBXOHXZ5rtVIgPC32k3 d/hDcs4EwTsJ0tBvjeu+eTUi7wJvoiADK1pGzLh39XA3s5xYnvl/74loIR08TSe0d9Fj 6SbRqcCKJL0W7q/lAXbN/F+/40mMK3J3+XkS8D2j5wu8y4LdHm/TIgFIiP4LR1x5yMIK ClmA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699017018; x=1699621818; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=Ct2b7qLLtnf8Wqvv6t/AwVn4yO4VWwiciLhACuMIYEU=; b=mcrgayNt0TWIX/XRwQ/BzrDmk/ZrYCJyaECD6BknTkjnPStPZZVJPOIrC+J8lstn89 LiSQewxF6wPiwYinHIqiwUbs2HNVHJithpPM2DKoIEwspicPKweTOh7l8lZbmc9DFcDe E8IADvHuFMlgwHEkiHvZqvX+ZG3IzCPdpdryRg0xmHMN9uMHD0EIP89LjIk/BRm7akEK 4+WrVF/TkKTxPFkNpbWtP7584cagoAOUlxVp/C9fTpgiI5egNYxfWH6KeJi35a7DgrUa bqj8NCu0yPm1clR/3mguQFPbCjQq+TTZzHZc5D+Md5U7/JkP3CQJWep/VzTMXIgyaIIC HqZw== X-Gm-Message-State: AOJu0YyhGNbp/6BLHVlzbY+kYAgrx7xUTYzEsZvF6GlYBGMQQCSOUd9I HbFod3GizTbdZKqz8cWhY+ob X-Google-Smtp-Source: AGHT+IGee3fv2eUtrFH8YXMTw/8aeFYkce320CklKRvnm3HsaZ5iKDuzZL1sIdt6xbpHTJaDYPlrgQ== X-Received: by 2002:a05:6512:688:b0:507:9a13:27bd with SMTP id t8-20020a056512068800b005079a1327bdmr20841877lfe.7.1699017018231; Fri, 03 Nov 2023 06:10:18 -0700 (PDT) Received: from ukaszb-l.wifi.semihalf.net ([83.142.187.85]) by smtp.gmail.com with ESMTPSA id f21-20020ac25335000000b00507a69a4799sm216336lfh.270.2023.11.03.06.10.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 06:10:17 -0700 (PDT) From: =?UTF-8?q?=C5=81ukasz=20Bartosik?= To: Jason Baron , Jim Cromie , Andrew Morton , Kees Cook , Douglas Anderson Cc: Guenter Roeck , Yaniv Tzoreff , Benson Leung , Steven Rostedt , Vincent Whitchurch , Pekka Paalanen , Sean Paul , Daniel Vetter , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v1 03/12] dyndbg: add write-events-to-tracefs code Date: Fri, 3 Nov 2023 14:10:02 +0100 Message-Id: <20231103131011.1316396-4-lb@semihalf.com> X-Mailer: git-send-email 2.38.3 In-Reply-To: <20231103131011.1316396-1-lb@semihalf.com> References: <20231103131011.1316396-1-lb@semihalf.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Jim Cromie adds: ddebug_trace() uses trace_console() temporarily to issue printk:console event uses internal-ish __ftrace_trace_stack code: 4-context buffer stack, barriers per Steve Rostedt call it from new funcs: ddebug_printk() - print to both syslog/tracefs ddebug_dev_printk() - dev-print to both syslog/tracefs These handle both _DPRINTK_FLAGS_PRINTK and _DPRINTK_FLAGS_TRACE cases, allowing to vsnprintf the message once and use it for both, skipping past the KERN_DEBUG character for tracing. Finally, adjust the callers: __ddebug_{pr_debug,{,net,ib}dev_dbg}, replacing printk and dev_printk with the new funcs above. The _DPRINTK_FLAGS_TRACE flag character is 'T', so the following finds all callsites enabled for tracing: grep -P =3Dp?T /proc/dynamic_debug/control This patch,~1,~2 are basically copies of: https://lore.kernel.org/lkml/ 20200825153338.17061-1-vincent.whitchurch@axis.com with a few differences: - s/dynamic_/ddebug_/ on Vincent's additions - __printf attrs on the _printk funcs - reuses trace_console() event, not adding a new "printk:dyndbg" event. next patch replaces this with 2 new events CC: vincent.whitchurch@axis.com Signed-off-by: Jim Cromie --- .../admin-guide/dynamic-debug-howto.rst | 5 +- lib/dynamic_debug.c | 156 +++++++++++++++--- 2 files changed, 133 insertions(+), 28 deletions(-) diff --git a/Documentation/admin-guide/dynamic-debug-howto.rst b/Documentat= ion/admin-guide/dynamic-debug-howto.rst index 0b3d39c610d9..8a126e10a6c5 100644 --- a/Documentation/admin-guide/dynamic-debug-howto.rst +++ b/Documentation/admin-guide/dynamic-debug-howto.rst @@ -209,8 +209,9 @@ of the characters:: =20 The flags are:: =20 - p enables the pr_debug() callsite. - _ enables no flags. + p callsite prints to syslog + T callsite issues a dyndbg:* trace-event + _ enables no flags =20 Decorator flags add to the message-prefix, in order: t Include thread ID, or diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index ee0cb37153ef..016f33c20251 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -36,6 +36,7 @@ #include #include #include +#include =20 #include =20 @@ -90,6 +91,7 @@ static inline const char *trim_prefix(const char *path) =20 static const struct { unsigned flag:8; char opt_char; } opt_array[] =3D { { _DPRINTK_FLAGS_PRINTK, 'p' }, + { _DPRINTK_FLAGS_TRACE, 'T' }, { _DPRINTK_FLAGS_INCL_MODNAME, 'm' }, { _DPRINTK_FLAGS_INCL_FUNCNAME, 'f' }, { _DPRINTK_FLAGS_INCL_SOURCENAME, 's' }, @@ -858,6 +860,98 @@ static inline char *dynamic_emit_prefix(struct _ddebug= *desc, char *buf) return buf; } =20 +/* + * This code is heavily based on __ftrace_trace_stack(). + * + * Allow 4 levels of nesting: normal, softirq, irq, NMI. + */ +#define DYNAMIC_TRACE_NESTING 4 + +struct ddebug_trace_buf { + char buf[256]; +}; + +struct ddebug_trace_bufs { + struct ddebug_trace_buf bufs[DYNAMIC_TRACE_NESTING]; +}; + +static DEFINE_PER_CPU(struct ddebug_trace_bufs, ddebug_trace_bufs); +static DEFINE_PER_CPU(int, ddebug_trace_reserve); + +static void ddebug_trace(const char *fmt, va_list args) +{ + struct ddebug_trace_buf *buf; + int bufidx; + int len; + + preempt_disable_notrace(); + + bufidx =3D __this_cpu_inc_return(ddebug_trace_reserve) - 1; + + if (WARN_ON_ONCE(bufidx > DYNAMIC_TRACE_NESTING)) + goto out; + + /* For the same reasons as in __ftrace_trace_stack(). */ + barrier(); + + buf =3D this_cpu_ptr(ddebug_trace_bufs.bufs) + bufidx; + + len =3D vscnprintf(buf->buf, sizeof(buf->buf), fmt, args); + trace_console(buf->buf, len); + +out: + /* As above. */ + barrier(); + __this_cpu_dec(ddebug_trace_reserve); + preempt_enable_notrace(); +} + +__printf(2, 3) +static void ddebug_printk(unsigned int flags, const char *fmt, ...) +{ + if (flags & _DPRINTK_FLAGS_TRACE) { + va_list args; + + va_start(args, fmt); + /* + * All callers include the KERN_DEBUG prefix to keep the + * vprintk case simple; strip it out for tracing. + */ + ddebug_trace(fmt + strlen(KERN_DEBUG), args); + va_end(args); + } + + if (flags & _DPRINTK_FLAGS_PRINTK) { + va_list args; + + va_start(args, fmt); + vprintk(fmt, args); + va_end(args); + } +} + +__printf(3, 4) +static void ddebug_dev_printk(unsigned int flags, const struct device *dev, + const char *fmt, ...) +{ + + if (flags & _DPRINTK_FLAGS_TRACE) { + va_list args; + + va_start(args, fmt); + ddebug_trace(fmt, args); + va_end(args); + } + + if (flags & _DPRINTK_FLAGS_PRINTK) { + va_list args; + + va_start(args, fmt); + dev_vprintk_emit(LOGLEVEL_DEBUG, dev, fmt, args); + va_end(args); + } +} + void __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...) { va_list args; @@ -872,16 +966,18 @@ void __dynamic_pr_debug(struct _ddebug *descriptor, c= onst char *fmt, ...) vaf.fmt =3D fmt; vaf.va =3D &args; =20 - printk(KERN_DEBUG "%s%pV", dynamic_emit_prefix(descriptor, buf), &vaf); + ddebug_printk(descriptor->flags, KERN_DEBUG "%s%pV", + dynamic_emit_prefix(descriptor, buf), &vaf); =20 va_end(args); } EXPORT_SYMBOL(__dynamic_pr_debug); =20 void __dynamic_dev_dbg(struct _ddebug *descriptor, - const struct device *dev, const char *fmt, ...) + const struct device *dev, const char *fmt, ...) { struct va_format vaf; + unsigned int flags; va_list args; =20 BUG_ON(!descriptor); @@ -891,16 +987,18 @@ void __dynamic_dev_dbg(struct _ddebug *descriptor, =20 vaf.fmt =3D fmt; vaf.va =3D &args; + flags =3D descriptor->flags; =20 if (!dev) { - printk(KERN_DEBUG "(NULL device *): %pV", &vaf); + ddebug_printk(flags, KERN_DEBUG "(NULL device *): %pV", + &vaf); } else { char buf[PREFIX_SIZE] =3D ""; =20 - dev_printk_emit(LOGLEVEL_DEBUG, dev, "%s%s %s: %pV", - dynamic_emit_prefix(descriptor, buf), - dev_driver_string(dev), dev_name(dev), - &vaf); + ddebug_dev_printk(flags, dev, "%s%s %s: %pV", + dynamic_emit_prefix(descriptor, buf), + dev_driver_string(dev), dev_name(dev), + &vaf); } =20 va_end(args); @@ -913,6 +1011,7 @@ void __dynamic_netdev_dbg(struct _ddebug *descriptor, const struct net_device *dev, const char *fmt, ...) { struct va_format vaf; + unsigned int flags; va_list args; =20 BUG_ON(!descriptor); @@ -922,22 +1021,24 @@ void __dynamic_netdev_dbg(struct _ddebug *descriptor, =20 vaf.fmt =3D fmt; vaf.va =3D &args; + flags =3D descriptor->flags; =20 if (dev && dev->dev.parent) { char buf[PREFIX_SIZE] =3D ""; =20 - dev_printk_emit(LOGLEVEL_DEBUG, dev->dev.parent, - "%s%s %s %s%s: %pV", - dynamic_emit_prefix(descriptor, buf), - dev_driver_string(dev->dev.parent), - dev_name(dev->dev.parent), - netdev_name(dev), netdev_reg_state(dev), - &vaf); + ddebug_dev_printk(flags, dev->dev.parent, + "%s%s %s %s%s: %pV", + dynamic_emit_prefix(descriptor, buf), + dev_driver_string(dev->dev.parent), + dev_name(dev->dev.parent), + netdev_name(dev), netdev_reg_state(dev), + &vaf); } else if (dev) { - printk(KERN_DEBUG "%s%s: %pV", netdev_name(dev), - netdev_reg_state(dev), &vaf); + ddebug_printk(flags, KERN_DEBUG "%s%s: %pV", + netdev_name(dev), netdev_reg_state(dev), &vaf); } else { - printk(KERN_DEBUG "(NULL net_device): %pV", &vaf); + ddebug_printk(flags, KERN_DEBUG "(NULL net_device): %pV", + &vaf); } =20 va_end(args); @@ -953,26 +1054,29 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor, { struct va_format vaf; va_list args; + unsigned int flags; =20 va_start(args, fmt); =20 vaf.fmt =3D fmt; vaf.va =3D &args; + flags =3D descriptor->flags; =20 if (ibdev && ibdev->dev.parent) { char buf[PREFIX_SIZE] =3D ""; =20 - dev_printk_emit(LOGLEVEL_DEBUG, ibdev->dev.parent, - "%s%s %s %s: %pV", - dynamic_emit_prefix(descriptor, buf), - dev_driver_string(ibdev->dev.parent), - dev_name(ibdev->dev.parent), - dev_name(&ibdev->dev), - &vaf); + ddebug_dev_printk(flags, ibdev->dev.parent, + "%s%s %s %s: %pV", + dynamic_emit_prefix(descriptor, buf), + dev_driver_string(ibdev->dev.parent), + dev_name(ibdev->dev.parent), + dev_name(&ibdev->dev), + &vaf); } else if (ibdev) { - printk(KERN_DEBUG "%s: %pV", dev_name(&ibdev->dev), &vaf); + ddebug_printk(flags, KERN_DEBUG "%s: %pV", + dev_name(&ibdev->dev), &vaf); } else { - printk(KERN_DEBUG "(NULL ib_device): %pV", &vaf); + ddebug_printk(flags, KERN_DEBUG "(NULL ip_device): %pV", &vaf); } =20 va_end(args); --=20 2.42.0.869.gea05f2083d-goog From nobody Wed Dec 31 11:06:44 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 50F57C4167D for ; Fri, 3 Nov 2023 13:10:37 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377607AbjKCNKh (ORCPT ); Fri, 3 Nov 2023 09:10:37 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48770 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377151AbjKCNK1 (ORCPT ); Fri, 3 Nov 2023 09:10:27 -0400 Received: from mail-lf1-x12f.google.com (mail-lf1-x12f.google.com [IPv6:2a00:1450:4864:20::12f]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id E9A0F1BF for ; Fri, 3 Nov 2023 06:10:20 -0700 (PDT) Received: by mail-lf1-x12f.google.com with SMTP id 2adb3069b0e04-507ad511315so2892088e87.0 for ; Fri, 03 Nov 2023 06:10:20 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1699017019; x=1699621819; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=xew6Ma5CImKuft65tcqud5KKub8N64RdoRmBOoBM77I=; b=Wtx0ohMy4S1IDePk8j5q+iVebvU0mI3nfRARZwrkzPzfB6V9vAiNNZrxfo2uD/8bif 3esFG6RXoHTjBURgMdemFtzhiAV4wOl0q4r53lozuVvtT4Mvieki5D98XRXXMUb5tBVr iWBQr2Rn95oomzTxzZJD5hcS8Mix72dEAkQXEa+gf3u/cahl7a1JLS7P6uCMw7YQ+gAT eyggjlgL0h210LxfwLAAEwr13J0ISvDEBCFyoap41cRlnFye67q1qqIlMq9+isMJijrl bgm/NiWW0PkxHGr/N+nd/229LfTwjNM8Evhyidi+z1vne7VSX8pqs6n5cu7G0cPIJ4TL X8Mg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699017019; x=1699621819; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=xew6Ma5CImKuft65tcqud5KKub8N64RdoRmBOoBM77I=; b=J2hXJ7F+UDoxnkvUsgR/J1NVmb8W6VeRFnHdFc5YSAjWkix3kAK+OPD0q1qvGTMDR0 PbtFScrVrKH03ySmIT5eIkFjlSTDBKuZri6ljfziLMhiSScamqFF/simKs6p0ezH1StK exbdEIgaoOuNd1bMvJbR5kvJZtZA/7DjHXqVS3mV1LNHeyJMxaeFnd4hGrnlgHFlg8UM uXp84FlwGpuC1XD0ZrUZWg+hVnUueNNAwzlaUpsioNAQbtwGVVUMalA6sZmrRcS8cNWM g950wucPbv5Ol3SFEvHKk1M9tUZqa6KgldZdoaP8AQ+R6dt2X8P8HM3fbyHdKSI5spwi /sFQ== X-Gm-Message-State: AOJu0YwSvj8MpN0oXV2eZj/83j2xBDtRSYkVkVk4EERxKSldCN8cE2v7 H/goBLHFTb3OriJ3xRBwWjL2 X-Google-Smtp-Source: AGHT+IGJSgmwbzgIhCd8uh++SUUn7/yvo/9rEGYloj2mFXAk1EyoITkkg4vZPxQ/SpAuZa9TVAjpdg== X-Received: by 2002:ac2:4205:0:b0:509:4d7a:ab05 with SMTP id y5-20020ac24205000000b005094d7aab05mr3138624lfh.11.1699017019166; Fri, 03 Nov 2023 06:10:19 -0700 (PDT) Received: from ukaszb-l.wifi.semihalf.net ([83.142.187.85]) by smtp.gmail.com with ESMTPSA id f21-20020ac25335000000b00507a69a4799sm216336lfh.270.2023.11.03.06.10.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 06:10:18 -0700 (PDT) From: =?UTF-8?q?=C5=81ukasz=20Bartosik?= To: Jason Baron , Jim Cromie , Andrew Morton , Kees Cook , Douglas Anderson Cc: Guenter Roeck , Yaniv Tzoreff , Benson Leung , Steven Rostedt , Vincent Whitchurch , Pekka Paalanen , Sean Paul , Daniel Vetter , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v1 04/12] dyndbg: add 2 trace-events: pr_debug, dev_dbg Date: Fri, 3 Nov 2023 14:10:03 +0100 Message-Id: <20231103131011.1316396-5-lb@semihalf.com> X-Mailer: git-send-email 2.38.3 In-Reply-To: <20231103131011.1316396-1-lb@semihalf.com> References: <20231103131011.1316396-1-lb@semihalf.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Jim Cromie ddebug_trace() currently issues a single printk:console event. Replace that event by adding include/trace/events/dyndbg.h, which defines 2 new trace-events: dyndbg:prdbg & dyndbg:devdbg. These events get the _ddebug descriptor, so they can access the whole callsite record: file, line, function, flags. This allows the addition of a dynamic prefix later. So ddebug_trace() gets 2 new args: the descriptor and the device. And its callers: ddebug_printk(), ddebug_dev_printk() upgrade their flags param to pass the descriptor itself, and thus also the flags. Signed-off-by: Jim Cromie --- MAINTAINERS | 1 + include/trace/events/dyndbg.h | 74 +++++++++++++++++++++++++++++++++++ lib/dynamic_debug.c | 73 +++++++++++++++++----------------- 3 files changed, 112 insertions(+), 36 deletions(-) create mode 100644 include/trace/events/dyndbg.h diff --git a/MAINTAINERS b/MAINTAINERS index dd5de540ec0b..fd02dc86f1fd 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -7320,6 +7320,7 @@ M: Jason Baron M: Jim Cromie S: Maintained F: include/linux/dynamic_debug.h +F: include/trace/events/dyndbg.h F: lib/dynamic_debug.c F: lib/test_dynamic_debug.c =20 diff --git a/include/trace/events/dyndbg.h b/include/trace/events/dyndbg.h new file mode 100644 index 000000000000..ccc5bcb070f9 --- /dev/null +++ b/include/trace/events/dyndbg.h @@ -0,0 +1,74 @@ +/* SPDX-License-Identifier: GPL-2.0 */ +#undef TRACE_SYSTEM +#define TRACE_SYSTEM dyndbg + +#if !defined(_TRACE_DYNDBG_H) || defined(TRACE_HEADER_MULTI_READ) +#define _TRACE_DYNDBG_H + +#include + +/* capture pr_debug() callsite descriptor and message */ +TRACE_EVENT(prdbg, + TP_PROTO(const struct _ddebug *desc, const char *text, size_t len), + + TP_ARGS(desc, text, len), + + TP_STRUCT__entry( + __field(const struct _ddebug *, desc) + __dynamic_array(char, msg, len + 1) + ), + + TP_fast_assign( + __entry->desc =3D desc; + /* + * Each trace entry is printed in a new line. + * If the msg finishes with '\n', cut it off + * to avoid blank lines in the trace. + */ + if (len > 0 && (text[len - 1] =3D=3D '\n')) + len -=3D 1; + + memcpy(__get_str(msg), text, len); + __get_str(msg)[len] =3D 0; + ), + + TP_printk("%s.%s %s", __entry->desc->modname, + __entry->desc->function, __get_str(msg)) +); + +/* capture dev_dbg() callsite descriptor, device, and message */ +TRACE_EVENT(devdbg, + TP_PROTO(const struct _ddebug *desc, const struct device *dev, + const char *text, size_t len), + + TP_ARGS(desc, dev, text, len), + + TP_STRUCT__entry( + __field(const struct _ddebug *, desc) + __field(const struct device *, dev) + __dynamic_array(char, msg, len + 1) + ), + + TP_fast_assign( + __entry->desc =3D desc; + __entry->dev =3D (struct device *) dev; + /* + * Each trace entry is printed in a new line. + * If the msg finishes with '\n', cut it off + * to avoid blank lines in the trace. + */ + if (len > 0 && (text[len - 1] =3D=3D '\n')) + len -=3D 1; + + memcpy(__get_str(msg), text, len); + __get_str(msg)[len] =3D 0; + ), + + TP_printk("%s.%s %s", __entry->desc->modname, + __entry->desc->function, __get_str(msg)) +); + +#endif /* _TRACE_DYNDBG_H */ + +/* This part must be outside protection */ +#include diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 016f33c20251..1ed3c4f16f69 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -36,7 +36,9 @@ #include #include #include -#include + +#define CREATE_TRACE_POINTS +#include =20 #include =20 @@ -878,7 +880,9 @@ struct ddebug_trace_bufs { static DEFINE_PER_CPU(struct ddebug_trace_bufs, ddebug_trace_bufs); static DEFINE_PER_CPU(int, ddebug_trace_reserve); =20 -static void ddebug_trace(const char *fmt, va_list args) +__printf(3, 0) +static void ddebug_trace(struct _ddebug *desc, const struct device *dev, + const char *fmt, va_list args) { struct ddebug_trace_buf *buf; int bufidx; @@ -897,7 +901,11 @@ static void ddebug_trace(const char *fmt, va_list args) buf =3D this_cpu_ptr(ddebug_trace_bufs.bufs) + bufidx; =20 len =3D vscnprintf(buf->buf, sizeof(buf->buf), fmt, args); - trace_console(buf->buf, len); + + if (!dev) + trace_prdbg(desc, buf->buf, len); + else + trace_devdbg(desc, dev, buf->buf, len); =20 out: /* As above. */ @@ -907,9 +915,9 @@ static void ddebug_trace(const char *fmt, va_list args) } =20 __printf(2, 3) -static void ddebug_printk(unsigned int flags, const char *fmt, ...) +static void ddebug_printk(struct _ddebug *desc, const char *fmt, ...) { - if (flags & _DPRINTK_FLAGS_TRACE) { + if (desc->flags & _DPRINTK_FLAGS_TRACE) { va_list args; =20 va_start(args, fmt); @@ -917,11 +925,11 @@ static void ddebug_printk(unsigned int flags, const c= har *fmt, ...) * All callers include the KERN_DEBUG prefix to keep the * vprintk case simple; strip it out for tracing. */ - ddebug_trace(fmt + strlen(KERN_DEBUG), args); + ddebug_trace(desc, NULL, fmt + strlen(KERN_DEBUG), args); va_end(args); } =20 - if (flags & _DPRINTK_FLAGS_PRINTK) { + if (desc->flags & _DPRINTK_FLAGS_PRINTK) { va_list args; =20 va_start(args, fmt); @@ -931,19 +939,19 @@ static void ddebug_printk(unsigned int flags, const c= har *fmt, ...) } =20 __printf(3, 4) -static void ddebug_dev_printk(unsigned int flags, const struct device *dev, +static void ddebug_dev_printk(struct _ddebug *desc, const struct device *d= ev, const char *fmt, ...) { =20 - if (flags & _DPRINTK_FLAGS_TRACE) { + if (desc->flags & _DPRINTK_FLAGS_TRACE) { va_list args; =20 va_start(args, fmt); - ddebug_trace(fmt, args); + ddebug_trace(desc, dev, fmt, args); va_end(args); } =20 - if (flags & _DPRINTK_FLAGS_PRINTK) { + if (desc->flags & _DPRINTK_FLAGS_PRINTK) { va_list args; =20 va_start(args, fmt); @@ -966,7 +974,7 @@ void __dynamic_pr_debug(struct _ddebug *descriptor, con= st char *fmt, ...) vaf.fmt =3D fmt; vaf.va =3D &args; =20 - ddebug_printk(descriptor->flags, KERN_DEBUG "%s%pV", + ddebug_printk(descriptor, KERN_DEBUG "%s%pV", dynamic_emit_prefix(descriptor, buf), &vaf); =20 va_end(args); @@ -977,7 +985,6 @@ void __dynamic_dev_dbg(struct _ddebug *descriptor, const struct device *dev, const char *fmt, ...) { struct va_format vaf; - unsigned int flags; va_list args; =20 BUG_ON(!descriptor); @@ -987,15 +994,14 @@ void __dynamic_dev_dbg(struct _ddebug *descriptor, =20 vaf.fmt =3D fmt; vaf.va =3D &args; - flags =3D descriptor->flags; =20 if (!dev) { - ddebug_printk(flags, KERN_DEBUG "(NULL device *): %pV", - &vaf); + ddebug_printk(descriptor, KERN_DEBUG "(NULL device *): %pV", + &vaf); } else { char buf[PREFIX_SIZE] =3D ""; =20 - ddebug_dev_printk(flags, dev, "%s%s %s: %pV", + ddebug_dev_printk(descriptor, dev, "%s%s %s: %pV", dynamic_emit_prefix(descriptor, buf), dev_driver_string(dev), dev_name(dev), &vaf); @@ -1011,7 +1017,6 @@ void __dynamic_netdev_dbg(struct _ddebug *descriptor, const struct net_device *dev, const char *fmt, ...) { struct va_format vaf; - unsigned int flags; va_list args; =20 BUG_ON(!descriptor); @@ -1021,24 +1026,22 @@ void __dynamic_netdev_dbg(struct _ddebug *descripto= r, =20 vaf.fmt =3D fmt; vaf.va =3D &args; - flags =3D descriptor->flags; =20 if (dev && dev->dev.parent) { char buf[PREFIX_SIZE] =3D ""; =20 - ddebug_dev_printk(flags, dev->dev.parent, - "%s%s %s %s%s: %pV", - dynamic_emit_prefix(descriptor, buf), - dev_driver_string(dev->dev.parent), - dev_name(dev->dev.parent), - netdev_name(dev), netdev_reg_state(dev), - &vaf); + ddebug_dev_printk(descriptor, dev->dev.parent, + "%s%s %s %s%s: %pV", + dynamic_emit_prefix(descriptor, buf), + dev_driver_string(dev->dev.parent), + dev_name(dev->dev.parent), + netdev_name(dev), netdev_reg_state(dev), + &vaf); } else if (dev) { - ddebug_printk(flags, KERN_DEBUG "%s%s: %pV", - netdev_name(dev), netdev_reg_state(dev), &vaf); + ddebug_dev_printk(descriptor, &dev->dev, KERN_DEBUG "%s%s: %pV", + netdev_name(dev), netdev_reg_state(dev), &vaf); } else { - ddebug_printk(flags, KERN_DEBUG "(NULL net_device): %pV", - &vaf); + ddebug_printk(descriptor, KERN_DEBUG "(NULL net_device): %pV", &vaf); } =20 va_end(args); @@ -1054,18 +1057,16 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor, { struct va_format vaf; va_list args; - unsigned int flags; =20 va_start(args, fmt); =20 vaf.fmt =3D fmt; vaf.va =3D &args; - flags =3D descriptor->flags; =20 if (ibdev && ibdev->dev.parent) { char buf[PREFIX_SIZE] =3D ""; =20 - ddebug_dev_printk(flags, ibdev->dev.parent, + ddebug_dev_printk(descriptor, ibdev->dev.parent, "%s%s %s %s: %pV", dynamic_emit_prefix(descriptor, buf), dev_driver_string(ibdev->dev.parent), @@ -1073,10 +1074,10 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor, dev_name(&ibdev->dev), &vaf); } else if (ibdev) { - ddebug_printk(flags, KERN_DEBUG "%s: %pV", - dev_name(&ibdev->dev), &vaf); + ddebug_dev_printk(descriptor, &ibdev->dev, KERN_DEBUG "%s: %pV", + dev_name(&ibdev->dev), &vaf); } else { - ddebug_printk(flags, KERN_DEBUG "(NULL ip_device): %pV", &vaf); + ddebug_printk(descriptor, KERN_DEBUG "(NULL ip_device): %pV", &vaf); } =20 va_end(args); --=20 2.42.0.869.gea05f2083d-goog From nobody Wed Dec 31 11:06:44 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 840F3C4332F for ; Fri, 3 Nov 2023 13:10:39 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377626AbjKCNKj (ORCPT ); Fri, 3 Nov 2023 09:10:39 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48784 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233073AbjKCNKb (ORCPT ); Fri, 3 Nov 2023 09:10:31 -0400 Received: from mail-lf1-x136.google.com (mail-lf1-x136.google.com [IPv6:2a00:1450:4864:20::136]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1411DD44 for ; Fri, 3 Nov 2023 06:10:21 -0700 (PDT) Received: by mail-lf1-x136.google.com with SMTP id 2adb3069b0e04-507975d34e8so2868423e87.1 for ; Fri, 03 Nov 2023 06:10:21 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1699017020; x=1699621820; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=A1hLBvLmxlsarhNkg045kA4R/S40xhthmR4CQ92gt1U=; b=CPN9tCW4kuzleWO+1i/XGz6m3ZDLioOgoh5kBOy5gn+ZsHsJy1MJJ+wMbQTvSOQ4eK iAg6BUUZiaWCk4XjLw85XFsj/B+0x3Xo9iu4UCmQ3JHelmj82gO4sWdB0TWvXLKOrErA rry3r0+EQt0WOemNeNTpA16GEfds1OJ4Gt9+yrQgFBG6bbTLD12IegL0hHg7qGnfoGfw 2klSsHXIYI2ooqXU8plIgBrQG8+9ij9lwE4BcHbGu1c9pTzQgRpWYdRPceFUEKCQ9lx8 YGCpFiGbUKAIJzFkc8jD+gMb4wEW+6j544BfEBF1JIsY3GmEDe042Pv7LmPT5jxTP7fh Cp9g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699017020; x=1699621820; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=A1hLBvLmxlsarhNkg045kA4R/S40xhthmR4CQ92gt1U=; b=xLuhBaEG9zNHepPyeJS8Ier/UekVtf6R7Eg+gwvalApD6WFNewFH7aLasFtabhG1ie f+MHCmbcb3bjkoZnDMlhf4dWlm6BlXIV4HTuMRbz9NGrkSAu5yf6p050aPp3Fa2x1vJ8 X9CJ9+DD5RhRirHJLLn4irMZVs5zfMDLv2tLWgE+3mIyPX/peCZOpQMYlXTiISGgEvvT ba/gdEU8fc9HXWf4VceNpuFxgDhL3LB1LiJfKWUjn6fT9/tPYb2X+GcASzPKlDznwmI0 2I1VBDsOZEDzblOKCkcQdafQ2IhFn6Stgxl+2th0AP5Y6HnaZfSvA7nC9SWHs/d2Y0fy iFKg== X-Gm-Message-State: AOJu0Yxeotjo4gH71GmF/64YiaUtFJjI0WScA68hlsFwPpguQwL2aPWb uKiSznVBQvwDq8UTytf6KhGg X-Google-Smtp-Source: AGHT+IH2scTAuhVH9MtIF0BPPwbGKKY1k6lgQKh/oeZwWn+jlMZchiS8DO/dkPDeYMOxKQpDa/SF4Q== X-Received: by 2002:a05:6512:10d6:b0:4fb:9168:1fce with SMTP id k22-20020a05651210d600b004fb91681fcemr20368234lfg.59.1699017020190; Fri, 03 Nov 2023 06:10:20 -0700 (PDT) Received: from ukaszb-l.wifi.semihalf.net ([83.142.187.85]) by smtp.gmail.com with ESMTPSA id f21-20020ac25335000000b00507a69a4799sm216336lfh.270.2023.11.03.06.10.19 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 06:10:19 -0700 (PDT) From: =?UTF-8?q?=C5=81ukasz=20Bartosik?= To: Jason Baron , Jim Cromie , Andrew Morton , Kees Cook , Douglas Anderson Cc: Guenter Roeck , Yaniv Tzoreff , Benson Leung , Steven Rostedt , Vincent Whitchurch , Pekka Paalanen , Sean Paul , Daniel Vetter , linux-kernel@vger.kernel.org, upstream@semihalf.com, pmladek@suse.com, sergey.senozhatsky@gmail.com, john.ogness@linutronix.de, Simon Ser Subject: [PATCH v1 05/12] tracefs: add TP_printk_no_nl - RFC Date: Fri, 3 Nov 2023 14:10:04 +0100 Message-Id: <20231103131011.1316396-6-lb@semihalf.com> X-Mailer: git-send-email 2.38.3 In-Reply-To: <20231103131011.1316396-1-lb@semihalf.com> References: <20231103131011.1316396-1-lb@semihalf.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Jim Cromie This variant of TP_printk() does *not* add the trailing newline. It is for use by printk/debug-ish events which already have a trailing newline. Its here to support: https://lore.kernel.org/lkml/ 20200825153338.17061-1-vincent.whitchurch@axis.com/ which taught dyndbg to send pr_debug() msgs to tracefs, via -x/T flag. It "reused" the include/trace/events/printk.h console event, which does the following: TP_fast_assign( /* * Each trace entry is printed in a new line. * If the msg finishes with '\n', cut it off * to avoid blank lines in the trace. */ if ((len > 0) && (text[len-1] =3D=3D '\n')) len -=3D 1; memcpy(__get_str(msg), text, len); __get_str(msg)[len] =3D 0; ), That trim work could be avoided, *iff* all pr_debug() callers are known to have no '\n' to strip. While thats not true for *all* callsites, it is 99+% true for DRM.debug callsites, and can be made true for some subsets of prdbg/dyndbg callsites. WANTED: macros to validate that a literal format-str has or doesn't have a trailing newline, or to provide or trim trailing newline(s?). Should be usable in TP_printk* defns, for use in new event defns. Cc: Cc: Vincent Whitchurch Cc: Cc: Cc: Cc: Cc: Simon Ser Cc: Sean Paul Signed-off-by: Jim Cromie --- include/trace/stages/stage3_trace_output.h | 3 +++ include/trace/stages/stage7_class_define.h | 3 +++ 2 files changed, 6 insertions(+) diff --git a/include/trace/stages/stage3_trace_output.h b/include/trace/sta= ges/stage3_trace_output.h index c1fb1355d309..5f5c1374fa10 100644 --- a/include/trace/stages/stage3_trace_output.h +++ b/include/trace/stages/stage3_trace_output.h @@ -8,6 +8,9 @@ #undef TP_printk #define TP_printk(fmt, args...) fmt "\n", args =20 +#undef TP_printk_no_nl +#define TP_printk_no_nl(fmt, args...) fmt, args + #undef __get_dynamic_array #define __get_dynamic_array(field) \ ((void *)__entry + (__entry->__data_loc_##field & 0xffff)) diff --git a/include/trace/stages/stage7_class_define.h b/include/trace/sta= ges/stage7_class_define.h index bcb960d16fc0..8247e4478f19 100644 --- a/include/trace/stages/stage7_class_define.h +++ b/include/trace/stages/stage7_class_define.h @@ -37,3 +37,6 @@ =20 #undef TP_printk #define TP_printk(fmt, args...) "\"" fmt "\", " __stringify(args) + +#undef TP_printk_no_nl +#define TP_printk_no_nl(fmt, args...) "\"" fmt "\", " __stringify(args) --=20 2.42.0.869.gea05f2083d-goog From nobody Wed Dec 31 11:06:44 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id B3E2CC4167B for ; Fri, 3 Nov 2023 13:10:42 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377210AbjKCNKm (ORCPT ); Fri, 3 Nov 2023 09:10:42 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48780 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233088AbjKCNKb (ORCPT ); Fri, 3 Nov 2023 09:10:31 -0400 Received: from mail-lf1-x129.google.com (mail-lf1-x129.google.com [IPv6:2a00:1450:4864:20::129]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id C61B483 for ; Fri, 3 Nov 2023 06:10:22 -0700 (PDT) Received: by mail-lf1-x129.google.com with SMTP id 2adb3069b0e04-50943ccbbaeso2858580e87.2 for ; Fri, 03 Nov 2023 06:10:22 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1699017021; x=1699621821; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=362uKh5thKodTsSqUkKccYKgkHYaZgwTi2ojZA+0hQQ=; b=pOdj9leRX+4Y4ZCb1PCbBEcNhqrce4XUb9lrYfHGNG1e5ATcokTjf82QqN8f6Mq/f8 xB8S6MX4RvvGCqkL3DfeyBA2j8DjdPJXM7PC7CRzV/3fCdE0eIzC2ZfRluh5TdaFfZ3K CLXeR/BniTpls+Pkpcj45zV/qjfkPulTW9RaAuXh9qS6tL8wtnAuOPEkC6Qo2ZZT6UWx 5erm87jIHN17OHlJ1IbUJMx5cs0w1x/jHtYYNT4ItZ0HSEvcdXs4hl84O58moHluO3lK H0bVi70TlW3YmR/QnWBiVYMeYM70BS1QEnO1GniXAyvB4FocUQaKIuo32KfcSD5sgn8g yJBA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699017021; x=1699621821; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=362uKh5thKodTsSqUkKccYKgkHYaZgwTi2ojZA+0hQQ=; b=BLFEEind69VFje7ZVqP1QfZt0njj9x13d869SWEP/MkBw2520JpDfvir3SKqyAHuWr x1/+vBGZpUD8UYSEohl5+t5A0yZABjLBZMA4PA0IYs+VHrG6MSXHzi2NzTPPQXIA/+hJ zVWk5BmhsYJKXU8vDZ3iyF51TXeVJ7qaQVa3b5oUMCfsLzQMCMa3/92N4vu1tdo0ePUJ IFlrwFW7zQj98yJaSCe6+oO9q7HvFSHgqS3Vd1dLU7x9Cvk6+6TcwnKgdsS68ffLPDXY NGWJFuQM8MC1rtIXtoh0DXAz64kTooaJnCFPDkjUkg+L/uRJffRlcJGqZSh/GDIb1lU3 CZNw== X-Gm-Message-State: AOJu0YyH1jKQM2dAAt20kPJHSQjwaOJ6CrJeKIDP09SLZHDhpP6Hgp0+ pYUnpyfMn32sNxLDcciE6+nFESZINV2N4KtA5sJz X-Google-Smtp-Source: AGHT+IFT066k55t3iRFJhgHYAe3uu9kJzeoLRIL6+WxQNbNGd5ibZlkro5xxwEKreXLWfkhmTRa2OQ== X-Received: by 2002:a05:6512:3e12:b0:509:488b:4de4 with SMTP id i18-20020a0565123e1200b00509488b4de4mr5540331lfv.1.1699017021108; Fri, 03 Nov 2023 06:10:21 -0700 (PDT) Received: from ukaszb-l.wifi.semihalf.net ([83.142.187.85]) by smtp.gmail.com with ESMTPSA id f21-20020ac25335000000b00507a69a4799sm216336lfh.270.2023.11.03.06.10.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 06:10:20 -0700 (PDT) From: =?UTF-8?q?=C5=81ukasz=20Bartosik?= To: Jason Baron , Jim Cromie , Andrew Morton , Kees Cook , Douglas Anderson Cc: Guenter Roeck , Yaniv Tzoreff , Benson Leung , Steven Rostedt , Vincent Whitchurch , Pekka Paalanen , Sean Paul , Daniel Vetter , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v1 06/12] trace: use TP_printk_no_nl in dyndbg:prdbg,devdbg Date: Fri, 3 Nov 2023 14:10:05 +0100 Message-Id: <20231103131011.1316396-7-lb@semihalf.com> X-Mailer: git-send-email 2.38.3 In-Reply-To: <20231103131011.1316396-1-lb@semihalf.com> References: <20231103131011.1316396-1-lb@semihalf.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Jim Cromie Recently added dyndbg events: prdbg, devdbg have code to strip the trailing newline, if its there. Drop that trimming (minimally), and use the new TP_printk_no_nl macro instead. Also converting to a vstring is deferred for now. This use is slightly premature/overkill, since some pr_debugs do not have the expected trailing newline. While those lacks are arguably bugs, this doesn't fix them. Signed-off-by: Jim Cromie --- include/trace/events/dyndbg.h | 24 ++---------------------- 1 file changed, 2 insertions(+), 22 deletions(-) diff --git a/include/trace/events/dyndbg.h b/include/trace/events/dyndbg.h index ccc5bcb070f9..91dcdbe059c0 100644 --- a/include/trace/events/dyndbg.h +++ b/include/trace/events/dyndbg.h @@ -20,20 +20,10 @@ TRACE_EVENT(prdbg, =20 TP_fast_assign( __entry->desc =3D desc; - /* - * Each trace entry is printed in a new line. - * If the msg finishes with '\n', cut it off - * to avoid blank lines in the trace. - */ - if (len > 0 && (text[len - 1] =3D=3D '\n')) - len -=3D 1; - memcpy(__get_str(msg), text, len); - __get_str(msg)[len] =3D 0; ), =20 - TP_printk("%s.%s %s", __entry->desc->modname, - __entry->desc->function, __get_str(msg)) + TP_printk_no_nl("%s", __get_str(msg)) ); =20 /* capture dev_dbg() callsite descriptor, device, and message */ @@ -52,20 +42,10 @@ TRACE_EVENT(devdbg, TP_fast_assign( __entry->desc =3D desc; __entry->dev =3D (struct device *) dev; - /* - * Each trace entry is printed in a new line. - * If the msg finishes with '\n', cut it off - * to avoid blank lines in the trace. - */ - if (len > 0 && (text[len - 1] =3D=3D '\n')) - len -=3D 1; - memcpy(__get_str(msg), text, len); - __get_str(msg)[len] =3D 0; ), =20 - TP_printk("%s.%s %s", __entry->desc->modname, - __entry->desc->function, __get_str(msg)) + TP_printk_no_nl("%s", __get_str(msg)) ); =20 #endif /* _TRACE_DYNDBG_H */ --=20 2.42.0.869.gea05f2083d-goog From nobody Wed Dec 31 11:06:44 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id E4895C4167D for ; Fri, 3 Nov 2023 13:10:57 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377671AbjKCNK6 (ORCPT ); Fri, 3 Nov 2023 09:10:58 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48792 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233264AbjKCNKb (ORCPT ); Fri, 3 Nov 2023 09:10:31 -0400 Received: from mail-lf1-x12b.google.com (mail-lf1-x12b.google.com [IPv6:2a00:1450:4864:20::12b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 61596111 for ; Fri, 3 Nov 2023 06:10:24 -0700 (PDT) Received: by mail-lf1-x12b.google.com with SMTP id 2adb3069b0e04-507bd19eac8so2575376e87.0 for ; Fri, 03 Nov 2023 06:10:24 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1699017022; x=1699621822; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=wc5ZJr+XZL17m3pVsUYEvFhpTqfft7OhKC8WZHCW6XE=; b=RmwMeWxBocntJ4o8D4jsOmlsc464F2oBSCW/PHzreT0wdvWku1WmxNbt+5BcSvkNI0 fYuzQhXi7qeLZQW46f+nM6HW/AOZDnFKjqtDrCvCJ8vktNOpHwU1L9Xvh9itEL8JUd7g As60TGBCJ/c7IWKHISJp1hUvkcBtks+k2K0XR0tahqD5AxcgvXbwWduHKcHsNGZ+hoI+ QvFUFGBrISrONI8QHClaWwK2H7S4mfXyEUNAGj6Ea/OmWMTgjdv1ddGh5fj43raBYcZB GB/rb+VDtb75O4vVzB+CsAXd1EHIUwWRg5+efEOE+50t6FivN0yGtSU1R17pLpCuoxTm U+uA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699017022; x=1699621822; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=wc5ZJr+XZL17m3pVsUYEvFhpTqfft7OhKC8WZHCW6XE=; b=KwPxsRS1IlEth/zfrVS0myPF3cndsCnayhxaiuXxjP9WjBrvQEWCiJ7dAx/Mvk7xZU pa2+EMGb8f5mqHjlzL6MzQTTQktAFuCwQdk6bMJtwfjlxmObLyAAytxcqilqEAh3EW/c 8m8DbZhSx6UReolEhotH98IjUjMLB0MCWLAJboOMvJVnvHPmq7KL/svsZnXzAw+X8j1G o4rOEJbys7j9vwYwWiOG4GVVY6YbHrtFjh/k0eGXwasmOx0tIs7vss3S7Of4/WkAvmOO kT8K3bltSfRCCpcNEzDve2N/tYI5UV6UrYYotlerID+rUnu9c6PYjmZBWYb9Stj46PXT dLgw== X-Gm-Message-State: AOJu0YyY/0NxCbEenw4JyuhDK42FYy1nJs0vYDGCO8XD7NGruvALsw3p +2J7Nh6BEyGNDwhqih+nL/orepsYZJq6OyFw+QiF X-Google-Smtp-Source: AGHT+IElnpyQy29sPvTzg8mqakBpuZJ6Jr+S6YEN7aqgmQ+8cZ56ylKgHtdPCshxX8I//qWTsUBBoQ== X-Received: by 2002:ac2:446e:0:b0:4fe:2f8a:457e with SMTP id y14-20020ac2446e000000b004fe2f8a457emr16338981lfl.43.1699017022670; Fri, 03 Nov 2023 06:10:22 -0700 (PDT) Received: from ukaszb-l.wifi.semihalf.net ([83.142.187.85]) by smtp.gmail.com with ESMTPSA id f21-20020ac25335000000b00507a69a4799sm216336lfh.270.2023.11.03.06.10.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 06:10:21 -0700 (PDT) From: =?UTF-8?q?=C5=81ukasz=20Bartosik?= To: Jason Baron , Jim Cromie , Andrew Morton , Kees Cook , Douglas Anderson Cc: Guenter Roeck , Yaniv Tzoreff , Benson Leung , Steven Rostedt , Vincent Whitchurch , Pekka Paalanen , Sean Paul , Daniel Vetter , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v1 07/12] dyndbg: repack struct _ddebug Date: Fri, 3 Nov 2023 14:10:06 +0100 Message-Id: <20231103131011.1316396-8-lb@semihalf.com> X-Mailer: git-send-email 2.38.3 In-Reply-To: <20231103131011.1316396-1-lb@semihalf.com> References: <20231103131011.1316396-1-lb@semihalf.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" From: Jim Cromie Move the JUMP_LABEL to the top of the struct, since theyre both align(8) and this closes a pahole (unfortunately trading for padding, but still). Signed-off-by: Jim Cromie --- include/linux/dynamic_debug.h | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index 497130816e9c..b9237e4ecd1b 100644 --- a/include/linux/dynamic_debug.h +++ b/include/linux/dynamic_debug.h @@ -14,6 +14,12 @@ * the special section is treated as an array of these. */ struct _ddebug { +#ifdef CONFIG_JUMP_LABEL + union { + struct static_key_true dd_key_true; + struct static_key_false dd_key_false; + } key; +#endif /* * These fields are used to drive the user interface * for selecting and displaying debug callsites. @@ -53,12 +59,6 @@ struct _ddebug { #define _DPRINTK_FLAGS_DEFAULT 0 #endif unsigned int flags:8; -#ifdef CONFIG_JUMP_LABEL - union { - struct static_key_true dd_key_true; - struct static_key_false dd_key_false; - } key; -#endif } __attribute__((aligned(8))); =20 enum class_map_type { --=20 2.42.0.869.gea05f2083d-goog From nobody Wed Dec 31 11:06:44 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id C854BC4332F for ; Fri, 3 Nov 2023 13:11:00 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377645AbjKCNLA (ORCPT ); Fri, 3 Nov 2023 09:11:00 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48798 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233366AbjKCNKb (ORCPT ); Fri, 3 Nov 2023 09:10:31 -0400 Received: from mail-lf1-x129.google.com (mail-lf1-x129.google.com [IPv6:2a00:1450:4864:20::129]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 6D907D4C for ; Fri, 3 Nov 2023 06:10:25 -0700 (PDT) Received: by mail-lf1-x129.google.com with SMTP id 2adb3069b0e04-507f1c29f25so2508173e87.1 for ; Fri, 03 Nov 2023 06:10:25 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1699017024; x=1699621824; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=1mQYTJ70pc6Q6adrELeKdGI1nIru5AIIoaJ2DUP8/rw=; b=Y8Ba87jy1RPOumI0C3IgX8syk7NAFRsXnn2wEIcUhnio8tiz4Kd5BJT4mA829Hpstb ci1qCJDBQ/J6sTskJCdmbV3Gun9HR1D9eEbc8TCYrQpPjw1X1sITRt5oGK3afNuyda3c uUHTtjkSqJqW6iPWypkao6pbR9RH2crefiBmaHmC84j1VfO/0TcrQj3RNKxBS7ZXp1Cs Y36y6gfB4joySMhq3ZE8RQFvkO4IrYwet2Uv2jsp4orcm6CT3fxAHCWlA6TT1VGo9wq1 T8EU2bpgSqIM6R1F4AZ6lOL324Hr0InLPe84sbLsAIK0CII45C/IIJdTTPISsrqFlMSv gDMA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699017024; x=1699621824; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=1mQYTJ70pc6Q6adrELeKdGI1nIru5AIIoaJ2DUP8/rw=; b=SghHmQiv8dIHkOid9Sm7/gYR2kupSePdSq099U5986gFG7XUOL9EWci1cgDRqj/ycN 8Rr5Zcwx94lXYfEZ0A6NyZjyzW9D0XvAwLLYDzKQm860O4rERvI0Roe5Q5we8NhajGbL dDsSiIsGzY8kATGjEXWPpAaBNXjDU4774ZnP7n9VcQtA98TMgPKwJTCb06bY8KC+6rV8 5NxFWpkTdD3ShguuRrH1VnkE+eNMKK7x+QVlP41jAqVwfj+3pPBSan8BZi8dOt0rPmxx xSpt31KSR0t2jO7rCNZcacTARCwSU1+BrOLh0htjHHr/iIzdccMlqdiL9+XShUldIZFx M2UQ== X-Gm-Message-State: AOJu0Yw8U6Gvqdbp6Igfjts0buZzyXZ+9V7k1S3EtcRxxuR4utyrMclD 1IDjXqMt2R6NDmNNpo8Cm90q X-Google-Smtp-Source: AGHT+IHQDh4Eeno3q8Ts2UslN99Nr/9Ts/QOWOUUQ1UycyMmk3BM9ArqlMmDqc1ljiLOwKTpr8MYhA== X-Received: by 2002:a05:6512:1093:b0:503:1bb0:a658 with SMTP id j19-20020a056512109300b005031bb0a658mr21570248lfg.32.1699017023780; Fri, 03 Nov 2023 06:10:23 -0700 (PDT) Received: from ukaszb-l.wifi.semihalf.net ([83.142.187.85]) by smtp.gmail.com with ESMTPSA id f21-20020ac25335000000b00507a69a4799sm216336lfh.270.2023.11.03.06.10.22 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 06:10:23 -0700 (PDT) From: =?UTF-8?q?=C5=81ukasz=20Bartosik?= To: Jason Baron , Jim Cromie , Andrew Morton , Kees Cook , Douglas Anderson Cc: Guenter Roeck , Yaniv Tzoreff , Benson Leung , Steven Rostedt , Vincent Whitchurch , Pekka Paalanen , Sean Paul , Daniel Vetter , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v1 08/12] dyndbg: move flags field to a new structure Date: Fri, 3 Nov 2023 14:10:07 +0100 Message-Id: <20231103131011.1316396-9-lb@semihalf.com> X-Mailer: git-send-email 2.38.3 In-Reply-To: <20231103131011.1316396-1-lb@semihalf.com> References: <20231103131011.1316396-1-lb@semihalf.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add a new structure ctrl and place it in 4 padding bytes of _ddebug struct. Move flags field to the ctrl struct and create setter and getter for the flags field. Add unused fields to explicitly emphasise size of each bitfield. This step prepares for addition of a trace_dst field. Layout of _ddebug struct after addition of ctrl is: struct _ddebug { union { struct static_key_true dd_key_true; /* 0 16 */ struct static_key_false dd_key_false; /* 0 16 */ } key; /* 0 16 */ union { struct static_key_true dd_key_true; /* 0 16 */ struct static_key_false dd_key_false; /* 0 16 */ }; const char * modname; /* 16 8 */ const char * function; /* 24 8 */ const char * filename; /* 32 8 */ const char * format; /* 40 8 */ unsigned int lineno:18; /* 48: 0 4 */ unsigned int class_id:6; /* 48:18 4 */ unsigned int unused:8; /* 48:24 4 */ struct dd_ctrl ctrl; /* 52 4 */ /* size: 56, cachelines: 1, members: 9 */ /* last cacheline: 56 bytes */ } __attribute__((__aligned__(8))); Signed-off-by: =C5=81ukasz Bartosik --- include/linux/dynamic_debug.h | 9 +++++-- lib/dynamic_debug.c | 44 ++++++++++++++++++++++------------- 2 files changed, 35 insertions(+), 18 deletions(-) diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index b9237e4ecd1b..684766289bfc 100644 --- a/include/linux/dynamic_debug.h +++ b/include/linux/dynamic_debug.h @@ -32,6 +32,8 @@ struct _ddebug { #define CLS_BITS 6 unsigned int class_id:CLS_BITS; #define _DPRINTK_CLASS_DFLT ((1 << CLS_BITS) - 1) + unsigned int unused:8; + /* * The flags field controls the behaviour at the callsite. * The bits here are changed dynamically when the user @@ -58,7 +60,10 @@ struct _ddebug { #else #define _DPRINTK_FLAGS_DEFAULT 0 #endif - unsigned int flags:8; + struct { + unsigned int flags:8; + unsigned unused:24; + } ctrl; } __attribute__((aligned(8))); =20 enum class_map_type { @@ -171,7 +176,7 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor, .filename =3D __FILE__, \ .format =3D (fmt), \ .lineno =3D __LINE__, \ - .flags =3D _DPRINTK_FLAGS_DEFAULT, \ + .ctrl =3D { .flags =3D _DPRINTK_FLAGS_DEFAULT }, \ .class_id =3D cls, \ _DPRINTK_KEY_INIT \ }; \ diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 1ed3c4f16f69..ca87adf327df 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -80,6 +80,16 @@ module_param(verbose, int, 0644); MODULE_PARM_DESC(verbose, " dynamic_debug/control processing " "( 0 =3D off (default), 1 =3D module add/rm, 2 =3D >control summary, 3 = =3D parsing, 4 =3D per-site changes)"); =20 +static inline unsigned int get_flags(const struct _ddebug *desc) +{ + return desc->ctrl.flags; +} + +static inline void set_flags(struct _ddebug *desc, unsigned int val) +{ + desc->ctrl.flags =3D val; +} + /* Return the path relative to source root */ static inline const char *trim_prefix(const char *path) { @@ -247,11 +257,11 @@ static int ddebug_change(const struct ddebug_query *q= uery, =20 nfound++; =20 - newflags =3D (dp->flags & modifiers->mask) | modifiers->flags; - if (newflags =3D=3D dp->flags) + newflags =3D (get_flags(dp) & modifiers->mask) | modifiers->flags; + if (newflags =3D=3D get_flags(dp)) continue; #ifdef CONFIG_JUMP_LABEL - if (dp->flags & _DPRINTK_FLAGS_ENABLED) { + if (get_flags(dp) & _DPRINTK_FLAGS_ENABLED) { if (!(newflags & _DPRINTK_FLAGS_ENABLED)) static_branch_disable(&dp->key.dd_key_true); } else if (newflags & _DPRINTK_FLAGS_ENABLED) { @@ -261,9 +271,9 @@ static int ddebug_change(const struct ddebug_query *que= ry, v4pr_info("changed %s:%d [%s]%s %s =3D> %s\n", trim_prefix(dp->filename), dp->lineno, dt->mod_name, dp->function, - ddebug_describe_flags(dp->flags, &fbuf), + ddebug_describe_flags(get_flags(dp), &fbuf), ddebug_describe_flags(newflags, &nbuf)); - dp->flags =3D newflags; + set_flags(dp, newflags); } } mutex_unlock(&ddebug_lock); @@ -824,10 +834,11 @@ static int remaining(int wrote) =20 static char *__dynamic_emit_prefix(const struct _ddebug *desc, char *buf) { + unsigned int flags =3D get_flags(desc); int pos_after_tid; int pos =3D 0; =20 - if (desc->flags & _DPRINTK_FLAGS_INCL_TID) { + if (flags & _DPRINTK_FLAGS_INCL_TID) { if (in_interrupt()) pos +=3D snprintf(buf + pos, remaining(pos), " "); else @@ -835,16 +846,16 @@ static char *__dynamic_emit_prefix(const struct _ddeb= ug *desc, char *buf) task_pid_vnr(current)); } pos_after_tid =3D pos; - if (desc->flags & _DPRINTK_FLAGS_INCL_MODNAME) + if (flags & _DPRINTK_FLAGS_INCL_MODNAME) pos +=3D snprintf(buf + pos, remaining(pos), "%s:", desc->modname); - if (desc->flags & _DPRINTK_FLAGS_INCL_FUNCNAME) + if (flags & _DPRINTK_FLAGS_INCL_FUNCNAME) pos +=3D snprintf(buf + pos, remaining(pos), "%s:", desc->function); - if (desc->flags & _DPRINTK_FLAGS_INCL_SOURCENAME) + if (flags & _DPRINTK_FLAGS_INCL_SOURCENAME) pos +=3D snprintf(buf + pos, remaining(pos), "%s:", trim_prefix(desc->filename)); - if (desc->flags & _DPRINTK_FLAGS_INCL_LINENO) + if (flags & _DPRINTK_FLAGS_INCL_LINENO) pos +=3D snprintf(buf + pos, remaining(pos), "%d:", desc->lineno); if (pos - pos_after_tid) @@ -857,7 +868,7 @@ static char *__dynamic_emit_prefix(const struct _ddebug= *desc, char *buf) =20 static inline char *dynamic_emit_prefix(struct _ddebug *desc, char *buf) { - if (unlikely(desc->flags & _DPRINTK_FLAGS_INCL_ANY)) + if (unlikely(get_flags(desc) & _DPRINTK_FLAGS_INCL_ANY)) return __dynamic_emit_prefix(desc, buf); return buf; } @@ -917,7 +928,8 @@ static void ddebug_trace(struct _ddebug *desc, const st= ruct device *dev, __printf(2, 3) static void ddebug_printk(struct _ddebug *desc, const char *fmt, ...) { - if (desc->flags & _DPRINTK_FLAGS_TRACE) { + + if (get_flags(desc) & _DPRINTK_FLAGS_TRACE) { va_list args; =20 va_start(args, fmt); @@ -929,7 +941,7 @@ static void ddebug_printk(struct _ddebug *desc, const c= har *fmt, ...) va_end(args); } =20 - if (desc->flags & _DPRINTK_FLAGS_PRINTK) { + if (get_flags(desc) & _DPRINTK_FLAGS_PRINTK) { va_list args; =20 va_start(args, fmt); @@ -943,7 +955,7 @@ static void ddebug_dev_printk(struct _ddebug *desc, con= st struct device *dev, const char *fmt, ...) { =20 - if (desc->flags & _DPRINTK_FLAGS_TRACE) { + if (get_flags(desc) & _DPRINTK_FLAGS_TRACE) { va_list args; =20 va_start(args, fmt); @@ -951,7 +963,7 @@ static void ddebug_dev_printk(struct _ddebug *desc, con= st struct device *dev, va_end(args); } =20 - if (desc->flags & _DPRINTK_FLAGS_PRINTK) { + if (get_flags(desc) & _DPRINTK_FLAGS_PRINTK) { va_list args; =20 va_start(args, fmt); @@ -1247,7 +1259,7 @@ static int ddebug_proc_show(struct seq_file *m, void = *p) seq_printf(m, "%s:%u [%s]%s =3D%s \"", trim_prefix(dp->filename), dp->lineno, iter->table->mod_name, dp->function, - ddebug_describe_flags(dp->flags, &flags)); + ddebug_describe_flags(get_flags(dp), &flags)); seq_escape_str(m, dp->format, ESCAPE_SPACE, "\t\r\n\""); seq_puts(m, "\""); =20 --=20 2.42.0.869.gea05f2083d-goog From nobody Wed Dec 31 11:06:44 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 380BFC4332F for ; Fri, 3 Nov 2023 13:10:52 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377658AbjKCNKv (ORCPT ); Fri, 3 Nov 2023 09:10:51 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48806 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233470AbjKCNKc (ORCPT ); Fri, 3 Nov 2023 09:10:32 -0400 Received: from mail-lf1-x12b.google.com (mail-lf1-x12b.google.com [IPv6:2a00:1450:4864:20::12b]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4EA0FD4D for ; Fri, 3 Nov 2023 06:10:26 -0700 (PDT) Received: by mail-lf1-x12b.google.com with SMTP id 2adb3069b0e04-507f1c29f25so2508194e87.1 for ; Fri, 03 Nov 2023 06:10:26 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1699017024; x=1699621824; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=eiFe3xfWVVRbB+dZemjysAJsSe+YWOJENxzGnSzBt3U=; b=UqjsreWOp46SPecv+RRcXLnXAAjAliU6huwoRB6jf+NLbf5a/HEilZ+xrAx+tni9/x BuLSDwKhTuMihmj/Zgm14sNqSOMAEJj0vjDuYr/wRg1OLLof+HcW15ctqsQsTZhjcM3c K2MFvrRt8kMzARRRXY6cpisgFt0CcHOGS3/oohyivjdLPvKUwjDENWUskh0WR5rcdxGN hcsmCQvfd12p15ty48O3MAdmB5dottuzh6hbGqGO+vXzNw3o7T9HXE+p4/ZmFIzjVx6v f9nzo+VSBOPs3zkcO9ifv518SFHIng2/tCHVZ/yJnSD5iRttcR8uCA4KRfkxFOXY2WV/ D0aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699017024; x=1699621824; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=eiFe3xfWVVRbB+dZemjysAJsSe+YWOJENxzGnSzBt3U=; b=t+FCbVr7CrFs1SCpExtv0QNwewN+kkIs6h79PFSnkp0EGYULfsTfG3VKxcmnqj4j9q 9LnmG7wkxSb+VqMGv2eQvUlbKOdUFc+UnePEVB6K0phAMbf2m0uC014RVnwnQmPEAFpg bUfcKnjJZtEn4FhWwPcpGQ0lIiDP1DS8ia8qOldu9IHh+nkqcXZBY6zYpds8mRLm3op6 oeE7Wkc550pFpLXwlwcq7NVz4Kmm4sg8qhkLYELd6hHv7BP6rh8MT2jKk79J0aXoX+Nj kUubltG0RMmckekjVsyh/FctD68PtPJI7JeR6fC1YrBwLHs1ZVpa977KNjMh1lQug2gM dEYA== X-Gm-Message-State: AOJu0Ywh95EgIWu/8u+oR6PKNW8FpXrTM5cJnkweDAXud7GVRZuJBsZh KSTKzRETWBJStIkD3CBEbEiz X-Google-Smtp-Source: AGHT+IG8n7Vv2U2ein1ag0/kCSjhyEj09gs4gS2sKD4MRICZ/8/OvGOHydfG7YcboaVTn/oUCuvr3Q== X-Received: by 2002:a05:6512:10c7:b0:509:1227:ca71 with SMTP id k7-20020a05651210c700b005091227ca71mr16819209lfg.17.1699017024656; Fri, 03 Nov 2023 06:10:24 -0700 (PDT) Received: from ukaszb-l.wifi.semihalf.net ([83.142.187.85]) by smtp.gmail.com with ESMTPSA id f21-20020ac25335000000b00507a69a4799sm216336lfh.270.2023.11.03.06.10.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 06:10:24 -0700 (PDT) From: =?UTF-8?q?=C5=81ukasz=20Bartosik?= To: Jason Baron , Jim Cromie , Andrew Morton , Kees Cook , Douglas Anderson Cc: Guenter Roeck , Yaniv Tzoreff , Benson Leung , Steven Rostedt , Vincent Whitchurch , Pekka Paalanen , Sean Paul , Daniel Vetter , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v1 09/12] dyndbg: add trace destination field to _ddebug Date: Fri, 3 Nov 2023 14:10:08 +0100 Message-Id: <20231103131011.1316396-10-lb@semihalf.com> X-Mailer: git-send-email 2.38.3 In-Reply-To: <20231103131011.1316396-1-lb@semihalf.com> References: <20231103131011.1316396-1-lb@semihalf.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add trace destination field (trace_dst) to the _ddebug structure. The trace destination field is used to determine output of debug logs when +T is set. Setting trace_dst value to 0 (default) enables output to prdbg and devdbg trace events. Setting trace_dst value to a value in range of [1..255] enables output to trace instance. Signed-off-by: =C5=81ukasz Bartosik --- include/linux/dynamic_debug.h | 13 +++++++++++-- lib/dynamic_debug.c | 28 +++++++++++++++++++--------- 2 files changed, 30 insertions(+), 11 deletions(-) diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index 684766289bfc..3084302876b4 100644 --- a/include/linux/dynamic_debug.h +++ b/include/linux/dynamic_debug.h @@ -60,9 +60,18 @@ struct _ddebug { #else #define _DPRINTK_FLAGS_DEFAULT 0 #endif - struct { + struct dd_ctrl { unsigned int flags:8; - unsigned unused:24; + /* + * The trace destination field is used to determine output of debug + * logs when +T is set. Setting trace_dst value to 0 (default) enables + * output to prdbg and devdbg trace events. Setting trace_dst value to + * a value in range of [1..255] enables output to trace instance. + */ +#define TRACE_DST_BITS 8 + unsigned int trace_dst:TRACE_DST_BITS; +#define TRACE_DST_MAX ((1 << TRACE_DST_BITS) - 1) + unsigned unused:16; } ctrl; } __attribute__((aligned(8))); =20 diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index ca87adf327df..3218ab078a76 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -80,14 +80,24 @@ module_param(verbose, int, 0644); MODULE_PARM_DESC(verbose, " dynamic_debug/control processing " "( 0 =3D off (default), 1 =3D module add/rm, 2 =3D >control summary, 3 = =3D parsing, 4 =3D per-site changes)"); =20 +static inline struct dd_ctrl *get_ctrl(struct _ddebug *desc) +{ + return &desc->ctrl; +} + +static inline void set_ctrl(struct _ddebug *desc, struct dd_ctrl *ctrl) +{ + desc->ctrl =3D *ctrl; +} + static inline unsigned int get_flags(const struct _ddebug *desc) { return desc->ctrl.flags; } =20 -static inline void set_flags(struct _ddebug *desc, unsigned int val) +static inline unsigned int get_trace_dst(const struct _ddebug *desc) { - desc->ctrl.flags =3D val; + return desc->ctrl.trace_dst; } =20 /* Return the path relative to source root */ @@ -190,8 +200,8 @@ static int ddebug_change(const struct ddebug_query *que= ry, { int i; struct ddebug_table *dt; - unsigned int newflags; unsigned int nfound =3D 0; + struct dd_ctrl nctrl =3D {0}; struct flagsbuf fbuf, nbuf; struct ddebug_class_map *map =3D NULL; int __outvar valid_class; @@ -257,14 +267,14 @@ static int ddebug_change(const struct ddebug_query *q= uery, =20 nfound++; =20 - newflags =3D (get_flags(dp) & modifiers->mask) | modifiers->flags; - if (newflags =3D=3D get_flags(dp)) + nctrl.flags =3D (get_flags(dp) & modifiers->mask) | modifiers->flags; + if (!memcmp(&nctrl, get_ctrl(dp), sizeof(struct dd_ctrl))) continue; #ifdef CONFIG_JUMP_LABEL if (get_flags(dp) & _DPRINTK_FLAGS_ENABLED) { - if (!(newflags & _DPRINTK_FLAGS_ENABLED)) + if (!(nctrl.flags & _DPRINTK_FLAGS_ENABLED)) static_branch_disable(&dp->key.dd_key_true); - } else if (newflags & _DPRINTK_FLAGS_ENABLED) { + } else if (nctrl.flags & _DPRINTK_FLAGS_ENABLED) { static_branch_enable(&dp->key.dd_key_true); } #endif @@ -272,8 +282,8 @@ static int ddebug_change(const struct ddebug_query *que= ry, trim_prefix(dp->filename), dp->lineno, dt->mod_name, dp->function, ddebug_describe_flags(get_flags(dp), &fbuf), - ddebug_describe_flags(newflags, &nbuf)); - set_flags(dp, newflags); + ddebug_describe_flags(nctrl.flags, &nbuf)); + set_ctrl(dp, &nctrl); } } mutex_unlock(&ddebug_lock); --=20 2.42.0.869.gea05f2083d-goog From nobody Wed Dec 31 11:06:44 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 7392AC4167D for ; Fri, 3 Nov 2023 13:10:46 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377598AbjKCNKp (ORCPT ); Fri, 3 Nov 2023 09:10:45 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48820 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S233674AbjKCNKc (ORCPT ); Fri, 3 Nov 2023 09:10:32 -0400 Received: from mail-lf1-x12c.google.com (mail-lf1-x12c.google.com [IPv6:2a00:1450:4864:20::12c]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 5AA62D4E for ; Fri, 3 Nov 2023 06:10:27 -0700 (PDT) Received: by mail-lf1-x12c.google.com with SMTP id 2adb3069b0e04-507f1c29f25so2508219e87.1 for ; Fri, 03 Nov 2023 06:10:27 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1699017025; x=1699621825; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=uOUDhCvR7O/HItpGyWqotIRwbNv9xPIlLL6yVbWMeYY=; b=OoXi3RDYNRkK0YjSeLNAigmYbP17lRyy3F6hWfKfdA09H4WuPQFeAeiYoneRQ2giyz JpUnSHHyTScQIYYOlR05vJnnwd+b7Y3BrdUdOxlYtxFUG1hI3tAZsdhkPHWYnWZhIGhh LHvUF0VUUju7HaHVi/fyG+FAA/A7zi2LiiWTOtFc7FlTFSTeM6hokoltMOb3paiL1rgZ JvzclF3ULiBdNLTF86HTwznOr96PMp5IeX4F1dgSsjlyef8QXxX43UZMx33/QC1Ni8ot 4iCw2JaVdwZ4hBDcY2ybQqc03kMYeDyfGgbAy3dBPH0oyVkDKobwdPtx6kD8qlbnBOgx JitQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699017025; x=1699621825; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=uOUDhCvR7O/HItpGyWqotIRwbNv9xPIlLL6yVbWMeYY=; b=Z7dcxbaWMWuGNKOfrZ3IAKGvCo0KtbOQqVvuFab12bM1Sl3oP7HZe0WeQg2CZxPJWQ NYXjNI7aaflijk6CDpniqE8OhQWeU8XDij5NlicfFbI2tuRyrtWpu1Rv1b9Kmz44mcen fDhFmn62Bi11245EHGDasF7VIrxBLuulcvTigVHCsjqiyk5IIcEuQAu6DXGWw4FHdKZD bMqg6sO1+iFtQ79nSw4VOXQ46RDN9wk13wYhtDnlTf9j7MiGYIBBmOJ3wTYTyocapjUh HIcrRE2GSmAZlQ121IGAoDXefjCIS65AGRv7zCwm1poUhivmHLEoMbC4mUMxazlEYewF E/kA== X-Gm-Message-State: AOJu0Yyia8rfmJskU5J950rL8N9WzKYQwMoN3ecO/njZjcOU580s30jd MhHz/eXvzZsGwkXyr9CpctNh X-Google-Smtp-Source: AGHT+IHF5aYNXQAYCxmcX3r+x3IpwrCfoPEIek1akbRf2gESDru4XOg7w2GOPvQH7+yVAXjPBMOORg== X-Received: by 2002:ac2:4e08:0:b0:509:2b57:32e with SMTP id e8-20020ac24e08000000b005092b57032emr12843892lfr.8.1699017025546; Fri, 03 Nov 2023 06:10:25 -0700 (PDT) Received: from ukaszb-l.wifi.semihalf.net ([83.142.187.85]) by smtp.gmail.com with ESMTPSA id f21-20020ac25335000000b00507a69a4799sm216336lfh.270.2023.11.03.06.10.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 06:10:25 -0700 (PDT) From: =?UTF-8?q?=C5=81ukasz=20Bartosik?= To: Jason Baron , Jim Cromie , Andrew Morton , Kees Cook , Douglas Anderson Cc: Guenter Roeck , Yaniv Tzoreff , Benson Leung , Steven Rostedt , Vincent Whitchurch , Pekka Paalanen , Sean Paul , Daniel Vetter , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v1 10/12] dyndbg: add processing of T(race) flag argument Date: Fri, 3 Nov 2023 14:10:09 +0100 Message-Id: <20231103131011.1316396-11-lb@semihalf.com> X-Mailer: git-send-email 2.38.3 In-Reply-To: <20231103131011.1316396-1-lb@semihalf.com> References: <20231103131011.1316396-1-lb@semihalf.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add processing of argument provided to T(race) flag. The argument value determines destination of debug logs: 0 - debug logs will be written to prdbg and devdbg trace events [1..255] - debug logs will be written to trace instance A user can provide trace destination by folowing T flag with ":" and trace destination value in range [0..255], for example: echo "module thunderbolt =3DpT:7" > /sys/kernel/debug/dynamic_debug/control echo "module thunderbolt =3DlT:7,p" > /sys/kernel/debug/dynamic_debug/contr= ol When T flag with argument is followed by other flags then the next flag has to be preceded with ",". When no value is provided trace destination defaults to 0, for example: echo "module thunderbolt =3DT" > /sys/kernel/debug/dynamic_debug/control echo "module thunderbolt =3DlTp" > /sys/kernel/debug/dynamic_debug/control Signed-off-by: =C5=81ukasz Bartosik --- lib/dynamic_debug.c | 105 +++++++++++++++++++++++++++++++++++++------- 1 file changed, 90 insertions(+), 15 deletions(-) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 3218ab078a76..c5cd28e74a02 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -71,6 +71,7 @@ struct ddebug_iter { struct flag_settings { unsigned int flags; unsigned int mask; + unsigned int trace_dst; }; =20 static DEFINE_MUTEX(ddebug_lock); @@ -111,9 +112,67 @@ static inline const char *trim_prefix(const char *path) return path + skip; } =20 -static const struct { unsigned flag:8; char opt_char; } opt_array[] =3D { +typedef const char* (*read_flag_args_f)(const char *, struct flag_settings= *); +typedef char* (*show_flag_args_f)(struct dd_ctrl *, char *); + +/* + * Maximum number of characters representing value + * of flag T argument in human readable form - ":255," + */ +#define FLAG_T_ARGS_LEN 5 + +static const +char *read_T_args(const char *str, struct flag_settings *modifiers) +{ + char *end, args[FLAG_T_ARGS_LEN]; + int len; + + if (*(str+1) !=3D ':') + return str; + + str +=3D 2; + end =3D strchr(str, ','); + if (end && *(end + 1) =3D=3D '\0') + return NULL; + + if (end) + len =3D end - str; + else + len =3D strlen(str); + + if (len > FLAG_T_ARGS_LEN - 1) + return NULL; + + memcpy(args, str, len); + args[len] =3D '\0'; + if (kstrtouint(args, 10, &modifiers->trace_dst) < 0) + return NULL; + + if (modifiers->trace_dst > TRACE_DST_MAX) + return NULL; + + return end ? end : str + len; +} + +char *show_T_args(struct dd_ctrl *ctrl, char *p) +{ + int n; + + n =3D snprintf(p, FLAG_T_ARGS_LEN, ":%u", ctrl->trace_dst); + WARN_ONCE(n < 0, "printing T flag args value failed\n"); + + return n < 0 ? p : p + n; +} + +static const struct +{ + unsigned flag:8; + char opt_char; + read_flag_args_f read_args; + show_flag_args_f show_args; +} opt_array[] =3D { { _DPRINTK_FLAGS_PRINTK, 'p' }, - { _DPRINTK_FLAGS_TRACE, 'T' }, + { _DPRINTK_FLAGS_TRACE, 'T', read_T_args, show_T_args}, { _DPRINTK_FLAGS_INCL_MODNAME, 'm' }, { _DPRINTK_FLAGS_INCL_FUNCNAME, 'f' }, { _DPRINTK_FLAGS_INCL_SOURCENAME, 's' }, @@ -122,22 +181,30 @@ static const struct { unsigned flag:8; char opt_char;= } opt_array[] =3D { { _DPRINTK_FLAGS_NONE, '_' }, }; =20 -struct flagsbuf { char buf[ARRAY_SIZE(opt_array)+1]; }; +struct ctrlbuf { char buf[ARRAY_SIZE(opt_array)+FLAG_T_ARGS_LEN+1]; }; =20 /* format a string into buf[] which describes the _ddebug's flags */ -static char *ddebug_describe_flags(unsigned int flags, struct flagsbuf *fb) +static char *ddebug_describe_ctrl(struct dd_ctrl *ctrl, struct ctrlbuf *cb) { - char *p =3D fb->buf; + show_flag_args_f show_args =3D NULL; + char *p =3D cb->buf; int i; =20 for (i =3D 0; i < ARRAY_SIZE(opt_array); ++i) - if (flags & opt_array[i].flag) + if (ctrl->flags & opt_array[i].flag) { + if (show_args) + *p++ =3D ','; *p++ =3D opt_array[i].opt_char; - if (p =3D=3D fb->buf) + show_args =3D opt_array[i].show_args; + if (show_args) + p =3D show_args(ctrl, p); + } + + if (p =3D=3D cb->buf) *p++ =3D '_'; *p =3D '\0'; =20 - return fb->buf; + return cb->buf; } =20 #define vnpr_info(lvl, fmt, ...) \ @@ -202,7 +269,7 @@ static int ddebug_change(const struct ddebug_query *que= ry, struct ddebug_table *dt; unsigned int nfound =3D 0; struct dd_ctrl nctrl =3D {0}; - struct flagsbuf fbuf, nbuf; + struct ctrlbuf cbuf, nbuf; struct ddebug_class_map *map =3D NULL; int __outvar valid_class; =20 @@ -268,7 +335,8 @@ static int ddebug_change(const struct ddebug_query *que= ry, nfound++; =20 nctrl.flags =3D (get_flags(dp) & modifiers->mask) | modifiers->flags; - if (!memcmp(&nctrl, get_ctrl(dp), sizeof(struct dd_ctrl))) + nctrl.trace_dst =3D modifiers->trace_dst; + if (!memcmp(&nctrl, get_ctrl(dp), sizeof(nctrl))) continue; #ifdef CONFIG_JUMP_LABEL if (get_flags(dp) & _DPRINTK_FLAGS_ENABLED) { @@ -281,8 +349,8 @@ static int ddebug_change(const struct ddebug_query *que= ry, v4pr_info("changed %s:%d [%s]%s %s =3D> %s\n", trim_prefix(dp->filename), dp->lineno, dt->mod_name, dp->function, - ddebug_describe_flags(get_flags(dp), &fbuf), - ddebug_describe_flags(nctrl.flags, &nbuf)); + ddebug_describe_ctrl(&dp->ctrl, &cbuf), + ddebug_describe_ctrl(&nctrl, &nbuf)); set_ctrl(dp, &nctrl); } } @@ -507,6 +575,7 @@ static int ddebug_parse_query(char *words[], int nwords, */ static int ddebug_parse_flags(const char *str, struct flag_settings *modif= iers) { + read_flag_args_f read_args; int op, i; =20 switch (*str) { @@ -525,6 +594,12 @@ static int ddebug_parse_flags(const char *str, struct = flag_settings *modifiers) for (i =3D ARRAY_SIZE(opt_array) - 1; i >=3D 0; i--) { if (*str =3D=3D opt_array[i].opt_char) { modifiers->flags |=3D opt_array[i].flag; + read_args =3D opt_array[i].read_args; + if (read_args) { + str =3D read_args(str, modifiers); + if (!str) + return -EINVAL; + } break; } } @@ -533,7 +608,7 @@ static int ddebug_parse_flags(const char *str, struct f= lag_settings *modifiers) return -EINVAL; } } - v3pr_info("flags=3D0x%x\n", modifiers->flags); + v3pr_info("flags=3D0x%x, trace dest=3D0x%x\n", modifiers->flags, modifier= s->trace_dst); =20 /* calculate final flags, mask based upon op */ switch (op) { @@ -1257,7 +1332,7 @@ static int ddebug_proc_show(struct seq_file *m, void = *p) { struct ddebug_iter *iter =3D m->private; struct _ddebug *dp =3D p; - struct flagsbuf flags; + struct ctrlbuf cbuf; char const *class; =20 if (p =3D=3D SEQ_START_TOKEN) { @@ -1269,7 +1344,7 @@ static int ddebug_proc_show(struct seq_file *m, void = *p) seq_printf(m, "%s:%u [%s]%s =3D%s \"", trim_prefix(dp->filename), dp->lineno, iter->table->mod_name, dp->function, - ddebug_describe_flags(get_flags(dp), &flags)); + ddebug_describe_ctrl(&dp->ctrl, &cbuf)); seq_escape_str(m, dp->format, ESCAPE_SPACE, "\t\r\n\""); seq_puts(m, "\""); =20 --=20 2.42.0.869.gea05f2083d-goog From nobody Wed Dec 31 11:06:44 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 49DA3C4167D for ; Fri, 3 Nov 2023 13:11:03 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377698AbjKCNLC (ORCPT ); Fri, 3 Nov 2023 09:11:02 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48844 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1376706AbjKCNKe (ORCPT ); Fri, 3 Nov 2023 09:10:34 -0400 Received: from mail-lf1-x132.google.com (mail-lf1-x132.google.com [IPv6:2a00:1450:4864:20::132]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 4061FD4F for ; Fri, 3 Nov 2023 06:10:28 -0700 (PDT) Received: by mail-lf1-x132.google.com with SMTP id 2adb3069b0e04-507a5f2193bso2208299e87.1 for ; Fri, 03 Nov 2023 06:10:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1699017026; x=1699621826; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=VI3+psSg/0z6wOi4I/j3+MaVtopAUYjIX515gNS2jUE=; b=Bg+WEu/ZU97HP4aJrVKjwXeqUrnMjcKmtoYcUmwIyubrTL8f0lkENN53sl8cRb5ZwK BkNUUVzDZ3zJV8Jv3e9gxLwZHJ4MRwRo3OKGhn7q8fmdCvCswFychne/eYrBjxilJP3T cyd3AhvcxeLYYG4zlvKNlfPPeMD4rfZaJ5INutD3VS2rBRA1bdD3gcrUlF3xHOS5F9zg NYcfA0idpQQcV6YBR5k0WDjaLeFmxE6bGiBxvDl1ZOSBtbpUxn+0ig+g9zAH98opa7mN SJfQWU1BVm55qdqA6El0v4PCgxL1ovQR4ffXOMbs3Vv4ft8d5NbmFRTUhj27IA7gJ5LW jSsQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699017026; x=1699621826; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=VI3+psSg/0z6wOi4I/j3+MaVtopAUYjIX515gNS2jUE=; b=P5YfNvgw9nn/ND7nBXDyA9UO6hqheCQxhUawNJqIPY6jx+u1VaQbd0eht0DvYUal3k hlt2+f2BEJrUEYwgU2fPVmJQQ90KmFeSVlQheoQaPHfGG13PHSf5hpgXCJn8sbG3O+q0 PFbkr4nqTMoteFMRgMWQs34SDOriO4808Uy9AM6g0ocybWR1CYUK1RucmvMNoPWifs4M plZ9bSFekvUkkFURMvy0vtGcPQ18kzcIJV3t5u3dOiLAoJHKBVOiZENN2Lmt/MjCKpj1 B9uKX8iCneJx64IcMmJ/XYx+3GEarzHRMdCDjtIHDopdd+neAFFBuSAo4NN/Dwu7J52s MWiw== X-Gm-Message-State: AOJu0Yz7N1xOk5RISWf3CiF6ntwP5XRfw/PaSApV0VS5Geq0u1CUojxi KOgC8Hb7uivrlSoPK44kwMyz X-Google-Smtp-Source: AGHT+IGuQaAU0GuaN3OJxEwOtd2r1wXMUAEDYFKDcbZy/O2GNqIEpKuBLFo39IclGY05eHu17zM9Vg== X-Received: by 2002:ac2:48a4:0:b0:509:4421:b38f with SMTP id u4-20020ac248a4000000b005094421b38fmr955208lfg.20.1699017026460; Fri, 03 Nov 2023 06:10:26 -0700 (PDT) Received: from ukaszb-l.wifi.semihalf.net ([83.142.187.85]) by smtp.gmail.com with ESMTPSA id f21-20020ac25335000000b00507a69a4799sm216336lfh.270.2023.11.03.06.10.25 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 06:10:26 -0700 (PDT) From: =?UTF-8?q?=C5=81ukasz=20Bartosik?= To: Jason Baron , Jim Cromie , Andrew Morton , Kees Cook , Douglas Anderson Cc: Guenter Roeck , Yaniv Tzoreff , Benson Leung , Steven Rostedt , Vincent Whitchurch , Pekka Paalanen , Sean Paul , Daniel Vetter , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v1 11/12] dyndbg: write debug logs to trace instance Date: Fri, 3 Nov 2023 14:10:10 +0100 Message-Id: <20231103131011.1316396-12-lb@semihalf.com> X-Mailer: git-send-email 2.38.3 In-Reply-To: <20231103131011.1316396-1-lb@semihalf.com> References: <20231103131011.1316396-1-lb@semihalf.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org When trace is enabled (T flag is set) and trace_dst field is set to value greater than 0 (0 is reserved for trace events) then debug logs will be written to trace instance pointed by trace_dst value, for example when trace_dst value is 2 then debug logs will be written to /tracing/instances/dyndbg_inst_2 instance. Given trace instance will not be initialized until debug logs are requested to be written to it and afer init will persist until reboot. Signed-off-by: =C5=81ukasz Bartosik --- lib/Kconfig.debug | 1 + lib/dynamic_debug.c | 79 ++++++++++++++++++++++++++++++++++++++++++--- 2 files changed, 76 insertions(+), 4 deletions(-) diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index fa307f93fa2e..9617e92c046d 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -181,6 +181,7 @@ config DYNAMIC_DEBUG_CORE bool "Enable core function of dynamic debug support" depends on PRINTK depends on (DEBUG_FS || PROC_FS) + depends on TRACING help Enable core functional support of dynamic debug. It is useful when you want to tie dynamic debug to your kernel modules with diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index c5cd28e74a02..541d9d522b3b 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -36,6 +36,7 @@ #include #include #include +#include =20 #define CREATE_TRACE_POINTS #include @@ -81,6 +82,18 @@ module_param(verbose, int, 0644); MODULE_PARM_DESC(verbose, " dynamic_debug/control processing " "( 0 =3D off (default), 1 =3D module add/rm, 2 =3D >control summary, 3 = =3D parsing, 4 =3D per-site changes)"); =20 +/* + * When trace is enabled (T flag is set) and trace_dst field is set + * to value greater than 0 (0 is reserved for trace events) then + * debug logs will be written to trace instance pointed by trace_dst + * value, for example when trace_dst value is 2 then debug logs will + * be written to /tracing/instances/dyndbg_inst_2 instance. + * Given trace instance will not be initialized until debug logs are + * requested to be written to it and afer init will persist until + * reboot. + */ +static struct trace_array *trace_arr[TRACE_DST_MAX]; + static inline struct dd_ctrl *get_ctrl(struct _ddebug *desc) { return &desc->ctrl; @@ -255,6 +268,45 @@ static struct ddebug_class_map *ddebug_find_valid_clas= s(struct ddebug_table cons return NULL; } =20 +static int handle_trace_dst(struct dd_ctrl *ctrl) +{ +#define TRACE_INST_NAME_LEN 16 + char instance_name[TRACE_INST_NAME_LEN]; + struct trace_array *arr; + int ret =3D -EINVAL; + + /* check if trace (T flag) is enabled */ + if (!(ctrl->flags & _DPRINTK_FLAGS_TRACE)) + return 0; + + /* check if trace destination are trace events */ + if (!ctrl->trace_dst) + return 0; + + /* check if trace instance is already set up */ + if (trace_arr[ctrl->trace_dst]) + return 0; + + snprintf(instance_name, TRACE_INST_NAME_LEN, + "dyndbg_inst_%u", ctrl->trace_dst); + arr =3D trace_array_get_by_name(instance_name); + if (!arr) + goto err; + + ret =3D trace_array_init_printk(arr); + if (ret) + goto err_init; + + trace_arr[ctrl->trace_dst] =3D arr; + return 0; + +err_init: + trace_array_put(arr); + trace_array_destroy(arr); +err: + return ret; +} + #define __outvar /* filled by callee */ /* * Search the tables for _ddebug's which match the given `query' and @@ -338,6 +390,9 @@ static int ddebug_change(const struct ddebug_query *que= ry, nctrl.trace_dst =3D modifiers->trace_dst; if (!memcmp(&nctrl, get_ctrl(dp), sizeof(nctrl))) continue; + + if (handle_trace_dst(&nctrl)) + continue; #ifdef CONFIG_JUMP_LABEL if (get_flags(dp) & _DPRINTK_FLAGS_ENABLED) { if (!(nctrl.flags & _DPRINTK_FLAGS_ENABLED)) @@ -977,8 +1032,8 @@ static DEFINE_PER_CPU(struct ddebug_trace_bufs, ddebug= _trace_bufs); static DEFINE_PER_CPU(int, ddebug_trace_reserve); =20 __printf(3, 0) -static void ddebug_trace(struct _ddebug *desc, const struct device *dev, - const char *fmt, va_list args) +static void ddebug_trace_event(struct _ddebug *desc, const struct device *= dev, + const char *fmt, va_list args) { struct ddebug_trace_buf *buf; int bufidx; @@ -1010,6 +1065,15 @@ static void ddebug_trace(struct _ddebug *desc, const= struct device *dev, preempt_enable_notrace(); } =20 +__printf(2, 0) +static void ddebug_trace_instance(struct _ddebug *desc, const char *fmt, + va_list *args) +{ + struct va_format vaf =3D { .fmt =3D fmt, .va =3D args}; + + trace_array_printk(trace_arr[get_trace_dst(desc)], _THIS_IP_, "%pV", &vaf= ); +} + __printf(2, 3) static void ddebug_printk(struct _ddebug *desc, const char *fmt, ...) { @@ -1022,7 +1086,11 @@ static void ddebug_printk(struct _ddebug *desc, cons= t char *fmt, ...) * All callers include the KERN_DEBUG prefix to keep the * vprintk case simple; strip it out for tracing. */ - ddebug_trace(desc, NULL, fmt + strlen(KERN_DEBUG), args); + if (get_trace_dst(desc)) + ddebug_trace_instance(desc, fmt, &args); + else + ddebug_trace_event(desc, NULL, + fmt + strlen(KERN_DEBUG), args); va_end(args); } =20 @@ -1044,7 +1112,10 @@ static void ddebug_dev_printk(struct _ddebug *desc, = const struct device *dev, va_list args; =20 va_start(args, fmt); - ddebug_trace(desc, dev, fmt, args); + if (get_trace_dst(desc)) + ddebug_trace_instance(desc, fmt, &args); + else + ddebug_trace_event(desc, dev, fmt, args); va_end(args); } =20 --=20 2.42.0.869.gea05f2083d-goog From nobody Wed Dec 31 11:06:44 2025 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 0E240C4332F for ; Fri, 3 Nov 2023 13:11:07 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1377677AbjKCNLG (ORCPT ); Fri, 3 Nov 2023 09:11:06 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:48876 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1377612AbjKCNKh (ORCPT ); Fri, 3 Nov 2023 09:10:37 -0400 Received: from mail-lf1-x134.google.com (mail-lf1-x134.google.com [IPv6:2a00:1450:4864:20::134]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 0C18FD51 for ; Fri, 3 Nov 2023 06:10:29 -0700 (PDT) Received: by mail-lf1-x134.google.com with SMTP id 2adb3069b0e04-50930f126b1so2496006e87.3 for ; Fri, 03 Nov 2023 06:10:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1699017027; x=1699621827; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=sZSPUorn4pTdADZrPzHb8i7AO+zsH0qYfe7SAa+uJVc=; b=OVwj/ta4ja6sMcG5kOo50EXcyYnI1coX0VATo8UALsqhvhWOyDaPC2GRDGWxwQ3zX1 viFZIJZubLGF5M/thHIvE0Gi6jggVkpnWlTQ6LpZZXgTPjTCjcqP9QF3s8KBpyMEHaN+ C59/1J5ZXnTbNRvKZYb4JRCnJXqMIZLweiDA47q5P+ASj2jCPq4ARO2vXikMprIomIsj w8FGiWa31DJLP4B/TY5s2RwMegqz++F76Kwczohjc9Hikm4cnQp/Lt6Fd2G2exVrFPu3 /H9P8UWpa1Ar7mLpJlbdGiTuByPQGkX7dZWxR5vCzvxVpKtSVIRqt1De/FNOrqpKm6bU H7+A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1699017027; x=1699621827; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=sZSPUorn4pTdADZrPzHb8i7AO+zsH0qYfe7SAa+uJVc=; b=udM8Q9WwU0WTMO1U/lPDulfovUslncL2v12EwWlWWfV67DH+ORPeC+O5RFvCWb4F1a 9rMxGc4AZBHaLXHz6zFBon3VjNLVf0TuVnMeG9VOqxKgHlztOT2Arlz1EeVdyxd0WYKc 9R5k6R64MDYAb3Ym3YNiYB4RfHwCEC0Y6AdSxMn/SHkBWYDZzxmhB9TngnW3uXtOOEjt C5CzttXZxrpKWgxcgdEpGacBdC/d67VdNRlYxYvRtcUHzMgDpEkRy9CoCirE5C7zUTnm JhrO9GTHYQGiNooBQVh/BB+1Vz3/hTlA29B/BSh3l6tlV9hjAoL3lBRp0VYtGNzXwdcg p/7Q== X-Gm-Message-State: AOJu0Yx0WMCFgMTOTlC5AN3lTe3qJ3fCDIkqYA2i99nkveuGpqfLFTz8 QvOCoZZ4MVy4plGcfn8T0lox X-Google-Smtp-Source: AGHT+IE/9U48t0tU5PPZhFGUjTuLEUVf68zErXPFQG4ELxF6/Ta4zhL/CgztUcIgO1+IihRf2R4IWw== X-Received: by 2002:a19:6d03:0:b0:507:c763:27a5 with SMTP id i3-20020a196d03000000b00507c76327a5mr14710758lfc.62.1699017027390; Fri, 03 Nov 2023 06:10:27 -0700 (PDT) Received: from ukaszb-l.wifi.semihalf.net ([83.142.187.85]) by smtp.gmail.com with ESMTPSA id f21-20020ac25335000000b00507a69a4799sm216336lfh.270.2023.11.03.06.10.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 03 Nov 2023 06:10:27 -0700 (PDT) From: =?UTF-8?q?=C5=81ukasz=20Bartosik?= To: Jason Baron , Jim Cromie , Andrew Morton , Kees Cook , Douglas Anderson Cc: Guenter Roeck , Yaniv Tzoreff , Benson Leung , Steven Rostedt , Vincent Whitchurch , Pekka Paalanen , Sean Paul , Daniel Vetter , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v1 12/12] dyndbg: add trace support for hexdump Date: Fri, 3 Nov 2023 14:10:11 +0100 Message-Id: <20231103131011.1316396-13-lb@semihalf.com> X-Mailer: git-send-email 2.38.3 In-Reply-To: <20231103131011.1316396-1-lb@semihalf.com> References: <20231103131011.1316396-1-lb@semihalf.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add support for writing hexdump debug logs to trace. Signed-off-by: =C5=81ukasz Bartosik --- include/linux/dynamic_debug.h | 16 ++++++++++------ lib/dynamic_debug.c | 35 +++++++++++++++++++++++++++++++++++ 2 files changed, 45 insertions(+), 6 deletions(-) diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index 3084302876b4..e01b529dcd09 100644 --- a/include/linux/dynamic_debug.h +++ b/include/linux/dynamic_debug.h @@ -298,12 +298,16 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor, _dynamic_func_call(fmt, __dynamic_ibdev_dbg, \ dev, fmt, ##__VA_ARGS__) =20 -#define dynamic_hex_dump(prefix_str, prefix_type, rowsize, \ - groupsize, buf, len, ascii) \ - _dynamic_func_call_no_desc(__builtin_constant_p(prefix_str) ? prefix_str = : "hexdump", \ - print_hex_dump, \ - KERN_DEBUG, prefix_str, prefix_type, \ - rowsize, groupsize, buf, len, ascii) +void _print_hex_dump(struct _ddebug *descriptor, const char *level, + const char *prefix_str, int prefix_type, int rowsize, + int groupsize, const void *buf, size_t len, bool ascii); + +#define dynamic_hex_dump(prefix_str, prefix_type, rowsize, \ + groupsize, buf, len, ascii) \ + _dynamic_func_call(__builtin_constant_p(prefix_str) ? prefix_str : "hexdu= mp", \ + _print_hex_dump, \ + KERN_DEBUG, prefix_str, prefix_type, \ + rowsize, groupsize, buf, len, ascii) =20 /* for test only, generally expect drm.debug style macro wrappers */ #define __pr_debug_cls(cls, fmt, ...) do { \ diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 541d9d522b3b..fb2c6e2909bb 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -1128,6 +1128,41 @@ static void ddebug_dev_printk(struct _ddebug *desc, = const struct device *dev, } } =20 +void _print_hex_dump(struct _ddebug *descriptor, const char *level, + const char *prefix_str, int prefix_type, int rowsize, + int groupsize, const void *buf, size_t len, bool ascii) +{ + const u8 *ptr =3D buf; + int i, linelen, remaining =3D len; + unsigned char linebuf[32 * 3 + 2 + 32 + 1]; + + if (rowsize !=3D 16 && rowsize !=3D 32) + rowsize =3D 16; + + for (i =3D 0; i < len; i +=3D rowsize) { + linelen =3D min(remaining, rowsize); + remaining -=3D rowsize; + + hex_dump_to_buffer(ptr + i, linelen, rowsize, groupsize, + linebuf, sizeof(linebuf), ascii); + + switch (prefix_type) { + case DUMP_PREFIX_ADDRESS: + ddebug_printk(descriptor, "%s%s%p: %s\n", + level, prefix_str, ptr + i, linebuf); + break; + case DUMP_PREFIX_OFFSET: + ddebug_printk(descriptor, "%s%s%.8x: %s\n", + level, prefix_str, i, linebuf); + break; + default: + ddebug_printk(descriptor, "%s%s%s\n", + level, prefix_str, linebuf); + break; + } + } +} + void __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...) { va_list args; --=20 2.42.0.869.gea05f2083d-goog