From nobody Sat Dec 27 05:11:20 2025 Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id C3FBB802 for ; Sat, 23 Dec 2023 01:51:52 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=semihalf.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=semihalf.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=semihalf.com header.i=@semihalf.com header.b="kK/EUhAc" Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-550dd0e3304so2909664a12.1 for ; Fri, 22 Dec 2023 17:51:52 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1703296311; x=1703901111; 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=wna70XTeBlFKQHd72a/Hk84hDNIQx/tPURUUiyG4BEI=; b=kK/EUhAcP/V2QTddLJqSJPE5QLAGwu1SZuW2RBgXiFndE4yRu6+Zl4t6yKIza5biqM 69bdYU5nuJWk1bg5Cs29GREyK1pNuuHYue8FeAMaN1WmT2/xsXxoro3oMx0YzHY5Cx7Y 2Lqi9USNxE6cEy7nHGqGr91fruNzlFAX/hKnXPt6/d5kmr78Fg/q8Jb/vIye/p05WdAM LYmRaoyy9vQYKQasLLgFqe6AOVRSBPu1GN33mQpMxdyuniyfDRzIpjT9DNOWetW4HgEd GA+ulwX4hdXsmyHVD1+tw6osvaKwPLa3cVtQcOwtpRiPabBXVmDdmFmclC+oCBTUt6rM dABA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703296311; x=1703901111; 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=wna70XTeBlFKQHd72a/Hk84hDNIQx/tPURUUiyG4BEI=; b=A37uREzF8LmWtgDSuaCb88K5VyRKWrwP/PdIqLuEAtH07Z/F4g8mG2kpobWbZhwB35 Rhw+NUoErUM8fJkg5QbOSJkVzZvI7XMbWfXmIqP9Xfkx49kdhJUZLzbe7CGI3fbRfYZZ A74FvugAKioLsdWVGA/jKUE26NXop7F9xranBsd5u8rGoRZXRPrwdY4vbxzteHRDExuB yUjqtIZz6Mar21ER9YBAkdp7nPtwm/LXmQHajxW6Xv/4aO7AN6KcApOfK4mP302NL0pY ca4Z3f1YTnpPydA4+T+RU9s1NDMNCXOd2ii/ASc5/+k8RbBesnevH+b7Fan8LWhzhZ15 bYAA== X-Gm-Message-State: AOJu0Yxur0hbXs6ystpWVZSP3HtkE6Kzi4MbYemVkffkCiKwvQfH5Hwi yTIV887OJPRLJH3FPSvI63y9ijd2wSj6 X-Google-Smtp-Source: AGHT+IHuAI+pCvrrP5Nn9XPNhtdmvTAUBKtkiKmu5JmUZSpJIUgA5u9YqukoNQm7zBUDXFJxDcwu8A== X-Received: by 2002:a50:d74e:0:b0:554:877e:b7f with SMTP id i14-20020a50d74e000000b00554877e0b7fmr156143edj.39.1703296311200; Fri, 22 Dec 2023 17:51:51 -0800 (PST) Received: from ukaszb-l.semihalf.net (alfa56.extreme-net.one.pl. [213.77.89.56]) by smtp.gmail.com with ESMTPSA id h2-20020a0564020e8200b005532a337d51sm3288494eda.44.2023.12.22.17.51.49 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 17:51:50 -0800 (PST) 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 , Simon Ser , John Ogness , Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v3 01/22] dyndbg: add _DPRINTK_FLAGS_ENABLED Date: Sat, 23 Dec 2023 02:51:10 +0100 Message-ID: <20231223015131.2836090-2-lb@semihalf.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com> References: <20231223015131.2836090-1-lb@semihalf.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.43.0.472.g3155946c3a-goog From nobody Sat Dec 27 05:11:20 2025 Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 66FB6814 for ; Sat, 23 Dec 2023 01:51:54 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=semihalf.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=semihalf.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=semihalf.com header.i=@semihalf.com header.b="d/dEiRp/" Received: by mail-ed1-f42.google.com with SMTP id 4fb4d7f45d1cf-5545ccc6a11so891849a12.2 for ; Fri, 22 Dec 2023 17:51:54 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1703296312; x=1703901112; 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=fhZRdKG2SUpkpXn5O3JJ5iAzREJVy70U4FekMjB9iT0=; b=d/dEiRp/zVzViRLiMIKs2gy0IDa0j//de7igGhfkJ7hsbAUlgJni3blzNmx5fDMP/3 Zg3c0jpyhhPEDgSqt1cPrYw4OL9H3r5T37NPILezjaTF81Opf41hWFGW7pzQMDCaL6uc gqogtcRDJSz+Bmj6sSpAA89dwgIVhxtkIDsX9Bk35KLBUOhc8t7u9bQe1otFLUx4pjEQ jwAl1LkN3lz2AEFOubZwiVHrbr7mPvJzmWp4n0OEiKpBzyXXyWeUAeOHyDZWBApTMpRR W0JOQ1QYwxFKRFEfeOkfJUWwxXqbtR9TkyVE7n3zMf9+8vXeWqGuATV2FU+HU5KLO7bs V29g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703296312; x=1703901112; 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=fhZRdKG2SUpkpXn5O3JJ5iAzREJVy70U4FekMjB9iT0=; b=xUz28xTn3xTPb/WFQslEMbPu/jWMVpQYUDsoM/nQ6CqeHUzBQ5WIgR5cI8MT0j4oB8 1vBg7wk0xKHld0f5yqaMszTtYpCbLaNEFzQT26ap3xzBvoSq6gojHygNYCrV+Lck3s8c EZfLzh4IbCyi+3P+HkBMQZE7ydDo/dqrgKlL0hBlNBv0bhk6Yfzjzo0d/rn+jEg/Y4+X xCoojourUfABllCIxM7s9c9mQJYGIaaoorA2Vy2EySRitGnaBobTzemLfYaQmagrnwYu 0tlHuQhKaDWbuLq/QNN3fx4kDqVdzFjrhB+gcul70woZfpmW5tvxzNkSBNBG7YEu3dT+ yNCg== X-Gm-Message-State: AOJu0YyNmcMuRCTGCtKv5MFAbQ3iOA+5xoIQ9048xLI0WoqYfl9XaxV3 U6RlRux0LgVplYw5/9Qxkc2tr6BUYia9 X-Google-Smtp-Source: AGHT+IHJOb5zy2mq3xtQiIwhovQe2UhQXIu8/EZ0R2Fsd0jNa9RlWrwlmF77808j8H/hTBA1d8lPdg== X-Received: by 2002:a50:c182:0:b0:552:5c49:b58 with SMTP id m2-20020a50c182000000b005525c490b58mr1097109edf.50.1703296312821; Fri, 22 Dec 2023 17:51:52 -0800 (PST) Received: from ukaszb-l.semihalf.net (alfa56.extreme-net.one.pl. [213.77.89.56]) by smtp.gmail.com with ESMTPSA id h2-20020a0564020e8200b005532a337d51sm3288494eda.44.2023.12.22.17.51.51 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 17:51:52 -0800 (PST) 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 , Simon Ser , John Ogness , Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v3 02/22] dyndbg: add _DPRINTK_FLAGS_TRACE Date: Sat, 23 Dec 2023 02:51:11 +0100 Message-ID: <20231223015131.2836090-3-lb@semihalf.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com> References: <20231223015131.2836090-1-lb@semihalf.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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.43.0.472.g3155946c3a-goog From nobody Sat Dec 27 05:11:20 2025 Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4F89C17C6 for ; Sat, 23 Dec 2023 01:51:56 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=semihalf.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=semihalf.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=semihalf.com header.i=@semihalf.com header.b="dtbrrnVA" Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-554909ac877so22830a12.1 for ; Fri, 22 Dec 2023 17:51:55 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1703296314; x=1703901114; 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=quMgNwKOdTclO41b7tWzKksRJVaVcMbf8IigtrAKC2o=; b=dtbrrnVA0VZ3t+2yokrqfKh45rRG1n95j3gsvXNGTDWJbDyaWV1JWkGM+CNc4S4gQL dv8680gYnbhCNYeBMp3MUFcnjTPPx2gE/ujZhayjMMg+n6qtmXq15UX1TQnsRQFVSGAu T6tD1vxxNrN6XM5baldELKyPTlR0a7d5U19twwb6fHuaWW8e/jdRmKwqlhB/lajYfyGq xNUV9+pL4YgP0YCa79cFg1lAIeYIXYB5lb30cpZMmh1fCcXts3+BtpB0r+5ep0DN1bgB eff8gDKWAkdB4Y5W4YHj+VyZNffwGYjNgMyDR8M8qNeyf2Ih4Psg0hvSa2F8uH8gSe8n wi+g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703296314; x=1703901114; 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=quMgNwKOdTclO41b7tWzKksRJVaVcMbf8IigtrAKC2o=; b=MsIQZm48yRFLN9oWI2Wi7rPs1AdP1gQ7pWOWteLwyb+QuKTt/1yqoYJBBLX5Ib/wKi Xupb7S1TvobCApm1utHMOkn8jcThn9m6IDk8Eq+mbeSgiuaus4j2irZS2v84SwSlERYR OYxMislJny7eVP3/5ihYCDMPHlbUK9Ax9ivoiIzBWMdv+MA5NHMI4/4u3MtKKkqR9MCk RH/ZCciPGRcBO3fpiXiLIQ/rbtvmLCBk4A/0YxOoGroEqJH138qF54o4X7fVeKplXLbk xfahk9eeUsdz7jFs24Hrn+Deh4vIpUgN5r3PpDqpG6TYN1nC4+uIFQQxA9L76/ZJRbIm 7UcA== X-Gm-Message-State: AOJu0YzaFwI6GdseAUyz6dC1w66acDt/Zir7Rtsr5ACurG6TRXT/dy3m +1f9//T5cJEWskx/3u0sOqxDDu9DAjSn X-Google-Smtp-Source: AGHT+IEyVX4gRcTEM8BhAQRVsl1J5n2Eqn3BDuLqMei/KrcrcwWRX8AeQ5/NDkMSoRFrOAudny4qyA== X-Received: by 2002:a50:9f09:0:b0:554:533:d79 with SMTP id b9-20020a509f09000000b0055405330d79mr1289645edf.21.1703296314414; Fri, 22 Dec 2023 17:51:54 -0800 (PST) Received: from ukaszb-l.semihalf.net (alfa56.extreme-net.one.pl. [213.77.89.56]) by smtp.gmail.com with ESMTPSA id h2-20020a0564020e8200b005532a337d51sm3288494eda.44.2023.12.22.17.51.52 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 17:51:54 -0800 (PST) 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 , Simon Ser , John Ogness , Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v3 03/22] dyndbg: add write events to tracefs code Date: Sat, 23 Dec 2023 02:51:12 +0100 Message-ID: <20231223015131.2836090-4-lb@semihalf.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com> References: <20231223015131.2836090-1-lb@semihalf.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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 [1] 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 [1] https://lore.kernel.org/lkml/20200825153338.17061-1-vincent.whitchurch@= axis.com 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 0c526dac8428..19732b510cfc 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.43.0.472.g3155946c3a-goog From nobody Sat Dec 27 05:11:20 2025 Received: from mail-ed1-f41.google.com (mail-ed1-f41.google.com [209.85.208.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 91B5D3FEF for ; Sat, 23 Dec 2023 01:51:57 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=semihalf.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=semihalf.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=semihalf.com header.i=@semihalf.com header.b="hPQ9EZCh" Received: by mail-ed1-f41.google.com with SMTP id 4fb4d7f45d1cf-550dd0e3304so2909698a12.1 for ; Fri, 22 Dec 2023 17:51:57 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1703296316; x=1703901116; 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=QTMwKRfKSY+wzvK5gdGyAc9H4xcGp0kciVKM/zCn9ws=; b=hPQ9EZChfyYOi1klW8JB1Rae7aC7fP74UOwwdYW2PQ9/YblJ4jz8qlQJNxPUZXats+ AosPR4S7mAz33G8AFAHI8EL/kseYpr9hQFFRiJcTbf+wXCWMUBOriY5OT3miiJFTsUyc 12E+2JjgFjM6PfzuMxn1crUhHOyA1jmnvqDVMavJ8+XrfpVqF6MXqQWEgeAX9QWiAzkT 5ocwTfpW7/aTOybk7gQbTYcLd/r1YcOdKh0OjBpvX9DIFToGIGrLrJOKuh4vyDc1Qjnz so/6vD1k0B2KNato7Tu9SkSGL+UjTFzpngosszeiAM0QcJClRW7tsCv3gWnPoJFRvQ0h +wbQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703296316; x=1703901116; 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=QTMwKRfKSY+wzvK5gdGyAc9H4xcGp0kciVKM/zCn9ws=; b=ujHDtuEyK9HexjR4uBXsuu3HaluqxrCo821bZNDqsPr6qB+yumXcTT1SAuyCbTprKV coX5AGFslaOUVyfu3G/KBNpQdQRc9W3uOxY8I+z2I5e/dI3wmjOPrzpE4Q/PZX3wNjvv 2P7uJi+8T+AzB6FSfBkz9Nn8CXrfa0cgODyoLaby/Qg2I2nS+jwsilUUL5gT6jytBk6P 12g5ajJKHF3yXbuOpWWprc8V5eHlIsVdeviyLWWSkpCR7hFv2F6yOZJa0Rhweqj44PTU EFEvnJQSg/jKEXjnHBgz1vws0msdOtOdpGcDaL+9zYp5+P3782hLOkVaEQrsa0RLusjr Tbug== X-Gm-Message-State: AOJu0Ywt6nv/6DyCRiPTwq1+JSJzMoMjVCgzSNrGFhEzyrUVyJaV5M55 pWiC1KLlLnOZconMR5COpCsZoTKDMvgT X-Google-Smtp-Source: AGHT+IESMikWpnG0X3e9DO41exzd3FpheFJckLS5vxUMgQ2DOljGYKzY9NgSYKVzuKRUKuQEEqetTQ== X-Received: by 2002:a50:cd16:0:b0:553:b3ee:5840 with SMTP id z22-20020a50cd16000000b00553b3ee5840mr1255409edi.79.1703296315970; Fri, 22 Dec 2023 17:51:55 -0800 (PST) Received: from ukaszb-l.semihalf.net (alfa56.extreme-net.one.pl. [213.77.89.56]) by smtp.gmail.com with ESMTPSA id h2-20020a0564020e8200b005532a337d51sm3288494eda.44.2023.12.22.17.51.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 17:51:55 -0800 (PST) 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 , Simon Ser , John Ogness , Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v3 04/22] dyndbg: add 2 trace-events: prdbg, devdbg Date: Sat, 23 Dec 2023 02:51:13 +0100 Message-ID: <20231223015131.2836090-5-lb@semihalf.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com> References: <20231223015131.2836090-1-lb@semihalf.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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 save a debug message and use its length for processing. They also accept the _ddebug descriptor and dev structure so they can be used to access the whole callsite record in the future: 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 Signed-off-by: =C5=81ukasz Bartosik --- MAINTAINERS | 1 + include/trace/events/dyndbg.h | 63 ++++++++++++++++++++++++++++++ lib/dynamic_debug.c | 73 ++++++++++++++++++----------------- 3 files changed, 101 insertions(+), 36 deletions(-) create mode 100644 include/trace/events/dyndbg.h diff --git a/MAINTAINERS b/MAINTAINERS index 9104430e148e..e5bef24d6134 100644 --- a/MAINTAINERS +++ b/MAINTAINERS @@ -7391,6 +7391,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..647c30206a7d --- /dev/null +++ b/include/trace/events/dyndbg.h @@ -0,0 +1,63 @@ +/* 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 + +/* + * template for dynamic debug events + * captures debug log message and uses its length, it also + * accepts _ddebug and dev structures for future extensions + */ +DECLARE_EVENT_CLASS(dyndbg_template, + + TP_PROTO(const struct _ddebug *desc, const struct device *dev, + const char *msg, size_t len), + + TP_ARGS(desc, dev, msg, len), + + TP_STRUCT__entry( + __dynamic_array(char, s, len+1) + ), + + 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 && (msg[len-1] =3D=3D '\n')) + len -=3D 1; + + memcpy(__get_str(s), msg, len); + __get_str(s)[len] =3D 0; + ), + + TP_printk("%s", __get_str(s)) +); + +/* captures pr_debug() callsites */ +DEFINE_EVENT(dyndbg_template, prdbg, + + TP_PROTO(const struct _ddebug *desc, const struct device *dev, + const char *msg, size_t len), + + TP_ARGS(desc, dev, msg, len) +); + +/* captures dev_dbg() callsites */ +DEFINE_EVENT(dyndbg_template, devdbg, + + TP_PROTO(const struct _ddebug *desc, const struct device *dev, + const char *msg, size_t len), + + TP_ARGS(desc, dev, msg, len) +); + +#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..fcc7c5631b53 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, NULL, 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.43.0.472.g3155946c3a-goog From nobody Sat Dec 27 05:11:20 2025 Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 23B6C53A6 for ; Sat, 23 Dec 2023 01:51:58 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=semihalf.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=semihalf.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=semihalf.com header.i=@semihalf.com header.b="FQp0vGLX" Received: by mail-ed1-f42.google.com with SMTP id 4fb4d7f45d1cf-5543aec7440so2124996a12.1 for ; Fri, 22 Dec 2023 17:51:58 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1703296317; x=1703901117; 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=/OrCC8hRkFVVFckIY/fWc4cxoRlnVDDBYGNc0w+EmnM=; b=FQp0vGLX21rjkCaUhT2tv/FXpn1PGPF7fhD4FyLhsgDipeL7YoiBfBN4z9UARhtTDp mwo0l90Ez2KFQVfN1Lhx7XI45Ohv8v6nGFExGFllRK+QKH/ok7HGaC9QDRgoDaLqbm0D 7l6Ae1mFdweqxjWMNOc8UQ0dJNURuLuvqcKmSWjIlrCENIb5dPoeEFvKoxVhqgh1k+lJ lq7X0MvPZAI1CBnugcDttntUQsgIY6xeGgmn8k+4HoLpsSsBdUg29/cLztqjXroOCpOk hvawkV24fqHYyF/QeKsPEIju9H669G6dmT2FLl72vFxJdhHnmf3ABLx/tTpkIK4Usb7Y RqxA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703296317; x=1703901117; 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=/OrCC8hRkFVVFckIY/fWc4cxoRlnVDDBYGNc0w+EmnM=; b=xG7joS06wRcDD2Y8R02rn4bQgBZtxl0/Z5IMuYa0ppQAuuPARWeYGvlmo/k1EdBNWF ifBWYw7sBmNBwgchGtxRDUQPh3eOFW35jwA0bwrt50WuF6DQMtkwFNnKvzlm5pPRMJu+ QDXPXGWq/OU0OSulpken8MKAGgD93DiMwZAIeHjai/gk8OVDqd0asyoR8Dhrkce8wnoY Ip0V/OchfznCbBrG6l8bltag4enuUIkXr6N6oyk1bqpHhgskENrpa+5p8TyvAXlwss1d lil2WAIs+n1KgxdlcCysTpsM4kPY5qHKjES64i/3gv0PyXuoLOToktHzxdZuOLLTHeKY +QxA== X-Gm-Message-State: AOJu0YxOv05AH1xA4mur3ntmtkwf0PxT1w6bMo5ZADq4KQjDtOmBOqj/ 58M03azBBs8rV0FncCWGayQpxZYiCZty X-Google-Smtp-Source: AGHT+IF2QJx0hpD1S0saCRTRXdekqadmMshBs22eLDhmipLzzf8AFH5U5Evqak6edD0ufaUBb1rCXQ== X-Received: by 2002:a50:f695:0:b0:554:730b:8809 with SMTP id d21-20020a50f695000000b00554730b8809mr632294edn.9.1703296317511; Fri, 22 Dec 2023 17:51:57 -0800 (PST) Received: from ukaszb-l.semihalf.net (alfa56.extreme-net.one.pl. [213.77.89.56]) by smtp.gmail.com with ESMTPSA id h2-20020a0564020e8200b005532a337d51sm3288494eda.44.2023.12.22.17.51.56 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 17:51:57 -0800 (PST) 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 , Simon Ser , John Ogness , Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v3 05/22] tracefs: add __get_str_strip_nl - RFC Date: Sat, 23 Dec 2023 02:51:14 +0100 Message-ID: <20231223015131.2836090-6-lb@semihalf.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com> References: <20231223015131.2836090-1-lb@semihalf.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable From: Jim Cromie This variant of __get_str() removes the trailing newline. It is for use by printk/debug-ish events which already have a trailing newline. It is here to support [1] 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 && (msg[len-1] =3D=3D '\n')) len -=3D 1; memcpy(__get_str(s), msg, len); __get_str(s)[len] =3D 0; ), That trim work could be avoided, *if* all pr_debug() callers are known to have no '\n' to strip. While that's 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. [1] https://lore.kernel.org/lkml/20200825153338.17061-1-vincent.whitchurch@= axis.com Cc: Cc: Vincent Whitchurch Cc: Cc: Cc: Cc: Cc: Simon Ser Cc: Sean Paul Signed-off-by: Jim Cromie Signed-off-by: =C5=81ukasz Bartosik --- include/trace/stages/stage3_trace_output.h | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/include/trace/stages/stage3_trace_output.h b/include/trace/sta= ges/stage3_trace_output.h index c1fb1355d309..283533a17e62 100644 --- a/include/trace/stages/stage3_trace_output.h +++ b/include/trace/stages/stage3_trace_output.h @@ -19,6 +19,19 @@ #undef __get_str #define __get_str(field) ((char *)__get_dynamic_array(field)) =20 +#undef __get_str_strip_nl +#define __get_str_strip_nl(field) \ + ({ \ + char *s =3D trace_seq_buffer_ptr(p); \ + size_t len; \ + trace_seq_printf(p, "%s", __get_str(field)); \ + trace_seq_putc(p, '\0'); \ + len =3D strlen(s); \ + if (len && s[len-1] =3D=3D '\n') \ + s[len-1] =3D '\0'; \ + s; \ + }) + #undef __get_rel_dynamic_array #define __get_rel_dynamic_array(field) \ ((void *)__entry + \ --=20 2.43.0.472.g3155946c3a-goog From nobody Sat Dec 27 05:11:20 2025 Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BAAAB6FAF for ; Sat, 23 Dec 2023 01:52:00 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=semihalf.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=semihalf.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=semihalf.com header.i=@semihalf.com header.b="qtbaEdGp" Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-5534dcfdd61so4189693a12.0 for ; Fri, 22 Dec 2023 17:52:00 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1703296319; x=1703901119; 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=r+qDtAuuE/Ai6yWJXrInbQAWXp9jwgctR3BIRp6oMQI=; b=qtbaEdGpD6elFnc8Y48FY7EjI+NZ1cDUmmUwg9YZs9URT2HlVHBM1V1YR/NGgIlhpl CKNROZEJkyqXqLrFVaipWJZE2WhJEp+jLdNcU31vSib5nKYUy2iIDn42SmpEfTPPojvL shGRE3U5lPUyof9Dob5nyuqp9qrRgeRtKG5bfsZxmMG+LSZE/ltj+tDjpyg3kMrCg2Qa 9XVZ8d8bywIrOKbATtfNy7h9amgLJZu1jkF3zo3EBouJKP5YEKRL0Gv4vG+y8UkoKSmb 7uYoxjltha6/TQpjxkVQ9pCHW3bBoCzMxA6A05RleTITyStHkKrcutcKgdlUVMDjjaJB hwfA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703296319; x=1703901119; 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=r+qDtAuuE/Ai6yWJXrInbQAWXp9jwgctR3BIRp6oMQI=; b=NAABxvQryIDyRZuyKLmXRY86xxUJIXrZhRJTgKeaq/1EK+xnucXg+1TRBxv1yjLLhf +fSuNjtGjnBgtBNaH3uLtAnavib7A8ujTfjErDijlT8AsipYJ9e/CSvMZbqeWdO9U64V 8HbNYh4nl86bKLDAZNYj28bIgvrds5abgYxR5PoHOzoUFghfXqywzfAemeTCQQIkaIyy qDQb9FHZ+SWtOt24NUfp1l0aFN0F5Bf4k5hu+9RaE3HMLSKnb97oezuzQefBQg2z/Inw ngazNxdPVy3fjeBrIdjjo1StIS9MUUxOIPu0e8txcPD9jsRc8N5JTpOIkmft/i0pwcli eabg== X-Gm-Message-State: AOJu0YyN4cW6v0QxJEHNhzCOX/Ib1ua+7OyjH1evnBA2/+xKmu02/VmD vrAv6W5fchbB03iWLQQo7mZNBSmu+za+ X-Google-Smtp-Source: AGHT+IE8MxD/3G8xipyOK61By3+qkgYrIaFla4GWRo33W+Upth8c1iox1UyiLQ/UF8K3QN6CJtjN/g== X-Received: by 2002:a50:9e0e:0:b0:554:32ec:eada with SMTP id z14-20020a509e0e000000b0055432eceadamr2007852ede.18.1703296319025; Fri, 22 Dec 2023 17:51:59 -0800 (PST) Received: from ukaszb-l.semihalf.net (alfa56.extreme-net.one.pl. [213.77.89.56]) by smtp.gmail.com with ESMTPSA id h2-20020a0564020e8200b005532a337d51sm3288494eda.44.2023.12.22.17.51.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 17:51:58 -0800 (PST) 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 , Simon Ser , John Ogness , Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v3 06/22] dyndbg: use __get_str_strip_nl in prdbg and devdbg Date: Sat, 23 Dec 2023 02:51:15 +0100 Message-ID: <20231223015131.2836090-7-lb@semihalf.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com> References: <20231223015131.2836090-1-lb@semihalf.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable From: Jim Cromie Recently added dyndbg events: prdbg, devdbg have code to strip the trailing newline, if it's there. Instead of removing the newline in TP_fast_assign use __get_str_strip_nl macro in TP_printk. Advantage of such an approach is that the removal is done on the read side (slow path). The change removes also passing of debug message length to prdbg and devdbg events. 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 Signed-off-by: =C5=81ukasz Bartosik --- include/trace/events/dyndbg.h | 27 +++++++++------------------ lib/dynamic_debug.c | 7 +++---- 2 files changed, 12 insertions(+), 22 deletions(-) diff --git a/include/trace/events/dyndbg.h b/include/trace/events/dyndbg.h index 647c30206a7d..ffd21480cd9d 100644 --- a/include/trace/events/dyndbg.h +++ b/include/trace/events/dyndbg.h @@ -15,46 +15,37 @@ DECLARE_EVENT_CLASS(dyndbg_template, =20 TP_PROTO(const struct _ddebug *desc, const struct device *dev, - const char *msg, size_t len), + const char *msg), =20 - TP_ARGS(desc, dev, msg, len), + TP_ARGS(desc, dev, msg), =20 TP_STRUCT__entry( - __dynamic_array(char, s, len+1) + __string(s, msg) ), =20 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 && (msg[len-1] =3D=3D '\n')) - len -=3D 1; - - memcpy(__get_str(s), msg, len); - __get_str(s)[len] =3D 0; + __assign_str(s, msg); ), =20 - TP_printk("%s", __get_str(s)) + TP_printk("%s", __get_str_strip_nl(s)) ); =20 /* captures pr_debug() callsites */ DEFINE_EVENT(dyndbg_template, prdbg, =20 TP_PROTO(const struct _ddebug *desc, const struct device *dev, - const char *msg, size_t len), + const char *msg), =20 - TP_ARGS(desc, dev, msg, len) + TP_ARGS(desc, dev, msg) ); =20 /* captures dev_dbg() callsites */ DEFINE_EVENT(dyndbg_template, devdbg, =20 TP_PROTO(const struct _ddebug *desc, const struct device *dev, - const char *msg, size_t len), + const char *msg), =20 - TP_ARGS(desc, dev, msg, len) + TP_ARGS(desc, dev, msg) ); =20 #endif /* _TRACE_DYNDBG_H */ diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index fcc7c5631b53..9682277f3909 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -886,7 +886,6 @@ static void ddebug_trace(struct _ddebug *desc, const st= ruct device *dev, { struct ddebug_trace_buf *buf; int bufidx; - int len; =20 preempt_disable_notrace(); =20 @@ -900,12 +899,12 @@ static void ddebug_trace(struct _ddebug *desc, const = struct device *dev, =20 buf =3D this_cpu_ptr(ddebug_trace_bufs.bufs) + bufidx; =20 - len =3D vscnprintf(buf->buf, sizeof(buf->buf), fmt, args); + vscnprintf(buf->buf, sizeof(buf->buf), fmt, args); =20 if (!dev) - trace_prdbg(desc, NULL, buf->buf, len); + trace_prdbg(desc, NULL, buf->buf); else - trace_devdbg(desc, dev, buf->buf, len); + trace_devdbg(desc, dev, buf->buf); =20 out: /* As above. */ --=20 2.43.0.472.g3155946c3a-goog From nobody Sat Dec 27 05:11:20 2025 Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 29DB28F75 for ; Sat, 23 Dec 2023 01:52:02 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=semihalf.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=semihalf.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=semihalf.com header.i=@semihalf.com header.b="hzwx6GSn" Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-54cb4fa667bso2895309a12.3 for ; Fri, 22 Dec 2023 17:52:01 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1703296320; x=1703901120; 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=WRKKsUePcasMLb/l6ExZubEPezutMAFeV/7I4bHXVe4=; b=hzwx6GSnDb3l3B2zAWlJRrBbfBMcO5oKZXyFvIvdUxX9VLkVcSOsxj9FcAIKYw0Lou IAthWTKTCh/R5l0jVGx2tw/90ey9XKsTrDKGYcBRyHx3cnFfggEh+VWVeNlZRKt1lN5Q tRYB1CtGKVroF8n3aZyrESx6mDa6HPIdtVO+cKjV7dTU5HrAEe1CStTdnLhYQKYsf2ps kIhZ6/0olbEnXWwEw1b5gFKVCELO+KLUwRKoJjSuQu0gbssIwkvqWUQGTBVTaKxq6Q92 GAal0Dhgr1F9qYpEaSnmIl8MU0fAE4UWbC4Ds5lybS2KeevHz0Zq1O4piSetuO6hKpT8 tSvQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703296320; x=1703901120; 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=WRKKsUePcasMLb/l6ExZubEPezutMAFeV/7I4bHXVe4=; b=MIMCj6JLDGxypfFVva7R5eLQllvAvDGd8WPJ07QGIVjKJxrWaClpgUQchujlcHBVVy JwTJ4fBukwKAQ4ALXk6jus77Z36r/GSF34RP4boCskfojQ+o4SqskPv7awzJj/yPpwNZ H8wALgx/zs6eybrz46z9i9/enO8K7xTlH/XtHsX7OSiilJffWP6GMQdasKYosZ/uWFrK DxPaiePAosA/SCZ7Zsemw6B5H55mMF3jnkjCa3ePgN98MV22jfC5FfOBMb+4ep/p8r3T qNGiguQ6pF6wzO+36EQa8+1+iVATp0q6C/+DyG6ENzqV5BT5gFsq86a90pCTY5Kduhvx oCAg== X-Gm-Message-State: AOJu0Yyw2rGWyFbqV+8Vhf/cs3QoxKOn0BUfBzgH+Y16R+inILGQAk4Z HaURD0Hw8vTID+56YX0HtgBAa/hj0TCVLC2QribZCxAQulKq X-Google-Smtp-Source: AGHT+IEleLe52ad6kti9LjGw4HpH00R+soDwR2zAhzLrvXQGx9wCYbtPXNqRrtGEkfOFGXV3LqEWzQ== X-Received: by 2002:a50:8e1d:0:b0:553:b4a4:5850 with SMTP id 29-20020a508e1d000000b00553b4a45850mr1046300edw.50.1703296320644; Fri, 22 Dec 2023 17:52:00 -0800 (PST) Received: from ukaszb-l.semihalf.net (alfa56.extreme-net.one.pl. [213.77.89.56]) by smtp.gmail.com with ESMTPSA id h2-20020a0564020e8200b005532a337d51sm3288494eda.44.2023.12.22.17.51.59 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 17:52:00 -0800 (PST) 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 , Simon Ser , John Ogness , Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v3 07/22] dyndbg: repack _ddebug structure Date: Sat, 23 Dec 2023 02:51:16 +0100 Message-ID: <20231223015131.2836090-8-lb@semihalf.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com> References: <20231223015131.2836090-1-lb@semihalf.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jim Cromie Move the JUMP_LABEL to the top of the struct, since they're 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.43.0.472.g3155946c3a-goog From nobody Sat Dec 27 05:11:20 2025 Received: from mail-lj1-f171.google.com (mail-lj1-f171.google.com [209.85.208.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A8E2CCA58 for ; Sat, 23 Dec 2023 01:52:04 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=semihalf.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=semihalf.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=semihalf.com header.i=@semihalf.com header.b="o3tZvkzV" Received: by mail-lj1-f171.google.com with SMTP id 38308e7fff4ca-2cc794df8aaso27687931fa.0 for ; Fri, 22 Dec 2023 17:52:04 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1703296322; x=1703901122; 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=NgjIg6X8jjHCdfelkpRM2sipyaIHb+VRBFfUGoyNfPU=; b=o3tZvkzVHAbGTUBu2mWg9IHRMf6gQoJLR+BzEi6vHNbuEDLZpvxtNmzSR/oBWmj1DM H4V+YaPu9YlLQ4R9+PlxpS+w1zVwDKlBAoukDZCNsNZ4HGFIbt8PeGupKXZP2/SluVVv j+2AVUDptwq7GtyiCeQ/ZlbQJdV8WvNfPvhDwxZOo8MndZ6zgF+/oFLxlz2UhCL0Cbsh plRyBRDbNIy6IwOCk1vbDMz+adk2oxfGosZzKoPv0QLGMRMW34Bv0CuaG6yBLlKuhgv4 Ob9aSnzkpNbyzztrQz3+gVz1qJCGJAIQ2aajbnQ7XGQg0uO1oAt6MBdi7XqCIV5ICICa 4Olg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703296322; x=1703901122; 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=NgjIg6X8jjHCdfelkpRM2sipyaIHb+VRBFfUGoyNfPU=; b=rVMUjtse6NWAyr5TFDYVMBUJisKvpumauKFLYQ2TqM67iznmNkxyH/WO9c5H8kaWyp +AxskSxhkD3hWvCRi14gAAkQTZMcDZv9sTU0KqO+WfrmO8S12IyXrx8WiGnjnke6IVCu ZVDINGeSJFpHMjZcsiLwFdwlwlAOYx5SbAMDNIg2RzLdpQ9EGeE8GcI/8ZjGSsBMGrxf h0w9LotOf4wuCF4qLFf0gPpPutfw0IJWliy6ACUoLi+6Cg3Ly/EWHqQxlgXT8PZPXlwq 662MaijCjDGveWmXLXy6Yhzf9D44bNRhCmyoGT3/umZi5TRU6iTsGQz3MVG9C4pOWK/+ glMA== X-Gm-Message-State: AOJu0YxWANgMZzQCPNRhoAuad3FMJ5wS0M0SUsO1X5PIVNDINxLBFLND h7L1YzIehSyrmWhDyURmjie/GtTSRfW4 X-Google-Smtp-Source: AGHT+IF5u1BZXakcVLDEqYV9x3N8L7jNB/TMr6/1GnBFHrRoKKpXTqVt3uD4Bjf6yqvcBuLzjUXw+g== X-Received: by 2002:a2e:80ca:0:b0:2cc:9279:3516 with SMTP id r10-20020a2e80ca000000b002cc92793516mr1048541ljg.32.1703296322319; Fri, 22 Dec 2023 17:52:02 -0800 (PST) Received: from ukaszb-l.semihalf.net (alfa56.extreme-net.one.pl. [213.77.89.56]) by smtp.gmail.com with ESMTPSA id h2-20020a0564020e8200b005532a337d51sm3288494eda.44.2023.12.22.17.52.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 17:52:01 -0800 (PST) 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 , Simon Ser , John Ogness , Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v3 08/22] dyndbg: move flags field to a new structure Date: Sat, 23 Dec 2023 02:51:17 +0100 Message-ID: <20231223015131.2836090-9-lb@semihalf.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com> References: <20231223015131.2836090-1-lb@semihalf.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable 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 | 13 +++++++---- lib/dynamic_debug.c | 44 ++++++++++++++++++++++------------- 2 files changed, 37 insertions(+), 20 deletions(-) diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index b9237e4ecd1b..a551b2967cb8 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 \ }; \ @@ -202,10 +207,10 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor, =20 #ifdef DEBUG #define DYNAMIC_DEBUG_BRANCH(descriptor) \ - likely(descriptor.flags & _DPRINTK_FLAGS_ENABLED) + likely(descriptor.ctrl.flags & _DPRINTK_FLAGS_ENABLED) #else #define DYNAMIC_DEBUG_BRANCH(descriptor) \ - unlikely(descriptor.flags & _DPRINTK_FLAGS_ENABLED) + unlikely(descriptor.ctrl.flags & _DPRINTK_FLAGS_ENABLED) #endif =20 #endif /* CONFIG_JUMP_LABEL */ diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 9682277f3909..f47cb76e0e3d 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; } @@ -916,7 +927,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); @@ -928,7 +940,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); @@ -942,7 +954,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); @@ -950,7 +962,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); @@ -1246,7 +1258,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.43.0.472.g3155946c3a-goog From nobody Sat Dec 27 05:11:20 2025 Received: from mail-ed1-f42.google.com (mail-ed1-f42.google.com [209.85.208.42]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A119FD2E9 for ; Sat, 23 Dec 2023 01:52:07 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=semihalf.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=semihalf.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=semihalf.com header.i=@semihalf.com header.b="lRpY6c0f" Received: by mail-ed1-f42.google.com with SMTP id 4fb4d7f45d1cf-55322dbabf6so2522411a12.0 for ; Fri, 22 Dec 2023 17:52:07 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1703296326; x=1703901126; 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=57pqwApzCkOiEG2Ugf+nH1exjoE9SPHxB+wBjTutXCY=; b=lRpY6c0f+dXrhN5Tv21ZDX/TSvFBMIX2Ec4iBMZCCRAcGjwvcMmUK0doJJ+n6JE5uz H24XUSBlF9eXXL7dNwCD4yg0TKeVF7hmOy0VnGCjF9guSB4RkoruFyfuZZCGhW6fj759 fKwWkCL8CAs4V1p8V5VqMtJ47iEkMSKDpqDcbFK4xWpYGNOuARpz7U0fEBPINRvH39s+ 02/NDFV0bpDYjFP7mMjDksSMf4jc2n9nPx7kvWDMX1/Abzbany2N6It2kGhDFhWvzzee KS/XLrIdqBu/u6LS3jKLDGLHS9SViM1a8Be+eDtB3M/brIJYa/mq/31GpHe2lCtJJnlt dwpA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703296326; x=1703901126; 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=57pqwApzCkOiEG2Ugf+nH1exjoE9SPHxB+wBjTutXCY=; b=Qp1x4CcJ9jLifSJEUIzhfr6uMnffsg9wi7iflPLBw0tnsnObVBZ1VpzOck5p6Ile4G 8BdAIY0mXFm1LN8dDO14farNV+fB6bXNAr4W5Dudo8j3h5puJJ5Ik5dWPWrFFwpqmJhq HKwgLCPQvy60XiT9myhIATLdDEPzBvWJHs4oa+1L5K3IjgoS5vmQqWEjRJCs4TgI11SP aVaLLO8S3LNow79VxvbpLSCvIzH++55/n8ww2s5hXlZNNdGygpE0p2sy2xsGcqNje/hj T8f3nsNSByMre5DKn0cMR74qruzLCUXcSOuQefcQ+A89F+eUOFFPRdeYRh2V8Fhn8uc8 6NDQ== X-Gm-Message-State: AOJu0Yz+kViOnloVtT2vdCVS+AnXkRKS/FyOvU1syCmJ58AiHI037Rpk fwk6OKv7xhAU/t8HpPz5F8sVs26ZNoU1 X-Google-Smtp-Source: AGHT+IH03hdTLJyjncTLfZUFWQ1NJlJVPfy8D1iUUGd/a/xnIMBCViz/k97k92NIZuxTBIJo+ro0Dg== X-Received: by 2002:a50:cd95:0:b0:551:da9f:38c2 with SMTP id p21-20020a50cd95000000b00551da9f38c2mr1105775edi.71.1703296326031; Fri, 22 Dec 2023 17:52:06 -0800 (PST) Received: from ukaszb-l.semihalf.net (alfa56.extreme-net.one.pl. [213.77.89.56]) by smtp.gmail.com with ESMTPSA id h2-20020a0564020e8200b005532a337d51sm3288494eda.44.2023.12.22.17.52.02 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 17:52:05 -0800 (PST) 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 , Simon Ser , John Ogness , Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v3 09/22] dyndbg: add trace destination field to _ddebug Date: Sat, 23 Dec 2023 02:51:18 +0100 Message-ID: <20231223015131.2836090-10-lb@semihalf.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com> References: <20231223015131.2836090-1-lb@semihalf.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable The trace destination field is used to determine output of debug logs when +T is set. Setting trace_dst value to 0 enables output to prdbg and devdbg trace events. Setting trace_dst value to a value in range of [1..63] 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 a551b2967cb8..dc10c7535f13 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 enables output + * to prdbg and devdbg trace events. Setting trace_dst value to a + * value in range of [1..63] enables output to trace instance. + */ +#define TRACE_DST_BITS 6 + unsigned int trace_dst:TRACE_DST_BITS; +#define TRACE_DST_LAST (1 << TRACE_DST_BITS) + unsigned unused:18; } ctrl; } __attribute__((aligned(8))); =20 diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index f47cb76e0e3d..0dc9ec76b867 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.43.0.472.g3155946c3a-goog From nobody Sat Dec 27 05:11:20 2025 Received: from mail-ed1-f50.google.com (mail-ed1-f50.google.com [209.85.208.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D841ACA58 for ; Sat, 23 Dec 2023 01:52:09 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=semihalf.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=semihalf.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=semihalf.com header.i=@semihalf.com header.b="AnqYeeIU" Received: by mail-ed1-f50.google.com with SMTP id 4fb4d7f45d1cf-5534dcfdd61so4189751a12.0 for ; Fri, 22 Dec 2023 17:52:09 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1703296327; x=1703901127; 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=n2o9QWUmLsmLvKLWM0RR7VB6Xiaqd4YI7JC6zr82+Kw=; b=AnqYeeIUOnM+Q0jcIMVTs8efCgrE7FyjvKMuHj8M2fvOYEkZPhsGZgWUeub9Q4keem 1YSPIuX5rjeJ70GPqLLgoUDyzXK+tsGfzm0vFk7SoJkq7hwO2fWns9Lwz+4tkyVemcAE QroHcymdPU6fCgBMYEQdZhBxrcT0SahDy8l4z8CNVvkJeg1nwz3/EnR47lIc/ojeVg9I cCQBdRWoj2tJAmypkkKl+4gG6b4YrCKS6kCKLIA7rwAQTgYO9CSFoZwq+OagMfpl8BEC HIgVns3KdLtVyZSQ7ryo94AzG6Kcoj0gobocvFhOUnc3ZdODH+qUSJaNMR4lIsD43NBS YPJw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703296327; x=1703901127; 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=n2o9QWUmLsmLvKLWM0RR7VB6Xiaqd4YI7JC6zr82+Kw=; b=tLR89vyQbIi7A63YbjXKRXDIfxEgpndDZx72JR/ERts3unVk+c0hcInOHQqZzYC9N+ UzQsBdtq8jAI2PS59Uy5ZBKdfu4G+p/hjh1uUKTxAguXs03kv9cdrTjm+C7L9iYmtEJs qJN0ZC3crZIH3Bhxfvohi9/Doo5dCECd3/P/HjyfAw61b+ZNBU12lQ/Wo0IFdTKLDnzU bq6Cv19si5sw5/XRJLLd49ZTL8aVWEsqQXItTTrbSnaC0rW6Wco2AH3QR7rdG4n50Q7i +3Yn9Q3hkchAERALhIYafg2OdtGixi55FlTrrJrK8B4ky+EioNyGxK30o+e4nt4kndGm fbnQ== X-Gm-Message-State: AOJu0YxRpOScLZelclOaBIbNtC7dcJnTUrwffAWagvImZ0eUQAjPbdtt Dg4++e25j4BnP3OwvDT3Pq4mqGUCT5mX X-Google-Smtp-Source: AGHT+IF/IEi1FPdb8lQGnNOd/id6xI/QKz57n41JZHWM68qfCtK5pV2adnQyHwnZGkKbf7zsoRGzng== X-Received: by 2002:a50:d7dd:0:b0:553:39e3:879a with SMTP id m29-20020a50d7dd000000b0055339e3879amr2149324edj.41.1703296327595; Fri, 22 Dec 2023 17:52:07 -0800 (PST) Received: from ukaszb-l.semihalf.net (alfa56.extreme-net.one.pl. [213.77.89.56]) by smtp.gmail.com with ESMTPSA id h2-20020a0564020e8200b005532a337d51sm3288494eda.44.2023.12.22.17.52.06 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 17:52:07 -0800 (PST) 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 , Simon Ser , John Ogness , Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v3 10/22] dyndbg: add open and close commands for trace Date: Sat, 23 Dec 2023 02:51:19 +0100 Message-ID: <20231223015131.2836090-11-lb@semihalf.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com> References: <20231223015131.2836090-1-lb@semihalf.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Add open and close commands for opening and closing trace instances. The open command has to be mandatory followed by a trace instance name. If a trace instance already exists in /tracing/instances directory then the open command will reuse it otherwise a new trace instance with a name provided to the open will be created. Close command closes previously opened trace instance. The close will fail if a user tries to close non-existent trace instances or an instance which was not previously opened. For example the following command will open (create or reuse existing) trace instance located in /tracing/instances/usbcore: echo "open usbcore" > /dynamic_debug/control Signed-off-by: =C5=81ukasz Bartosik --- lib/Kconfig.debug | 2 + lib/dynamic_debug.c | 194 ++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 196 insertions(+) diff --git a/lib/Kconfig.debug b/lib/Kconfig.debug index 4405f81248fb..233132a05299 100644 --- a/lib/Kconfig.debug +++ b/lib/Kconfig.debug @@ -110,6 +110,7 @@ config DYNAMIC_DEBUG default n depends on PRINTK depends on (DEBUG_FS || PROC_FS) + depends on TRACING select DYNAMIC_DEBUG_CORE help =20 @@ -181,6 +182,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 0dc9ec76b867..dd4510ad124e 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 @@ -73,6 +74,27 @@ struct flag_settings { unsigned int mask; }; =20 +#define DD_OPEN_CMD "open" +#define DD_CLOSE_CMD "close" +#define DD_TR_EVENT "0" + +struct dd_private_tracebuf { + const char *name; + struct trace_array *arr; +}; + +/* + * Trace destination value 0 is reserved for writing + * debug logs to trace events (prdbg, devdbg), that + * is why buf[0] is not used and we traverse bitmap + * starting from bit 1 (bit 0 is also not used). + */ +struct dd_tracebuf_tbl_info { + struct dd_private_tracebuf buf[TRACE_DST_LAST]; + DECLARE_BITMAP(bmap, TRACE_DST_LAST); + int bmap_size; +}; + static DEFINE_MUTEX(ddebug_lock); static LIST_HEAD(ddebug_tables); static int verbose; @@ -80,6 +102,9 @@ 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 struct +dd_tracebuf_tbl_info trc_tbl =3D { .bmap_size =3D TRACE_DST_LAST }; + static inline struct dd_ctrl *get_ctrl(struct _ddebug *desc) { return &desc->ctrl; @@ -171,6 +196,145 @@ static void vpr_info_dq(const struct ddebug_query *qu= ery, const char *msg) query->first_lineno, query->last_lineno, query->class_string); } =20 +static bool is_dd_trace_cmd(const char *str) +{ + if (!strcmp(str, DD_OPEN_CMD) || !strcmp(str, DD_CLOSE_CMD)) + return true; + + return false; +} + +static bool dd_good_trace_name(const char *str) +{ + /* "0" is reserved for writing debug logs to trace events (prdbg, devdbg)= */ + if (!strcmp(str, DD_TR_EVENT)) + return false; + + /* we allow trace instance names to include ^\w+ and underscore */ + while (*str !=3D '\0') { + if (!isalnum(*str) && *str !=3D '_') + return false; + str++; + } + + return true; +} + +static int find_tr_instance(const char *name) +{ + int idx =3D 1; + + for_each_set_bit_from(idx, trc_tbl.bmap, trc_tbl.bmap_size) + if (!strcmp(trc_tbl.buf[idx].name, name)) + return idx; + + return -ENOENT; +} + +static int handle_trace_open_cmd(const char *arg) +{ + struct dd_private_tracebuf *buf; + int idx, ret =3D 0; + + mutex_lock(&ddebug_lock); + + /* bit 0 is not used, reserved for trace prdbg and devdbg events */ + idx =3D find_next_zero_bit(trc_tbl.bmap, trc_tbl.bmap_size, 1); + if (idx =3D=3D trc_tbl.bmap_size) { + ret =3D -ENOSPC; + goto end; + } + + if (!dd_good_trace_name(arg)) { + pr_err("invalid instance name:%s\n", arg); + ret =3D -EINVAL; + goto end; + } + + if (find_tr_instance(arg) >=3D 0) { + pr_err("instance is already opened name:%s\n", arg); + ret =3D -EEXIST; + goto end; + } + + buf =3D &trc_tbl.buf[idx]; + buf->name =3D kstrdup(arg, GFP_KERNEL); + if (!buf->name) { + ret =3D -ENOMEM; + goto end; + } + + buf->arr =3D trace_array_get_by_name(buf->name); + if (!buf->arr) { + pr_err("failed to get trace array name:%s", buf->name); + ret =3D -EINVAL; + goto end; + } + + ret =3D trace_array_init_printk(buf->arr); + if (ret) { + pr_err("failed to init trace array name:%s", buf->name); + trace_array_put(buf->arr); + trace_array_destroy(buf->arr); + goto end; + } + + set_bit(idx, trc_tbl.bmap); + v3pr_info("opened trace instance idx=3D%d, name=3D%s\n", idx, arg); +end: + mutex_unlock(&ddebug_lock); + return ret; +} + +static int handle_trace_close_cmd(const char *arg) +{ + struct dd_private_tracebuf *buf; + int idx, ret =3D 0; + + mutex_lock(&ddebug_lock); + + idx =3D find_tr_instance(arg); + if (idx < 0) { + ret =3D idx; + goto end; + } + + buf =3D &trc_tbl.buf[idx]; + + trace_array_put(buf->arr); + /* + * don't destroy trace instance but let user do it manually + * with rmdir command at a convenient time later, if it is + * destroyed here all debug logs will be lost + * + * trace_array_destroy(inst->arr); + */ + buf->arr =3D NULL; + + kfree(buf->name); + buf->name =3D NULL; + + clear_bit(idx, trc_tbl.bmap); + v3pr_info("closed trace instance idx=3D%d, name=3D%s\n", idx, arg); +end: + mutex_unlock(&ddebug_lock); + return ret; +} + +static int ddebug_parse_cmd(char *words[], int nwords) +{ + if (nwords !=3D 1) + return -EINVAL; + + if (!strcmp(words[0], DD_OPEN_CMD)) + return handle_trace_open_cmd(words[1]); + if (!strcmp(words[0], DD_CLOSE_CMD)) + return handle_trace_close_cmd(words[1]); + + pr_err("invalid command %s\n", words[0]); + return -EINVAL; +} + static struct ddebug_class_map *ddebug_find_valid_class(struct ddebug_tabl= e const *dt, const char *class_string, int *class_id) { @@ -567,6 +731,11 @@ static int ddebug_exec_query(char *query_string, const= char *modname) pr_err("tokenize failed\n"); return -EINVAL; } + + /* check for open, close commands */ + if (is_dd_trace_cmd(words[0])) + return ddebug_parse_cmd(words, nwords-1); + /* check flags 1st (last arg) so query is pairs of spec,val */ if (ddebug_parse_flags(words[nwords-1], &modifiers)) { pr_err("flags parse failed\n"); @@ -1191,6 +1360,20 @@ static struct _ddebug *ddebug_iter_next(struct ddebu= g_iter *iter) return &iter->table->ddebugs[iter->idx]; } =20 +/* + * Check if the iterator points to the last _ddebug object + * to traverse. + */ +static bool ddebug_iter_is_last(struct ddebug_iter *iter) +{ + if (iter->table =3D=3D NULL) + return false; + if (iter->idx-1 < 0 && + list_is_last(&iter->table->link, &ddebug_tables)) + return true; + return false; +} + /* * Seq_ops start method. Called at the start of every * read() call from userspace. Takes the ddebug_lock and @@ -1281,6 +1464,17 @@ static int ddebug_proc_show(struct seq_file *m, void= *p) } seq_puts(m, "\n"); =20 + if (ddebug_iter_is_last(iter) && + !bitmap_empty(trc_tbl.bmap, trc_tbl.bmap_size)) { + int idx =3D 1; + + seq_puts(m, "\n"); + seq_puts(m, "#: Opened trace instances:"); + for_each_set_bit_from(idx, trc_tbl.bmap, trc_tbl.bmap_size) + seq_printf(m, " %s", trc_tbl.buf[idx].name); + seq_puts(m, "\n"); + } + return 0; } =20 --=20 2.43.0.472.g3155946c3a-goog From nobody Sat Dec 27 05:11:20 2025 Received: from mail-ed1-f53.google.com (mail-ed1-f53.google.com [209.85.208.53]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id CE742D314 for ; Sat, 23 Dec 2023 01:52:10 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=semihalf.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=semihalf.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=semihalf.com header.i=@semihalf.com header.b="E7pFhVrk" Received: by mail-ed1-f53.google.com with SMTP id 4fb4d7f45d1cf-55322dbabf6so2522428a12.0 for ; Fri, 22 Dec 2023 17:52:10 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1703296329; x=1703901129; 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=Un40+94h5VRdMg5VfaQgh05to2gMxKh526dXQbalmzg=; b=E7pFhVrkyu9eIMpbSSlk2mTtmqTh3/3/SSb9v9+MVWNxZ6YTROuwHn4DmeEiB1G5dz m8ly8rkIdgSYwZBNcJoSWI3JzL5S4qXWiXi4rtMcuRoNVsQbTG3+vjY1fLvwLQYcllG+ drXm9Tev2wU5D/nwQ4Bh7sD3j7vyXVD5DyX9TANggARtJVl0kKoMAYJwuzKD0VyVbp1Y 6K5/SUT1b7UKfPm4FbY5zJkd7oWMtNqbQ+UbC2DunLCV3Y64igdUtu/hXeDtmmXQPZRt cSxEjrRpX7J8ry2G7SsNHOnA/wl4tS/rzd05LAN3nF9jcDp2Q/4igvuP5B4KQdSipvBH rmgA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703296329; x=1703901129; 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=Un40+94h5VRdMg5VfaQgh05to2gMxKh526dXQbalmzg=; b=gtmOKvDEsv157apnjvPsjXOtS4VmAghuw1WTJqxjs3bxWmujJ8eG16uXi5yjFESaSL w76CxtMjkHeJT5bzykNnzzL/U6vmcwXPwUH/IOUxybGlm/LMb1WYh72EEoElDiFIqXH9 sY2IVk69uK9Pqv5TBE5FQC68dvv4RQU94ypfu1vJwrzw3PcTBm27mw4Qofv+r24uSDiJ b7hpANL8mElGmptZEM2C+4XuTAg/Tu6E4h9Xm8Yb85Qv7zHfLmz3rKerw8msFRuk9nSq M+W48SJGZJdezm8SmpLBVnryHSczf4dB+oX81Ihq4Hhn8rdbqwCALKXSfoZ+g7As5B12 vWSw== X-Gm-Message-State: AOJu0Yxo1juWsWfiX1yn4xJg0urXqganCgOmEpcTXurrKED6GSW2N56I fhm5ugw7Tzw8M5NgD1em1ySc+UeDj3Bh X-Google-Smtp-Source: AGHT+IE9n1NheClx7UD5YVGfJ+ZQ+Eu2FCoQOTC1SlSd6haTVb072VksFHZ1rLN51WIORMPRcEdrww== X-Received: by 2002:a50:9992:0:b0:553:6348:7360 with SMTP id m18-20020a509992000000b0055363487360mr1173719edb.4.1703296329211; Fri, 22 Dec 2023 17:52:09 -0800 (PST) Received: from ukaszb-l.semihalf.net (alfa56.extreme-net.one.pl. [213.77.89.56]) by smtp.gmail.com with ESMTPSA id h2-20020a0564020e8200b005532a337d51sm3288494eda.44.2023.12.22.17.52.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 17:52:08 -0800 (PST) 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 , Simon Ser , John Ogness , Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v3 11/22] dyndbg: don't close trace instance when in use Date: Sat, 23 Dec 2023 02:51:20 +0100 Message-ID: <20231223015131.2836090-12-lb@semihalf.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com> References: <20231223015131.2836090-1-lb@semihalf.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Don't allow trace instance to be closed when it is still being used by at least one callsite. Signed-off-by: =C5=81ukasz Bartosik --- lib/dynamic_debug.c | 38 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 38 insertions(+) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index dd4510ad124e..59682729ed3a 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -81,6 +81,7 @@ struct flag_settings { struct dd_private_tracebuf { const char *name; struct trace_array *arr; + int use_cnt; }; =20 /* @@ -279,6 +280,7 @@ static int handle_trace_open_cmd(const char *arg) goto end; } =20 + buf->use_cnt =3D 0; set_bit(idx, trc_tbl.bmap); v3pr_info("opened trace instance idx=3D%d, name=3D%s\n", idx, arg); end: @@ -301,6 +303,14 @@ static int handle_trace_close_cmd(const char *arg) =20 buf =3D &trc_tbl.buf[idx]; =20 + WARN_ON(buf->use_cnt < 0); + if (buf->use_cnt) { + pr_err("trace instance is being used name=3D%s, use_cnt=3D%d\n", + buf->name, buf->use_cnt); + ret =3D -EBUSY; + goto end; + } + trace_array_put(buf->arr); /* * don't destroy trace instance but let user do it manually @@ -321,6 +331,24 @@ static int handle_trace_close_cmd(const char *arg) return ret; } =20 +static +void update_tr_dst(const struct _ddebug *desc, const struct dd_ctrl *nctrl) +{ + int oflags =3D get_flags(desc), odst =3D get_trace_dst(desc); + int nflags =3D nctrl->flags, ndst =3D nctrl->trace_dst; + + if (oflags & _DPRINTK_FLAGS_TRACE && + nflags & _DPRINTK_FLAGS_TRACE && + odst =3D=3D ndst) + return; + + if (odst && (oflags & _DPRINTK_FLAGS_TRACE)) + trc_tbl.buf[odst].use_cnt--; + + if (ndst && (nflags & _DPRINTK_FLAGS_TRACE)) + trc_tbl.buf[ndst].use_cnt++; +} + static int ddebug_parse_cmd(char *words[], int nwords) { if (nwords !=3D 1) @@ -447,6 +475,7 @@ static int ddebug_change(const struct ddebug_query *que= ry, dt->mod_name, dp->function, ddebug_describe_flags(get_flags(dp), &fbuf), ddebug_describe_flags(nctrl.flags, &nbuf)); + update_tr_dst(dp, &nctrl); set_ctrl(dp, &nctrl); } } @@ -1628,6 +1657,15 @@ int ddebug_dyndbg_module_param_cb(char *param, char = *val, const char *module) =20 static void ddebug_table_free(struct ddebug_table *dt) { + + int dst, i; + + for (i =3D 0; i < dt->num_ddebugs; i++) { + dst =3D get_trace_dst(&dt->ddebugs[i]); + if (dst && (get_flags(&dt->ddebugs[i]) & _DPRINTK_FLAGS_TRACE)) + trc_tbl.buf[dst].use_cnt--; + } + list_del_init(&dt->link); kfree(dt); } --=20 2.43.0.472.g3155946c3a-goog From nobody Sat Dec 27 05:11:20 2025 Received: from mail-ed1-f49.google.com (mail-ed1-f49.google.com [209.85.208.49]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B12A1DDC5 for ; Sat, 23 Dec 2023 01:52:12 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=semihalf.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=semihalf.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=semihalf.com header.i=@semihalf.com header.b="rYDqcOgs" Received: by mail-ed1-f49.google.com with SMTP id 4fb4d7f45d1cf-553a65b6ad4so2935961a12.0 for ; Fri, 22 Dec 2023 17:52:12 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1703296331; x=1703901131; 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=cdlqWnqu9HEJF4lwlqaoI5sQ4NORb79u2q0+TdaOEs0=; b=rYDqcOgsRmzpEu5dKICHgLl8VPhVmtX8hieuml5eNjtFMUsjrcqYUlbtYO4GtJzF3G wEQnXet+8R5D4plQugGTsygSne1EzxdEHDEpuQ4ZD6TQ9zSc1Uzw2cvdAXfgyRRPgU0S IVuxQ7jgJYXGs74sDzKm2BgYLkybMzoMVXNS+xDsb/NghAo5Gt6ieIUSlcSgpmyNEGwO i+xgRgRV32rlqOLH4Pw9AFdvYdHql/6u0IIlJIxftbc4CFnwB5MvQI5RlxlXcwJUcW16 f7oIVOKhB67aHzKZoDZ1wZwu3U3GU4NQ3ZqaKqiSDf9PCowo+keOXRQrQtdZHnSZtzE5 TRNA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703296331; x=1703901131; 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=cdlqWnqu9HEJF4lwlqaoI5sQ4NORb79u2q0+TdaOEs0=; b=IabxqRL0fCRZHFydlV8mCnljsTF168+ZtvzAHw5C8b90r8Yj5xl9chr+x2NEf3Vnf+ M99e9/IZ9UUX2pwbm7XE4x5eFdDfWA1rwi1VTLeUxnq7c5BggsYTM3pUpkiVHLvabEB7 zn7muKdQJqmmGNYKc85Mws36X7ivNLgAEjuFwbQr2eL+I4pGkwYvX55DT2cqfHzdYznO 12FzteJqglY6GFecsn/1X7JyZsuDhfGiAHcwZ3Hu3q8Xviv0XM6so5gvcHf3x0wsUDM+ Bua7MiYmX+onQ6PbCk64zcQ4+CfUlwJ29+qFqby4Y+XE0TB9Fc4U2DGOmgeZkPF2YR0c r/mA== X-Gm-Message-State: AOJu0Yxy2T+BpYTWjReFSVi/M2PSfiyPSIqy/ttIg6kUSwa9d6YrsCV2 fdsg3UfTr9O46nAZWIXcKpoqc6HVYdcY X-Google-Smtp-Source: AGHT+IGYUfC9BV1Iv3mCxfW9RC983wRGDmYmzGV2y5ENG/M56vKgRJNTiSeOeJwsuKyaJWd3viuM0w== X-Received: by 2002:a50:d4ce:0:b0:54c:4837:a63f with SMTP id e14-20020a50d4ce000000b0054c4837a63fmr1227919edj.44.1703296330900; Fri, 22 Dec 2023 17:52:10 -0800 (PST) Received: from ukaszb-l.semihalf.net (alfa56.extreme-net.one.pl. [213.77.89.56]) by smtp.gmail.com with ESMTPSA id h2-20020a0564020e8200b005532a337d51sm3288494eda.44.2023.12.22.17.52.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 17:52:10 -0800 (PST) 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 , Simon Ser , John Ogness , Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v3 12/22] dyndbg: add processing of T(race) flag argument Date: Sat, 23 Dec 2023 02:51:21 +0100 Message-ID: <20231223015131.2836090-13-lb@semihalf.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com> References: <20231223015131.2836090-1-lb@semihalf.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Add processing of argument provided to T(race) flag. The string argument determines destination of debug logs: "0" - debug logs will be written to prdbg and devdbg trace events name - debug logs will be written to trace instance pointed by name, trace instance name has to be previously opened with open command A user can provide trace destination name by following T flag with ":" and trace destination name, for example: echo "module thunderbolt =3DpT:tbt" > /dynamic_debug/control echo "module thunderbolt =3DlT:tbt.p" > /dynamic_debug/control When T flag with argument is followed by other flag then the next flag has to be preceded with ".". Use of "." as a separator between flags allows a later patch to treat ',' as a space, which mostly eliminates the need to quote query/rules. And this in turn avoids quoting hassles: modprobe test_dynamic_debug dyndbg=3Dclass,D2_CORE,+p It is particularly good for passing boot-args into test-scripts. vng -p 4 -v \ -a test_dynamic_debug.dyndbg=3Dclass,D2_CORE,+p Signed-off-by: =C5=81ukasz Bartosik Signed-off-by: Jim Cromie --- lib/dynamic_debug.c | 180 ++++++++++++++++++++++++++++++++++---------- 1 file changed, 141 insertions(+), 39 deletions(-) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 59682729ed3a..6c3b83bce18d 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -72,6 +72,7 @@ struct ddebug_iter { struct flag_settings { unsigned int flags; unsigned int mask; + unsigned int trace_dst; }; =20 #define DD_OPEN_CMD "open" @@ -85,10 +86,14 @@ struct dd_private_tracebuf { }; =20 /* - * Trace destination value 0 is reserved for writing - * debug logs to trace events (prdbg, devdbg), that - * is why buf[0] is not used and we traverse bitmap - * starting from bit 1 (bit 0 is also not used). + * When trace is enabled (T flag is set) and trace destination field + * value is in range [1..63] then debug logs will be written to trace + * instance whose name is stored in buf[trace destination].name, e.g. + * when trace destination value is 2 and buf[2].name is set to tbt then + * debug logs will be written to /tracing/instances/tbt. + * On the other hand trace destination value 0 is reserved for writing + * debug logs to trace events (prdbg, devdbg), that is why buf[0] is not + * used and we traverse bitmap starting from bit 1 (bit 0 is also not used= ). */ struct dd_tracebuf_tbl_info { struct dd_private_tracebuf buf[TRACE_DST_LAST]; @@ -126,6 +131,73 @@ static inline unsigned int get_trace_dst(const struct = _ddebug *desc) return desc->ctrl.trace_dst; } =20 +static int find_tr_instance(const char *name) +{ + int idx =3D 1; + + for_each_set_bit_from(idx, trc_tbl.bmap, trc_tbl.bmap_size) + if (!strcmp(trc_tbl.buf[idx].name, name)) + return idx; + + return -ENOENT; +} + +static const +char *read_T_args(const char *str, struct flag_settings *modifiers) +{ + int len, idx =3D 0; + char *end; + + 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; + *end =3D '\0'; + } else + len =3D strlen(str); + len -=3D 1; + + /* destination trace events */ + if (!strcmp(str, DD_TR_EVENT)) + goto end; + + idx =3D find_tr_instance(str); + if (idx < 0) + return NULL; +end: + modifiers->trace_dst =3D idx; + return end ? end : str + len; +} + +/* + * Maximum number of characters which are being displayed when + * printing trace instance name, longer names are truncated + */ +#define FLAG_T_ARG_LEN 24 + +static char *show_T_args(struct dd_ctrl *ctrl, char *p) +{ + const char *str; + int n; + + str =3D !ctrl->trace_dst ? DD_TR_EVENT : + trc_tbl.buf[ctrl->trace_dst].name; + + n =3D snprintf(p, FLAG_T_ARG_LEN, ":%s", str); + if (n >=3D FLAG_T_ARG_LEN) { + strscpy(&p[FLAG_T_ARG_LEN-4], "...", 4); + n =3D FLAG_T_ARG_LEN - 1; + } + + return n < 0 ? p : p + n; +} + /* Return the path relative to source root */ static inline const char *trim_prefix(const char *path) { @@ -137,9 +209,18 @@ 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 *); + +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' }, @@ -148,22 +229,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_ARG_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, ...) \ @@ -221,17 +310,6 @@ static bool dd_good_trace_name(const char *str) return true; } =20 -static int find_tr_instance(const char *name) -{ - int idx =3D 1; - - for_each_set_bit_from(idx, trc_tbl.bmap, trc_tbl.bmap_size) - if (!strcmp(trc_tbl.buf[idx].name, name)) - return idx; - - return -ENOENT; -} - static int handle_trace_open_cmd(const char *arg) { struct dd_private_tracebuf *buf; @@ -385,7 +463,7 @@ static struct ddebug_class_map *ddebug_find_valid_class= (struct ddebug_table cons * Search the tables for _ddebug's which match the given `query' and * apply the `flags' and `mask' to them. Returns number of matching * callsites, normally the same as number of changes. If verbose, - * logs the changes. Takes ddebug_lock. + * logs the changes. */ static int ddebug_change(const struct ddebug_query *query, struct flag_settings *modifiers) @@ -393,13 +471,12 @@ static int ddebug_change(const struct ddebug_query *q= uery, int i; struct ddebug_table *dt; unsigned int nfound =3D 0; + struct ctrlbuf cbuf, nbuf; struct dd_ctrl nctrl =3D {0}; - struct flagsbuf fbuf, nbuf; struct ddebug_class_map *map =3D NULL; int __outvar valid_class; =20 /* search for matching ddebugs */ - mutex_lock(&ddebug_lock); list_for_each_entry(dt, &ddebug_tables, link) { =20 /* match against the module name */ @@ -460,7 +537,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) { @@ -473,13 +551,12 @@ static int ddebug_change(const struct ddebug_query *q= uery, 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)); update_tr_dst(dp, &nctrl); set_ctrl(dp, &nctrl); } } - mutex_unlock(&ddebug_lock); =20 if (!nfound && verbose) pr_info("no matches for query\n"); @@ -700,6 +777,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) { @@ -718,6 +796,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; } } @@ -726,7 +810,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) { @@ -765,20 +849,38 @@ static int ddebug_exec_query(char *query_string, cons= t char *modname) if (is_dd_trace_cmd(words[0])) return ddebug_parse_cmd(words, nwords-1); =20 - /* check flags 1st (last arg) so query is pairs of spec,val */ - if (ddebug_parse_flags(words[nwords-1], &modifiers)) { - pr_err("flags parse failed\n"); - return -EINVAL; - } if (ddebug_parse_query(words, nwords-1, &query, modname)) { pr_err("query parse failed\n"); return -EINVAL; } + + /* + * Both ddebug_parse_flags and ddebug_change have to be run + * with locking because ddebug_parse_flags->read_T_args verifies + * if a requested trace instance is opened. Next ddebug_change + * sets the requested trace instance as output for debug logs of + * callsite(s) which matched a query. Because ddebug_proc_write + * function can be called concurrently then without locking we + * could for example run into a scenario where ddebug_change uses + * a trace instance which is already closed. + */ + mutex_lock(&ddebug_lock); + + /* check flags 1st (last arg) so query is pairs of spec,val */ + if (ddebug_parse_flags(words[nwords-1], &modifiers)) { + pr_err("flags parse failed\n"); + goto err; + } + /* actually go and implement the change */ nfound =3D ddebug_change(&query, &modifiers); - vpr_info_dq(&query, nfound ? "applied" : "no-match"); =20 + mutex_unlock(&ddebug_lock); + vpr_info_dq(&query, nfound ? "applied" : "no-match"); return nfound; +err: + mutex_unlock(&ddebug_lock); + return -EINVAL; } =20 /* handle multiple queries in query string, continue on error, return @@ -1468,7 +1570,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) { @@ -1480,7 +1582,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.43.0.472.g3155946c3a-goog From nobody Sat Dec 27 05:11:20 2025 Received: from mail-wr1-f50.google.com (mail-wr1-f50.google.com [209.85.221.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 22E54E56C for ; Sat, 23 Dec 2023 01:52:13 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=semihalf.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=semihalf.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=semihalf.com header.i=@semihalf.com header.b="EdB/o8uT" Received: by mail-wr1-f50.google.com with SMTP id ffacd0b85a97d-33674f60184so2293346f8f.1 for ; Fri, 22 Dec 2023 17:52:13 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1703296332; x=1703901132; 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=JWilt8xXopZLz3aWBvrS8u+uuqRM1/IhwYaiNrDNBL8=; b=EdB/o8uTMFdMXswuew9mjIXOXLUBt+iQPjCLyYX1yIm4injx5Lsnh5ULdmb7v7CGOw wWfbXH6EeAnB6NtvbqwnsGNTVnJpZkPAsASe19PPMWoXpYAp+MlIofT6952zVmlpZA6p azN7/2BQoV4wz7W5IdA5LGS2liLNRhGriHcSq7jkoBdJl6UbkiYgCqYUSxffpTUoJrH+ Rk+E78o45LCS2tvBRr34Ls0vA52tLafkhRkk6IUyem/LPwWAtjunn/sjsJ1gffgDnBSn I75dbEsnFGmxeSB1xRyAZ+6TIB9TgAIwKTgUWrUohbsWSp6hZIAOELIAqPg31/hh+BZW ewHg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703296332; x=1703901132; 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=JWilt8xXopZLz3aWBvrS8u+uuqRM1/IhwYaiNrDNBL8=; b=PJvxh/K/jZY79NjNirf7jY9JiFk0g2jN1Bi7qBWs2gi1NFqB/edTzFe/KiSb1Z8qBp rmCnn/T0fnffuh7FFLO7vrh1Ezt1SMc0EAzeXhJVDpcat8pxbXxk/3aJw9+Ev2cpZCPa dleOouyJ1CkHZpkuultnTIA+u+O5RbL/1k1TZ1LArsORLkPfVOkuqyM5a5oHDILvJAXr kzP20IzQ+1T3VcjIgSvwKhxIcBy8fRbCqZiZMFhGpVaYrnscQnhScY3RtO1UhZp0noD2 9HhTcG6/ewZ6p2sOoyFQOs8XlrRx3ORpnw3NBZcOCiFgReQ4IY9WndAAIW3EtTvOrNwR aWkg== X-Gm-Message-State: AOJu0YwAffA8QEqnH7F7/c36pxS1dHzim4DfYw7MOcU6Qbc4IH0g9I1v EDtKJvUAEIy/Ibiy5JTiDetpZGe7VCjZ X-Google-Smtp-Source: AGHT+IE17AFKylC4vEQBQhSQfzkY3zey+tE/oZSiU8ugOZex1kpF3bBIdIhwS9dYXMoPcHe6M+QBjw== X-Received: by 2002:a05:600c:3d0f:b0:40d:43ea:ed19 with SMTP id bh15-20020a05600c3d0f00b0040d43eaed19mr1064900wmb.124.1703296332488; Fri, 22 Dec 2023 17:52:12 -0800 (PST) Received: from ukaszb-l.semihalf.net (alfa56.extreme-net.one.pl. [213.77.89.56]) by smtp.gmail.com with ESMTPSA id h2-20020a0564020e8200b005532a337d51sm3288494eda.44.2023.12.22.17.52.11 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 17:52:12 -0800 (PST) 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 , Simon Ser , John Ogness , Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v3 13/22] dyndbg: add support for default trace destination Date: Sat, 23 Dec 2023 02:51:22 +0100 Message-ID: <20231223015131.2836090-14-lb@semihalf.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com> References: <20231223015131.2836090-1-lb@semihalf.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Instead of repeating trace destination name explicitly for each command (e.g. +T:thunderbolt), this change saves previously used trace destination provided to [=3D+-]T as default and consecutive commands which don't provide trace destination explicitly will usa the saved trace destination. Signed-off-by: =C5=81ukasz Bartosik --- lib/dynamic_debug.c | 94 +++++++++++++++++++++++++++++++++++++-------- 1 file changed, 77 insertions(+), 17 deletions(-) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 6c3b83bce18d..99ab5756f0ed 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -72,7 +72,7 @@ struct ddebug_iter { struct flag_settings { unsigned int flags; unsigned int mask; - unsigned int trace_dst; + int trace_dst; }; =20 #define DD_OPEN_CMD "open" @@ -99,6 +99,10 @@ struct dd_tracebuf_tbl_info { struct dd_private_tracebuf buf[TRACE_DST_LAST]; DECLARE_BITMAP(bmap, TRACE_DST_LAST); int bmap_size; +#define DST_NOT_SET (-1) +#define DST_TR_EVENT 0 +#define DST_NOT_SET_STR "not set" + int default_dst; }; =20 static DEFINE_MUTEX(ddebug_lock); @@ -109,7 +113,8 @@ MODULE_PARM_DESC(verbose, " dynamic_debug/control proce= ssing " "( 0 =3D off (default), 1 =3D module add/rm, 2 =3D >control summary, 3 = =3D parsing, 4 =3D per-site changes)"); =20 static struct -dd_tracebuf_tbl_info trc_tbl =3D { .bmap_size =3D TRACE_DST_LAST }; +dd_tracebuf_tbl_info trc_tbl =3D { .bmap_size =3D TRACE_DST_LAST, + .default_dst =3D DST_NOT_SET, }; =20 static inline struct dd_ctrl *get_ctrl(struct _ddebug *desc) { @@ -131,6 +136,11 @@ static inline unsigned int get_trace_dst(const struct = _ddebug *desc) return desc->ctrl.trace_dst; } =20 +static inline bool has_tr_default_dst(void) +{ + return trc_tbl.default_dst !=3D DST_NOT_SET; +} + static int find_tr_instance(const char *name) { int idx =3D 1; @@ -145,11 +155,16 @@ static int find_tr_instance(const char *name) static const char *read_T_args(const char *str, struct flag_settings *modifiers) { - int len, idx =3D 0; - char *end; + bool has_colon =3D *(str+1) =3D=3D ':' ? true : false; + int len =3D 0, idx =3D DST_TR_EVENT; + char *end =3D NULL; =20 - if (*(str+1) !=3D ':') - return str; + if (!has_colon) { + if (!has_tr_default_dst()) + return NULL; + idx =3D trc_tbl.default_dst; + goto end; + } =20 str +=3D 2; end =3D strchr(str, '.'); @@ -168,8 +183,12 @@ char *read_T_args(const char *str, struct flag_setting= s *modifiers) goto end; =20 idx =3D find_tr_instance(str); - if (idx < 0) - return NULL; + if (idx < 0) { + if (!has_tr_default_dst() || + has_colon) + return NULL; + idx =3D trc_tbl.default_dst; + } end: modifiers->trace_dst =3D idx; return end ? end : str + len; @@ -389,6 +408,13 @@ static int handle_trace_close_cmd(const char *arg) goto end; } =20 + /* + * check if default trace instance is being closed, + * if yes then clear default destination + */ + if (trc_tbl.default_dst =3D=3D idx) + trc_tbl.default_dst =3D DST_NOT_SET; + trace_array_put(buf->arr); /* * don't destroy trace instance but let user do it manually @@ -427,6 +453,30 @@ void update_tr_dst(const struct _ddebug *desc, const s= truct dd_ctrl *nctrl) trc_tbl.buf[ndst].use_cnt++; } =20 +static const char *get_tr_default_dst_str(void) +{ + switch (trc_tbl.default_dst) { + case DST_NOT_SET: + return DST_NOT_SET_STR; + case DST_TR_EVENT: + return DD_TR_EVENT; + default: + return trc_tbl.buf[trc_tbl.default_dst].name; + } +} + +static void update_tr_default_dst(const struct flag_settings *modifiers) +{ + int dst =3D modifiers->trace_dst; + + if (dst =3D=3D DST_NOT_SET || dst =3D=3D trc_tbl.default_dst) + return; + + trc_tbl.default_dst =3D dst; + v3pr_info("set default trace dst to idx=3D%d, name=3D%s\n", dst, + get_tr_default_dst_str()); +} + static int ddebug_parse_cmd(char *words[], int nwords) { if (nwords !=3D 1) @@ -537,7 +587,8 @@ static int ddebug_change(const struct ddebug_query *que= ry, nfound++; =20 nctrl.flags =3D (get_flags(dp) & modifiers->mask) | modifiers->flags; - nctrl.trace_dst =3D modifiers->trace_dst; + nctrl.trace_dst =3D modifiers->trace_dst =3D=3D DST_NOT_SET ? + get_trace_dst(dp) : modifiers->trace_dst; if (!memcmp(&nctrl, get_ctrl(dp), sizeof(nctrl))) continue; #ifdef CONFIG_JUMP_LABEL @@ -561,6 +612,9 @@ static int ddebug_change(const struct ddebug_query *que= ry, if (!nfound && verbose) pr_info("no matches for query\n"); =20 + if (nfound) + update_tr_default_dst(modifiers); + return nfound; } =20 @@ -833,7 +887,7 @@ static int ddebug_parse_flags(const char *str, struct f= lag_settings *modifiers) =20 static int ddebug_exec_query(char *query_string, const char *modname) { - struct flag_settings modifiers =3D {}; + struct flag_settings modifiers =3D { .trace_dst =3D DST_NOT_SET }; struct ddebug_query query =3D {}; #define MAXWORDS 9 int nwords, nfound; @@ -1595,15 +1649,21 @@ static int ddebug_proc_show(struct seq_file *m, voi= d *p) } seq_puts(m, "\n"); =20 - if (ddebug_iter_is_last(iter) && - !bitmap_empty(trc_tbl.bmap, trc_tbl.bmap_size)) { - int idx =3D 1; + if (ddebug_iter_is_last(iter)) { =20 seq_puts(m, "\n"); - seq_puts(m, "#: Opened trace instances:"); - for_each_set_bit_from(idx, trc_tbl.bmap, trc_tbl.bmap_size) - seq_printf(m, " %s", trc_tbl.buf[idx].name); - seq_puts(m, "\n"); + seq_printf(m, "#: Default trace destination: %s\n", + get_tr_default_dst_str()); + + if (!bitmap_empty(trc_tbl.bmap, trc_tbl.bmap_size)) { + int idx =3D 1; + + seq_puts(m, "\n"); + seq_puts(m, "#: Opened trace instances:"); + for_each_set_bit_from(idx, trc_tbl.bmap, trc_tbl.bmap_size) + seq_printf(m, " %s", trc_tbl.buf[idx].name); + seq_puts(m, "\n"); + } } =20 return 0; --=20 2.43.0.472.g3155946c3a-goog From nobody Sat Dec 27 05:11:20 2025 Received: from mail-lj1-f171.google.com (mail-lj1-f171.google.com [209.85.208.171]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D58DF10958 for ; Sat, 23 Dec 2023 01:52:15 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=semihalf.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=semihalf.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=semihalf.com header.i=@semihalf.com header.b="dJ75vPjM" Received: by mail-lj1-f171.google.com with SMTP id 38308e7fff4ca-2cc794df8aaso27688301fa.0 for ; Fri, 22 Dec 2023 17:52:15 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1703296334; x=1703901134; 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=6no3BwB4DIf/yo3cr68iWvpmo5tlfbyqPOfodflbjdk=; b=dJ75vPjM1nm7UIMCtD6ufaBsaSXWYQTbU/2FujH2j2OyiRiR4UAmSj7VtVVtHQ/PDR m65M1gYy7gqKDUYrFlYiiNj/4rXDCl+RJ7nJ+l8J73LHtWzxO4Y5coXGumk/QbkEZ8wZ FAEzBwku18SdX1hL93FPs187drniuR5zYtjn1uVAF7CEY8c5OMM+obTztoIQfTbw0s+E hkGVylf5p6sqouO8VzlUMcrEHuat75UVbFpITRzqXyyp5EKdGZ0ze8waKvzou8P+6L8r 7gsqhfqJ4O21TyDLcjcoVH3c4AAVg979Nix7uRRJUoz2D7D5ytu2XdArtokVf0BO4HiW Cn8w== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703296334; x=1703901134; 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=6no3BwB4DIf/yo3cr68iWvpmo5tlfbyqPOfodflbjdk=; b=ZKlnDmeR7g1rEpw/Ir2OTHGTyHJBSiroAS9uyQ1OUxgBC5YXeOOhkHdXdUd6N4NvJn 5Wggozn6k4bTWBNgpiRMoM0zx+blJhOYvICKPvp9Y3osiwMSZ5IEFThaR9ZNn2pT5Y+Y oUtcZB9/LKzU8SzcbfxiyHhjjH/Wl5HMxQq3bKoLavPukwEOdGzHV5Wrr4PnnibPkg9Z nFMDCRm9cZO2AZg7S3e8y6iDZpwsYk43Ss45qQeyAdYXcKI0DjVGqmIShe/D7+M3es1d fgzEM8i1UYck78oRWFUV/kU2vxowlIENMMiSD59pE1gkea/etHAU2kWG22YTLh/FcuP4 eM5Q== X-Gm-Message-State: AOJu0Yy6728v5wCPntkjxIzCMnVH8GaFDmlcfBE4E9Wz6xA+YZqd9tZv LTONgwHvVKha2Yvw99LhnhhMxjkeA9Z/ X-Google-Smtp-Source: AGHT+IEwszgKngWrGT2LYlc8oGsyNZz5xzGHAimZZGzB+faoW6ONRI5Z2M/PkJRrzWcLuXegybUe7Q== X-Received: by 2002:a2e:8018:0:b0:2cc:b4c2:af64 with SMTP id j24-20020a2e8018000000b002ccb4c2af64mr368616ljg.80.1703296334133; Fri, 22 Dec 2023 17:52:14 -0800 (PST) Received: from ukaszb-l.semihalf.net (alfa56.extreme-net.one.pl. [213.77.89.56]) by smtp.gmail.com with ESMTPSA id h2-20020a0564020e8200b005532a337d51sm3288494eda.44.2023.12.22.17.52.12 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 17:52:13 -0800 (PST) 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 , Simon Ser , John Ogness , Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v3 14/22] dyndbg: write debug logs to trace instance Date: Sat, 23 Dec 2023 02:51:23 +0100 Message-ID: <20231223015131.2836090-15-lb@semihalf.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com> References: <20231223015131.2836090-1-lb@semihalf.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable When trace is enabled (T flag is set) and trace destination field value is in range [1..63] (value 0 is reserved for writing debug logs to trace prdbg and devdbg events) then debug logs will be written to trace instance whose name is stored in buf[trace destination].name, e.g. when trace destination value is 2 and buf[2].name is set to tbt then debug logs will be written to /tracing/instances/tbt. Before using trace instance as a destination for writing debug logs it has to be explicitly opened with open command. Signed-off-by: =C5=81ukasz Bartosik --- lib/dynamic_debug.c | 28 ++++++++++++++++++++++++---- 1 file changed, 24 insertions(+), 4 deletions(-) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 99ab5756f0ed..c382ea5dea19 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -1256,8 +1256,8 @@ static DEFINE_PER_CPU(struct ddebug_trace_bufs, ddebu= g_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; @@ -1288,6 +1288,18 @@ 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}; + struct trace_array *arr =3D trc_tbl.buf[get_trace_dst(desc)].arr; + + WARN_ON_ONCE(!arr); + + trace_array_printk(arr, 0, "%pV", &vaf); +} + __printf(2, 3) static void ddebug_printk(struct _ddebug *desc, const char *fmt, ...) { @@ -1300,7 +1312,12 @@ 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_event(desc, NULL, + fmt + strlen(KERN_DEBUG), args); + else + ddebug_trace_instance(desc, fmt + strlen(KERN_DEBUG), + &args); va_end(args); } =20 @@ -1322,7 +1339,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_event(desc, dev, fmt, args); + else + ddebug_trace_instance(desc, fmt, &args); va_end(args); } =20 --=20 2.43.0.472.g3155946c3a-goog From nobody Sat Dec 27 05:11:20 2025 Received: from mail-ed1-f41.google.com (mail-ed1-f41.google.com [209.85.208.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 36C1E12E5B for ; Sat, 23 Dec 2023 01:52:16 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=semihalf.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=semihalf.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=semihalf.com header.i=@semihalf.com header.b="rYYvweEU" Received: by mail-ed1-f41.google.com with SMTP id 4fb4d7f45d1cf-553ba2f0c8fso2609532a12.1 for ; Fri, 22 Dec 2023 17:52:16 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1703296335; x=1703901135; 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=GCgim+Lzybt1bsnBJ1bdt7sK2jYxpNtF/tNI/IwIPIs=; b=rYYvweEUAIZAU52pyxYMt4MhDsQdjNZFak92AI8WOGhFJLFAZTsvAW4Jiq2ihG59Dg etPxLRCdotBRzYF3G7jFAwBa9iq7g/kmcWJf/v/yoTyfAzOrPAJ7ioCAkVIRQY1hyhAH bgcr7RefS29wydCRNjjwE/BnAFM0Qf0FOAfLQMMDDAO2cJjcOc87YQxO9iNmtnLqWq0U y33laAWOury1lFceMQaaa2XIGgon/reKBrYFb/Yw3E4FKVVdlAflfNB1NWPQo6+EsDug NPh2QRBDilykrzxeDAt9sWGwieItFuep7TiJ+iDMK9BSCDhdhjKj1CXJ+EFxAt9AQleC 3GWg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703296335; x=1703901135; 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=GCgim+Lzybt1bsnBJ1bdt7sK2jYxpNtF/tNI/IwIPIs=; b=PKEtLM8lu/Y9yZKTQYi7dTL5AZ/HfmB6kCXv2wm+ozeWqPhfP/yxVFg8suum0iGSTM F+p7ngI336prnMAlqJYxgL2Ek3h53nWywXDesA4pDzoCwh8RXDjxJjLfHFSHoT/hVOL2 OIjKERcbQZQCdHnwZ5Oeyaiy40URaaQqgWi3oqNgkk7mz+yhOGAKOcGJJeYKCLIAunaR 9HQbPpVvWq4s3I45JDD/UkrACy9af4XJBUef8VYmHm3S2NJSY80xLTLwsYej/t5OhopC lfFmwSqpLODz4i0mjy2hm+DgB+KbnU/GuzTN2TcDItmN/yQGOGzsZ3wTT0Y1XmYULnsX GtKA== X-Gm-Message-State: AOJu0YzUv7WlatDfJqT1oSHQs8HbDUyJpIsTR9z8spqKL3dwDzklTNkj MfrSJj9saEGfD8/GSKt063Rwzr96fPPj X-Google-Smtp-Source: AGHT+IHM/jKsIP683yreZ4n4i4NWv+WTSC04fOtHCtu4IMYEau5AJUWHSBYSFIDLd6ODxQRzNeHY1g== X-Received: by 2002:aa7:c517:0:b0:553:9e98:5178 with SMTP id o23-20020aa7c517000000b005539e985178mr596272edq.132.1703296335604; Fri, 22 Dec 2023 17:52:15 -0800 (PST) Received: from ukaszb-l.semihalf.net (alfa56.extreme-net.one.pl. [213.77.89.56]) by smtp.gmail.com with ESMTPSA id h2-20020a0564020e8200b005532a337d51sm3288494eda.44.2023.12.22.17.52.14 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 17:52:15 -0800 (PST) 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 , Simon Ser , John Ogness , Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v3 15/22] dyndbg: add support for hex_dump output to trace Date: Sat, 23 Dec 2023 02:51:24 +0100 Message-ID: <20231223015131.2836090-16-lb@semihalf.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com> References: <20231223015131.2836090-1-lb@semihalf.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Add support for writing hex_dump debug logs to trace. Signed-off-by: =C5=81ukasz Bartosik Signed-off-by: Jim Cromie --- include/linux/dynamic_debug.h | 16 ++++++++++------ lib/dynamic_debug.c | 36 +++++++++++++++++++++++++++++++++++ 2 files changed, 46 insertions(+), 6 deletions(-) diff --git a/include/linux/dynamic_debug.h b/include/linux/dynamic_debug.h index dc10c7535f13..76eec3f05be9 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 c382ea5dea19..65dafdec7b76 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -1355,6 +1355,42 @@ 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, KERN_DEBUG "%s%s%p: %s\n", + level, prefix_str, ptr + i, linebuf); + break; + case DUMP_PREFIX_OFFSET: + ddebug_printk(descriptor, KERN_DEBUG "%s%s%.8x: %s\n", + level, prefix_str, i, linebuf); + break; + default: + ddebug_printk(descriptor, KERN_DEBUG "%s%s%s\n", + level, prefix_str, linebuf); + break; + } + } +} +EXPORT_SYMBOL(_print_hex_dump); + void __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...) { va_list args; --=20 2.43.0.472.g3155946c3a-goog From nobody Sat Dec 27 05:11:20 2025 Received: from mail-ed1-f45.google.com (mail-ed1-f45.google.com [209.85.208.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 94AA914F6F for ; Sat, 23 Dec 2023 01:52:18 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=semihalf.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=semihalf.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=semihalf.com header.i=@semihalf.com header.b="eYIHZuK9" Received: by mail-ed1-f45.google.com with SMTP id 4fb4d7f45d1cf-55359dc0290so4165410a12.1 for ; Fri, 22 Dec 2023 17:52:18 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1703296337; x=1703901137; 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=HVR31l7ssYBc2uqfncVW1jfnriW+pqUwixAY72YDu48=; b=eYIHZuK93oRaumjAVjIPWlgGSgMCVkmxLW7mBNcwneImcuN230ZPegGYi9eTEFS6NT tjUXKn8UnRow/NR9BT1xSjAG8lftWhA3YIstrIBnpM9+WJJWNAo4H/kEzIAfQ1yPlK1S OwTrcLRnUWQTZwVBXXleEcqXXq0Lpz2ZT1zqED/nitymDb2UgdYcUB7lXZMcM0ZjLfQT G0ld9JqW6y5GIgst/L2379z9HqjvdaKE3oHvuFvn1XNlQdUnd/QOEmNlLP7Ri0P4ZFVy isDu5x0/tW6sEl9Q0ydQQNN2Yfs0SnUely5JeRZqweZNzDTMZriAPAIJyMifPzc8tzGX l9Mw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703296337; x=1703901137; 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=HVR31l7ssYBc2uqfncVW1jfnriW+pqUwixAY72YDu48=; b=djhKcjq3j3fSmOMuHlE4gVoKIMmu3YOL8Jx07XcJ1o0LHxBAuT5zacdckpv7qFdK/I Eqn6IkD7ptWDfTfCFWbMgp7ColAV5M5N6yIXufz2OPWz9ME+OZxNB/XpdoHHZMvf3NdP bh+yFIQrCEzeWUBW35h3joGQtPer0P/Mn7siBXW9QVxH8nSw9uWK4uVmofHudK9biMNr DHQVQTFgVW3BknK0P7RLoSUT3ZWu7cuh4oSIoIjH6cevy22QzxLPZu/4F7zOsBKJiQxn JQT1v/M0M9kqQR+1gwBeFXViS5SioyrCKk49sWVLyqPYn32xlwygcMLyepb+3YY3nyJp 7jkg== X-Gm-Message-State: AOJu0Yywdt0NsqubYaBlpIdJ/XnZi9pTRoXlZ7OTtq79N8Dui6OYDwnD CT5LthQnu4qC34HRQrFuvpWRjEhiPxTM X-Google-Smtp-Source: AGHT+IGKQ8NjMm0KKd/qWNRze/qoSNsJBR0VLgXS0eLuqlpgb7oNSxgOjC5MsMHMuHIzjNtn5uSXxA== X-Received: by 2002:a50:9313:0:b0:554:4bb2:9a6e with SMTP id m19-20020a509313000000b005544bb29a6emr2531314eda.11.1703296337057; Fri, 22 Dec 2023 17:52:17 -0800 (PST) Received: from ukaszb-l.semihalf.net (alfa56.extreme-net.one.pl. [213.77.89.56]) by smtp.gmail.com with ESMTPSA id h2-20020a0564020e8200b005532a337d51sm3288494eda.44.2023.12.22.17.52.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 17:52:16 -0800 (PST) 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 , Simon Ser , John Ogness , Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v3 16/22] dyndbg: disambiguate quoting in a debug msg Date: Sat, 23 Dec 2023 02:51:25 +0100 Message-ID: <20231223015131.2836090-17-lb@semihalf.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com> References: <20231223015131.2836090-1-lb@semihalf.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jim Cromie When debugging a query parsing error, the debug message wraps the query in escaped-double-quotes. This is confusing when mixed with any quoted args where quotes are stripped by the shell. So this replaces the \"%s\" with <%s> in the format string, allowing a user to see how the shell strips quotes: lx]# echo module "foo" format ,_ -f > /proc/dynamic_debug/control [ 716.037430] dyndbg: read 26 bytes from userspace [ 716.037966] dyndbg: query 0: on module: <*> Signed-off-by: Jim Cromie --- lib/dynamic_debug.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 65dafdec7b76..8ce485fc84ff 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -955,7 +955,7 @@ static int ddebug_exec_queries(char *query, const char = *modname) if (!query || !*query || *query =3D=3D '#') continue; =20 - vpr_info("query %d: \"%s\" mod:%s\n", i, query, modname ?: "*"); + vpr_info("query %d: <%s> on module: <%s>\n", i, query, modname ?: "*"); =20 rc =3D ddebug_exec_query(query, modname); if (rc < 0) { --=20 2.43.0.472.g3155946c3a-goog From nobody Sat Dec 27 05:11:20 2025 Received: from mail-ed1-f45.google.com (mail-ed1-f45.google.com [209.85.208.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 23127171BE for ; Sat, 23 Dec 2023 01:52:19 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=semihalf.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=semihalf.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=semihalf.com header.i=@semihalf.com header.b="RKse9g0w" Received: by mail-ed1-f45.google.com with SMTP id 4fb4d7f45d1cf-553a65b6ad4so2936001a12.0 for ; Fri, 22 Dec 2023 17:52:19 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1703296338; x=1703901138; 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=7r3U79Qxj2jisK+rG3PDZznLSnbCkTYF/t8XERCjqLs=; b=RKse9g0wJNNVq91nhwm1yVh1KYuDT1YK3N+kVUb4H3W3bn/t0BnV96S3VnRJfIg6VF lHB0wo44x251GEGjw47cLot0theLXMgTcO2ZBd3VNSWkoTBMgPoAwod7S2EjMMWM8hjB 5rz2IGufiwtM8sAPzMEUxD2SRMAU95VjquvkR2m4pWJl6f6095fIAk2I024LFbogN6NY x9qS235MRvY5YFwYmrC3+dMzUxrl4qvqcY6tswdV0Xr1e8QdBCCTIMr5hOthQEzEYkkF U6ph7IzHw2ZHXIdb1qMamKyDem/eHXbj2LoHGE3cFlreRdZg/3OAgYIV6Eln5DIxyk1t 4MiQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703296338; x=1703901138; 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=7r3U79Qxj2jisK+rG3PDZznLSnbCkTYF/t8XERCjqLs=; b=CVD3gflz/GaD6WLPnn7+rlIYN982bXn4A9RxZt04wI7F7t4PcOQn4tDWld4rQOhI4C cnlw23NyUkY5/RwQUjYIk6Rm1IWwlip963zmGNb+C/c+VGrSshhqaJTf7v00nhjgzptD /6g9kgY4gkgF2xCR74XUR7A9YHv84uG7yLG7gjqDcwX1f/bHS9WCC35WmiGTLvfloQzf ltShxJxEbGvzbScDVAX+LsVZSOqMBH59D8+cIFE+K4A9bmoBPi2aBrXYlofFgtp0Q0/5 AuWv2VdoWpzQgtONXEjTWuZFLCd221Mnxa+WlPY1prt03Xoze1VdRHLWzc3twiGcKxFZ QTZA== X-Gm-Message-State: AOJu0YxgpBN1qKftH3EVycJ9ZS5YeFkJzk9bqiZAj34PsXBpJDKTcAk+ LiGbOeu3rhdgrBbPLK2dxihi5gIu+4Gc X-Google-Smtp-Source: AGHT+IGJvtR9jJPpiHTnki/N4UvZMs/ZA/R0N7HYYjUHElafUXvwZb63+edtlUmS0QC5whlGhv3tEg== X-Received: by 2002:a50:9f0f:0:b0:553:ee28:b97d with SMTP id b15-20020a509f0f000000b00553ee28b97dmr1537599edf.39.1703296338568; Fri, 22 Dec 2023 17:52:18 -0800 (PST) Received: from ukaszb-l.semihalf.net (alfa56.extreme-net.one.pl. [213.77.89.56]) by smtp.gmail.com with ESMTPSA id h2-20020a0564020e8200b005532a337d51sm3288494eda.44.2023.12.22.17.52.17 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 17:52:18 -0800 (PST) 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 , Simon Ser , John Ogness , Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v3 17/22] dyndbg: fix old BUG_ON in >control parser Date: Sat, 23 Dec 2023 02:51:26 +0100 Message-ID: <20231223015131.2836090-18-lb@semihalf.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com> References: <20231223015131.2836090-1-lb@semihalf.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jim Cromie Fix a BUG_ON from 2009. I have hit it while fuzzing >control on some other patches, and panic from user input is bad. Replace the BUG_ON with pr_error and return -EINVAL. Signed-off-by: Jim Cromie --- lib/dynamic_debug.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 8ce485fc84ff..d4e50e4f6635 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -650,7 +650,11 @@ static int ddebug_tokenize(char *buf, char *words[], i= nt maxwords) } else { for (end =3D buf; *end && !isspace(*end); end++) ; - BUG_ON(end =3D=3D buf); + if (end =3D=3D buf) { + pr_err("parse err after word:%d=3D%s\n", nwords, + nwords ? words[nwords - 1] : ""); + return -EINVAL; + } } =20 /* `buf' is start of word, `end' is one past its end */ --=20 2.43.0.472.g3155946c3a-goog From nobody Sat Dec 27 05:11:20 2025 Received: from mail-ed1-f43.google.com (mail-ed1-f43.google.com [209.85.208.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id A65DA22079 for ; Sat, 23 Dec 2023 01:52:21 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=semihalf.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=semihalf.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=semihalf.com header.i=@semihalf.com header.b="te9hvzEx" Received: by mail-ed1-f43.google.com with SMTP id 4fb4d7f45d1cf-55361b7f38eso2842452a12.0 for ; Fri, 22 Dec 2023 17:52:21 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1703296340; x=1703901140; 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=lGHiwp064I3yQf9nvM+/2/akIgp5q6La0/IkEVizm/E=; b=te9hvzExw8Pjh2eM9IxzOQwlmgxmVGV1lo6H4+y8tJvT3R5hQca1D+ns/0gPs4KXV4 NZMihjtHbHMJposjyfitnZI0EBdo6G3kUuRLjeGHKeP9Ea9kk6BHv/vJ54u8iS1++dFa VSMOcysNpBhC0zhoW4d9PMKL6IWP5glpu66lMj87L6/Z7krmlHiEzOo/VJ8Ml89VqqAo yOgjj3zoFtJNLjiEZZ7FiYgDvkGVIaereyj6SPThGY0ToJz9rLXOWqo0q/CbrIGlZG1a jljggG7HVKLf/Ads0S1rz1DuAJZ7zkBxFuj/wuvlG7b/gL0D25qDQwwNeU32ugr1JUIE mruA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703296340; x=1703901140; 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=lGHiwp064I3yQf9nvM+/2/akIgp5q6La0/IkEVizm/E=; b=X6q4q883XAZDmDCacAqQMoeqLGqlcqrIInjYQ6vLxWrJJBvhHGyrRac4hNkxErPQOk fwOig8OmUPRzvfYsODATC6yMIFfjW2H+PFnbWbuijxt+J7/HKbsOOW0vjr43deIg7wPX 3hqvIt9/p/b8vDeA1ablVaE52ttb6y1/UaqYSXwYfCEGi1PpKNDENhfJcVobtnkgBm7s loiXWQ2KfoZJrLc4oxDZ+ipxDOB1xe3D9/whf5gDC/A9sDYJKClxIzi847SDgJAVXtck DvJkKaAsYqLJ7FFiKw9zudBXUSRq6Ki1AdbLvK7A7bXynxNklvqH43r5bmDSthF9TY6v zaRg== X-Gm-Message-State: AOJu0YxDbzGd0mYNBdIh+F3H+y62GZ0uuj/EHAenjZTvURAs6UsFHHT1 CuujBqObVHK9fSpStuwUqTdfApYh68Rx X-Google-Smtp-Source: AGHT+IGih3SfHLHWBG7q9WsxpnckXIa3GcoYPPXCshE+oN7o7knfi2bIg0na8wJ/LcKZalAQ30Smtw== X-Received: by 2002:a50:ed11:0:b0:553:b473:6d70 with SMTP id j17-20020a50ed11000000b00553b4736d70mr709487eds.120.1703296340151; Fri, 22 Dec 2023 17:52:20 -0800 (PST) Received: from ukaszb-l.semihalf.net (alfa56.extreme-net.one.pl. [213.77.89.56]) by smtp.gmail.com with ESMTPSA id h2-20020a0564020e8200b005532a337d51sm3288494eda.44.2023.12.22.17.52.18 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 17:52:19 -0800 (PST) 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 , Simon Ser , John Ogness , Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v3 18/22] dyndbg: treat comma as a token separator Date: Sat, 23 Dec 2023 02:51:27 +0100 Message-ID: <20231223015131.2836090-19-lb@semihalf.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com> References: <20231223015131.2836090-1-lb@semihalf.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jim Cromie Treat comma as a token terminator, just like a space. This allows a user to avoid quoting hassles when spaces are otherwise needed: :#> modprobe drm dyndbg=3Dclass,DRM_UT_CORE,+p\;class,DRM_UT_KMS,+p or as a boot arg: drm.dyndbg=3Dclass,DRM_UT_CORE,+p # todo: support multi-query here Given the myriad ways a boot-line can be assembled and then passed in/down/around shell based tools, if the >control parser treats commas like spacees, this would allow side-stepping all sorts of quoting hassles thru those layers. Signed-off-by: Jim Cromie --- lib/dynamic_debug.c | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index d4e50e4f6635..70d9440193a8 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -637,6 +637,10 @@ static int ddebug_tokenize(char *buf, char *words[], i= nt maxwords) break; /* oh, it was trailing whitespace */ if (*buf =3D=3D '#') break; /* token starts comment, skip rest of line */ + if (*buf =3D=3D ',') { + buf++; + continue; + } =20 /* find `end' of word, whitespace separated or quoted */ if (*buf =3D=3D '"' || *buf =3D=3D '\'') { @@ -648,7 +652,7 @@ static int ddebug_tokenize(char *buf, char *words[], in= t maxwords) return -EINVAL; /* unclosed quote */ } } else { - for (end =3D buf; *end && !isspace(*end); end++) + for (end =3D buf; *end && !isspace(*end) && *end !=3D ','; end++) ; if (end =3D=3D buf) { pr_err("parse err after word:%d=3D%s\n", nwords, --=20 2.43.0.472.g3155946c3a-goog From nobody Sat Dec 27 05:11:20 2025 Received: from mail-ed1-f54.google.com (mail-ed1-f54.google.com [209.85.208.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 1B0232421E for ; Sat, 23 Dec 2023 01:52:22 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=semihalf.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=semihalf.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=semihalf.com header.i=@semihalf.com header.b="k6xWt0PL" Received: by mail-ed1-f54.google.com with SMTP id 4fb4d7f45d1cf-5548a911cf9so90851a12.2 for ; Fri, 22 Dec 2023 17:52:22 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1703296341; x=1703901141; 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=xrCo62998dd2zdm2uwyLE8Dvl1Erd3p03bl4+A1t0OY=; b=k6xWt0PLaHXRU4zLbVtpgzgCxsmABbV8OQzY3Ab7jVrbrscAyTjT1tfRa9b2a5oXfv jnNnNDo6pqaRyJho1abpDzdCbwbH9YXMNbs1CdLDQNoR1LRWqYrQeWUWCWvvAOMo+ONl cjKNhLDjWKDixD8kAFupL9YrRmvv+3ZCi/LBHvMbItPS3ln+K6IziwCQV7Cqt3VsJqQn MrqFiI+4Qw0CnD1QDdd6EIsYIR+FHveFD5HHGjtia6bHJtHRPML9EyX1w5v3+xuE71iX QDFXuKKEACwwWwOn25hTflkzPV+jUURKltjhuzC3e9CyeW8Y7FdGqsiUdB7WV6gx3u83 OXQg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703296341; x=1703901141; 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=xrCo62998dd2zdm2uwyLE8Dvl1Erd3p03bl4+A1t0OY=; b=FE7ihXL+k8fMfcSYHFD2PvKRt2KkSJgMF1LskxFaUobdiKpZXgtruoqJwkn83ap9OV 01rBW/83gCS52nkBayK3EJUtnbB/DHEz5hSttNBg54e3cZehBqNsxzCX8a3WLhr5KO3J A9yUr2pOA1RfZe/vVtIsePdvywJmBWPv3vT6GbyAscIQ1daxn80kmwDMqG7DFrc3OrI2 V0b/NK0lBwqQRsyl+b5ID97Q2IYIjWCM3MJiOQghNy7nLJ3K9hlMKGx9m1MU7KlrMmat CwzqLQtmjAwY5KU2CgcMIRiT8zJcZIIfvJNlnCnaDcwwsP08MXZN/steymrfd4Ymnaqm DHbA== X-Gm-Message-State: AOJu0Yx/JYXIP3u9mzWQbyIFuDCpJhvFGcvHdYHPLgguE4hf5MLztjim Nzd8SL5wkqxmnPXfWb2lCW80VwMPTK4a X-Google-Smtp-Source: AGHT+IFGtMBjB6KNG9UAqYAeNaPd5BrmsGBJMrkvaFpkHVfL5KANCS6bPWpkOQVObTchBM6ti/4wxA== X-Received: by 2002:aa7:d751:0:b0:553:178:9d5a with SMTP id a17-20020aa7d751000000b0055301789d5amr567885eds.130.1703296341606; Fri, 22 Dec 2023 17:52:21 -0800 (PST) Received: from ukaszb-l.semihalf.net (alfa56.extreme-net.one.pl. [213.77.89.56]) by smtp.gmail.com with ESMTPSA id h2-20020a0564020e8200b005532a337d51sm3288494eda.44.2023.12.22.17.52.20 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 17:52:21 -0800 (PST) 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 , Simon Ser , John Ogness , Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v3 19/22] dyndbg: add skip_spaces_and_coma() Date: Sat, 23 Dec 2023 02:51:28 +0100 Message-ID: <20231223015131.2836090-20-lb@semihalf.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com> References: <20231223015131.2836090-1-lb@semihalf.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable From: Jim Cromie The function skip_spaces_and_coma removes leading spaces and coma. With this approach a user can provide dynamic debug control commands in new format. For example the following command (existing format) modprobe test_dynamic_debug dyndbg=3D"class D2_CORE +p" can also be provided as (new format): modprobe test_dynamic_debug dyndbg=3Dclass,D2_CORE,+p Signed-off-by: Jim Cromie Signed-off-by: =C5=81ukasz Bartosik --- lib/dynamic_debug.c | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 70d9440193a8..48ce24c39457 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -618,6 +618,14 @@ static int ddebug_change(const struct ddebug_query *qu= ery, return nfound; } =20 +char *skip_spaces_and_coma(const char *str) +{ + str =3D skip_spaces(str); + if (*str =3D=3D ',') + str =3D skip_spaces(++str); + return (char *)str; +} + /* * Split the buffer `buf' into space-separated words. * Handles simple " and ' quoting, i.e. without nested, @@ -631,8 +639,8 @@ static int ddebug_tokenize(char *buf, char *words[], in= t maxwords) while (*buf) { char *end; =20 - /* Skip leading whitespace */ - buf =3D skip_spaces(buf); + /* Skip leading whitespace and coma */ + buf =3D skip_spaces_and_coma(buf); if (!*buf) break; /* oh, it was trailing whitespace */ if (*buf =3D=3D '#') @@ -959,7 +967,7 @@ static int ddebug_exec_queries(char *query, const char = *modname) if (split) *split++ =3D '\0'; =20 - query =3D skip_spaces(query); + query =3D skip_spaces_and_coma(query); if (!query || !*query || *query =3D=3D '#') continue; =20 --=20 2.43.0.472.g3155946c3a-goog From nobody Sat Dec 27 05:11:20 2025 Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B9F9A26AD2 for ; Sat, 23 Dec 2023 01:52:24 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=semihalf.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=semihalf.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=semihalf.com header.i=@semihalf.com header.b="uUz84Kqp" Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-5542ac8b982so2217834a12.3 for ; Fri, 22 Dec 2023 17:52:24 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1703296343; x=1703901143; 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=hjBb7btKJ5cDmDK0xMvEJpKljQMf3aQ5ihb+cugdsR0=; b=uUz84KqpQZpD3ynrwdSyysa7U9xdq99VCXqH0o+HAmoowd9p/PMDOBuFiEd/3ToR9w xEafMjPLGEdM/s7sRD9GWc3n0ogshKX02RGHyXRpZVOfhpgU1zaeIIDxPs+ADI+SgCZH lIlOZX+FJDqU/DzXKqiNLgLO3qYmCyy+QecARAPHaXHPKyYC/LPir6D0X7wmVS4OpoOc 1vUxq5sWeXBF96x+LXX/7LoSk0UrSL2vqRAdhHhtqCNODZkHfCkQEBnE/TvIbiqNLYIz KFYu9oCujW1+kvNqYvMcN8qV2Y7UVOOc5/xTVVxkfiqhFRq7ajgSCoS1NharArX6bJCD 47Aw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703296343; x=1703901143; 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=hjBb7btKJ5cDmDK0xMvEJpKljQMf3aQ5ihb+cugdsR0=; b=A5gD4LWnz0aqCSfx3zcXsbtQfhd3GVEDF2dG/eVBlPtPtX24W0XebMjKnm9ACFHC2e CcvCuxmc9RkbKydVXfqQ8R0eYuYR7QKAYQOwaCFyJKBGsNosW8L3Nu1F58faJUvZP4Ab UP8RGmDkBz2X6pRtfUsnu9joDaUZe8n9lfwWcEKwegt8X6NgZW61dic8YIQ4sl52sVNw N9u7UC+iavxB1SGl1UWgcM+zItbkz+qJROuKzw2lMtSrrBi0Oo8jlyaONfWJZ8kCEiTh fOq92mj2ow6fPmoDlUCjQUfgUjAm0RyGa9NG8u29qcOb3pD8m2EOQIL8hHOcYJcvq+Zu 3bwQ== X-Gm-Message-State: AOJu0YzZ0gafWXU6dZGjvXlHFcnVbSrKGicSODgPFWfe916jKf6hiiTH Ml7j6mg2GSWTaiLFjC+y/wYkKpTzyFfc X-Google-Smtp-Source: AGHT+IGZjxUk65ZXw0pkx+Owpp6yTrhNuEcgFhoBSdzNY7Psstb5Qd6ZBHeB3fdeqMLvUo3H58ziXQ== X-Received: by 2002:a50:9b14:0:b0:553:8227:178c with SMTP id o20-20020a509b14000000b005538227178cmr1178108edi.68.1703296343184; Fri, 22 Dec 2023 17:52:23 -0800 (PST) Received: from ukaszb-l.semihalf.net (alfa56.extreme-net.one.pl. [213.77.89.56]) by smtp.gmail.com with ESMTPSA id h2-20020a0564020e8200b005532a337d51sm3288494eda.44.2023.12.22.17.52.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 17:52:22 -0800 (PST) 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 , Simon Ser , John Ogness , Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v3 20/22] dyndbg: split multi-query strings with % Date: Sat, 23 Dec 2023 02:51:29 +0100 Message-ID: <20231223015131.2836090-21-lb@semihalf.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com> References: <20231223015131.2836090-1-lb@semihalf.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jim Cromie Multi-query strings have long allowed: modprobe drm dyndbg=3D"class DRM_UT_CORE +p; class DRM_UT_KMS +p" modprobe drm dyndbg=3D< on module: <*> [ 38.172011] dyndbg: bad flag-op f, at start of format [ 38.172487] dyndbg: flags parse failed [ 38.172839] dyndbg: query 1: on module: <*> [ 38.173285] dyndbg: expecting pairs of match-spec [ 38.173791] dyndbg: query parse failed [ 38.174141] dyndbg: processed 2 queries, with 0 matches, 2 errs bash: echo: write error: Invalid argument In trade for that minor format selection limitation, we get to do: vng -v --user root -p 4 \ -a dynamic_debug.verbose=3D3 \ -a drm.debug=3D0x15 \ -a i915.dyndbg=3Dclass,DRM_UT_CORE,+pfmlt_%class,DRM_UT_KMS,+pfml modprobe drm modprobe i915 NOTES/TLDR: In this example, using both drm.debug & drm.dyndbg is mostly for testing. Using drm.debug is preferred, because the drivers all explicitly depend on that input/control-point, so settings there are propagated to drivers. But more to the point, drm.dyndbg explicitly limits the query to drm. In fact, you could pass a module wildcard in the above, and achieve the same thing: vng -v --user root -p 4 \ -a dynamic_debug.verbose=3D3 \ -a \*.dyndbg=3Dclass,DRM_UT_CORE,+pfmlt_%class,DRM_UT_KMS,+pfm%class, \ DRM_UT_ATOMIC,+pf ':' would be a more natural multi-cmd separator, but is reserved for +T: to designate separate tracebuf instances. If '%' is distasteful, the backup plan is ",_,", since that would never appear in a useful cmd. Signed-off-by: Jim Cromie --- lib/dynamic_debug.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 48ce24c39457..453eab7092dc 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -963,7 +963,7 @@ static int ddebug_exec_queries(char *query, const char = *modname) int i, errs =3D 0, exitcode =3D 0, rc, nfound =3D 0; =20 for (i =3D 0; query; query =3D split) { - split =3D strpbrk(query, ";\n"); + split =3D strpbrk(query, "%;\n"); if (split) *split++ =3D '\0'; =20 --=20 2.43.0.472.g3155946c3a-goog From nobody Sat Dec 27 05:11:20 2025 Received: from mail-wr1-f51.google.com (mail-wr1-f51.google.com [209.85.221.51]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 4CCBA28373 for ; Sat, 23 Dec 2023 01:52:26 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=semihalf.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=semihalf.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=semihalf.com header.i=@semihalf.com header.b="EfVLT8Nn" Received: by mail-wr1-f51.google.com with SMTP id ffacd0b85a97d-3367903b4dcso2241473f8f.1 for ; Fri, 22 Dec 2023 17:52:26 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1703296344; x=1703901144; 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=haas6K2PixyGojAx+SMW1ogMp52EfdW6LDnozcXO/gU=; b=EfVLT8NnQA7fDMyLNkGmHsagtx0rp9+y4W7sBYPsUV4lzpc/kBP+308CWNafSnJ1hA Bpz4/vv8bUeZvcsszNa4fwdTcc9mX0tvMLxzoQx1+6Gaz2ip0Kf7BtOanpehcdb/kJ4X fzwbdvGtYQHEoWEh0UR9DDY6k5tPKhdJWoKWKNKQiiVMpoGHhMdV+gmB8PYIz/xwU7I4 LGyR1dJorxdCgFH3wtZD34i5+8IBXCK5/S9v09QhmwuQnFC7ZnlqhXDyj2VXRuvpZOa8 eu9bUgPkJpmCy7wxPuxj57z/HSCGZqlxNZfQRet9au3SgSsthzY1o6BW7hdTuc9DyYgU RAIA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703296344; x=1703901144; 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=haas6K2PixyGojAx+SMW1ogMp52EfdW6LDnozcXO/gU=; b=bDnXhNCLxaDObw2vZHVnq/dFALmB7i+aY+N4DeCFcJNFIMC28xdZGP/e3LEuVgx3d+ VN2PfPwrkid+HNnr7nYJAGnuJimUSD0FbIr1BWC8oZeshY4Sheh1+jhvT1X2bWM9wf02 UYtw3TtYeEVTgTDoJW5RxXAPwdSBcrun1nfUfMKKcxYNHiZ2XyCQUrGIlXNbqSIOUPwH GafVbhkBnF3CD/mP+BUNost+AAsP6qnAsQtohmrKFOtN2PfydYwrwpOrmY9v055glddD hBM/5q0IsqBGhQvPL9pUaIJLhM34r3CDN/HgXz8RBw8PkBHZ8ethwZ3N8BR7GyhFYynv nAGA== X-Gm-Message-State: AOJu0YyL14p860DRM0NjFIvopQwCtqfonukSP83dqKmKsxUlJ82B96BJ bv856fznazgske9V2V0Y2KcfEYACZxyt X-Google-Smtp-Source: AGHT+IEBQjK7TsN/s/MUMixJ1GlVKv5pQcUpT7JeuZgG2xSKTke5vGv5SoOZLBOkkOFw8VAxrarVbA== X-Received: by 2002:a5d:58e7:0:b0:336:6d04:58b2 with SMTP id f7-20020a5d58e7000000b003366d0458b2mr1215273wrd.89.1703296344701; Fri, 22 Dec 2023 17:52:24 -0800 (PST) Received: from ukaszb-l.semihalf.net (alfa56.extreme-net.one.pl. [213.77.89.56]) by smtp.gmail.com with ESMTPSA id h2-20020a0564020e8200b005532a337d51sm3288494eda.44.2023.12.22.17.52.23 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 17:52:24 -0800 (PST) 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 , Simon Ser , John Ogness , Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v3 21/22] dyndbg: reduce verbose/debug clutter Date: Sat, 23 Dec 2023 02:51:30 +0100 Message-ID: <20231223015131.2836090-22-lb@semihalf.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com> References: <20231223015131.2836090-1-lb@semihalf.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jim Cromie currently, for verbose=3D3, these are logged for each query dyndbg: query 0: mod: <*> dyndbg: split into words: "class" "DRM_UT_CORE" "+p" dyndbg: op=3D'+' dyndbg: flags=3D0x1 dyndbg: *flagsp=3D0x1 *maskp=3D0xffffffff dyndbg: parsed: func=3D"" file=3D"" module=3D"" format=3D"" lineno=3D0-0 c= lass=3D... dyndbg: no matches for query dyndbg: no-match: func=3D"" file=3D"" module=3D"" format=3D"" lineno=3D0-0= class=3D... dyndbg: processed 1 queries, with 0 matches, 0 errs That is excessive, so this patch shrinks it to 4 lines: dyndbg: query 0: on module: <*> dyndbg: split into words: "class" "D2_CORE" "+T:foo" dyndbg: op=3D'+' flags=3D0x40 maskp=3D0xffffffff trace_dest=3D0x0 dyndbg: applied: func=3D"" file=3D"" module=3D"" format=3D"" lineno=3D0-0 = class=3D... Signed-off-by: Jim Cromie --- lib/dynamic_debug.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 453eab7092dc..4718e8faa719 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -835,7 +835,6 @@ static int ddebug_parse_query(char *words[], int nwords, */ query->module =3D modname; =20 - vpr_info_dq(query, "parsed"); return 0; } =20 @@ -860,7 +859,6 @@ static int ddebug_parse_flags(const char *str, struct f= lag_settings *modifiers) pr_err("bad flag-op %c, at start of %s\n", *str, str); return -EINVAL; } - v3pr_info("op=3D'%c'\n", op); =20 for (; *str ; ++str) { for (i =3D ARRAY_SIZE(opt_array) - 1; i >=3D 0; i--) { @@ -880,7 +878,6 @@ static int ddebug_parse_flags(const char *str, struct f= lag_settings *modifiers) return -EINVAL; } } - 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) { @@ -896,7 +893,8 @@ static int ddebug_parse_flags(const char *str, struct f= lag_settings *modifiers) modifiers->flags =3D 0; break; } - v3pr_info("*flagsp=3D0x%x *maskp=3D0x%x\n", modifiers->flags, modifiers->= mask); + v3pr_info("op=3D'%c' flags=3D0x%x maskp=3D0x%x trace_dest=3D0x%x\n", + op, modifiers->flags, modifiers->mask, modifiers->trace_dst); =20 return 0; } --=20 2.43.0.472.g3155946c3a-goog From nobody Sat Dec 27 05:11:20 2025 Received: from mail-ed1-f48.google.com (mail-ed1-f48.google.com [209.85.208.48]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id F0D6728DAB for ; Sat, 23 Dec 2023 01:52:27 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=semihalf.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=semihalf.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=semihalf.com header.i=@semihalf.com header.b="EDm945XR" Received: by mail-ed1-f48.google.com with SMTP id 4fb4d7f45d1cf-5532b45c286so2621170a12.0 for ; Fri, 22 Dec 2023 17:52:27 -0800 (PST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=semihalf.com; s=google; t=1703296346; x=1703901146; 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=xohLWD0UNw7E4CxloMtBQln7aiOr7P7dbQQwHRMmxi8=; b=EDm945XRmNr/HPVgFV3Sj7sIYTtzGZI2mSOz1z05HoVgMF7Q+PWUQhghPc/FsjMiWq rZ39EEUApZE7aHBiLad1pMtw5HtGd1w0TB/hKznlYgdjjTX/Bou/Kdm5goPyIjOpqHrw OulcXELxcQJWyOF3oNij+I7brx9zBQhpCazmwsGprT8Ddk4LsLakscaLHi/6H1GSNFpO 7vu/jD9jjNZyWhMLYM60p1iA1nVVdyNi/vS8/yX1BiFXhGKxewKarGph88REPHGgRGdq R5lY/0I7yN1FYshqxtXR/o6TTQty2SKJYZdCB6xItWtsqp1VbOTe6S1nLCqtZpJt71pl G0Xg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1703296346; x=1703901146; 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=xohLWD0UNw7E4CxloMtBQln7aiOr7P7dbQQwHRMmxi8=; b=PYnpn7e+4ah5rH7RPAiODn7G9VGEqwncGVBFHSlexSk2873/LUAttHHJgB4y7bo02T CX10mEGUXycwrCZbtp5Xjcat1kL3OdCzGSakQsuYCqKSHdQ8QptTrQaCJ+Sw5HkUxux5 zhSXCZYkv5JsRyrtC0P1JqihB4xtAM0wQtnl6QhQaQtlILEjmJ7S+IWBeeYgyKmqfThY 1ubnEmg6nOexNw6Uo81gbpgAfnYIkaZVbETuvNqSukBgX1Ry9+iN1frvRPxSAT06t97A qslxcOVo82fRfCTQsAVYMVnxzd/ltJ3MdI+8gwlrko3ldS9ezKMYfKKB/Hw7gUZQO+Kd qy+A== X-Gm-Message-State: AOJu0YzdQeYZecBNbIfZ5BA24VGE9QguLSkVxU9DQfuvpd8f05abRfNq qjG2Y9paWDuwjHsVxrdzhf+fYS7VLa8E X-Google-Smtp-Source: AGHT+IGkz5CY7aVnBAjHrrTg1kbanOBskxvKEgEFTr7oUGcTJEOjgyeomw7hUSVq36kINBUP2ZVIww== X-Received: by 2002:a50:e719:0:b0:553:a3ec:3be1 with SMTP id a25-20020a50e719000000b00553a3ec3be1mr551571edn.163.1703296346266; Fri, 22 Dec 2023 17:52:26 -0800 (PST) Received: from ukaszb-l.semihalf.net (alfa56.extreme-net.one.pl. [213.77.89.56]) by smtp.gmail.com with ESMTPSA id h2-20020a0564020e8200b005532a337d51sm3288494eda.44.2023.12.22.17.52.24 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 22 Dec 2023 17:52:26 -0800 (PST) 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 , Simon Ser , John Ogness , Petr Mladek , Sergey Senozhatsky , linux-kernel@vger.kernel.org, upstream@semihalf.com Subject: [PATCH v3 22/22] dyndbg: id the bad word in parse-flags err msg Date: Sat, 23 Dec 2023 02:51:31 +0100 Message-ID: <20231223015131.2836090-23-lb@semihalf.com> X-Mailer: git-send-email 2.43.0.472.g3155946c3a-goog In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com> References: <20231223015131.2836090-1-lb@semihalf.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Jim Cromie If ddebug_parse_flags() rejects user input, identify that input value in the error message. Signed-off-by: Jim Cromie --- lib/dynamic_debug.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/lib/dynamic_debug.c b/lib/dynamic_debug.c index 4718e8faa719..d834581c785b 100644 --- a/lib/dynamic_debug.c +++ b/lib/dynamic_debug.c @@ -936,7 +936,7 @@ static int ddebug_exec_query(char *query_string, const = char *modname) =20 /* check flags 1st (last arg) so query is pairs of spec,val */ if (ddebug_parse_flags(words[nwords-1], &modifiers)) { - pr_err("flags parse failed\n"); + pr_err("flags parse failed on word-%d: %s\n", nwords-1, words[nwords-1]); goto err; } =20 --=20 2.43.0.472.g3155946c3a-goog