From: "Łukasz Bartosik" <lb@semihalf.com>
To: Jason Baron <jbaron@akamai.com>,
Jim Cromie <jim.cromie@gmail.com>,
Andrew Morton <akpm@linux-foundation.org>,
Kees Cook <keescook@chromium.org>,
Douglas Anderson <dianders@chromium.org>
Cc: Guenter Roeck <groeck@google.com>,
Yaniv Tzoreff <yanivt@google.com>,
Benson Leung <bleung@google.com>,
Steven Rostedt <rostedt@goodmis.org>,
Vincent Whitchurch <vincent.whitchurch@axis.com>,
Pekka Paalanen <ppaalanen@gmail.com>,
Sean Paul <seanpaul@chromium.org>,
Daniel Vetter <daniel@ffwll.ch>, Simon Ser <contact@emersion.fr>,
John Ogness <john.ogness@linutronix.de>,
Petr Mladek <pmladek@suse.com>,
Sergey Senozhatsky <sergey.senozhatsky@gmail.com>,
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 [thread overview]
Message-ID: <20231223015131.2836090-9-lb@semihalf.com> (raw)
In-Reply-To: <20231223015131.2836090-1-lb@semihalf.com>
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: Łukasz Bartosik <lb@semihalf.com>
---
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)));
enum class_map_type {
@@ -171,7 +176,7 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor,
.filename = __FILE__, \
.format = (fmt), \
.lineno = __LINE__, \
- .flags = _DPRINTK_FLAGS_DEFAULT, \
+ .ctrl = { .flags = _DPRINTK_FLAGS_DEFAULT }, \
.class_id = cls, \
_DPRINTK_KEY_INIT \
}; \
@@ -202,10 +207,10 @@ void __dynamic_ibdev_dbg(struct _ddebug *descriptor,
#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
#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 = off (default), 1 = module add/rm, 2 = >control summary, 3 = parsing, 4 = per-site changes)");
+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 = 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 *query,
nfound++;
- newflags = (dp->flags & modifiers->mask) | modifiers->flags;
- if (newflags == dp->flags)
+ newflags = (get_flags(dp) & modifiers->mask) | modifiers->flags;
+ if (newflags == 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 *query,
v4pr_info("changed %s:%d [%s]%s %s => %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 = newflags;
+ set_flags(dp, newflags);
}
}
mutex_unlock(&ddebug_lock);
@@ -824,10 +834,11 @@ static int remaining(int wrote)
static char *__dynamic_emit_prefix(const struct _ddebug *desc, char *buf)
{
+ unsigned int flags = get_flags(desc);
int pos_after_tid;
int pos = 0;
- if (desc->flags & _DPRINTK_FLAGS_INCL_TID) {
+ if (flags & _DPRINTK_FLAGS_INCL_TID) {
if (in_interrupt())
pos += snprintf(buf + pos, remaining(pos), "<intr> ");
else
@@ -835,16 +846,16 @@ static char *__dynamic_emit_prefix(const struct _ddebug *desc, char *buf)
task_pid_vnr(current));
}
pos_after_tid = pos;
- if (desc->flags & _DPRINTK_FLAGS_INCL_MODNAME)
+ if (flags & _DPRINTK_FLAGS_INCL_MODNAME)
pos += snprintf(buf + pos, remaining(pos), "%s:",
desc->modname);
- if (desc->flags & _DPRINTK_FLAGS_INCL_FUNCNAME)
+ if (flags & _DPRINTK_FLAGS_INCL_FUNCNAME)
pos += snprintf(buf + pos, remaining(pos), "%s:",
desc->function);
- if (desc->flags & _DPRINTK_FLAGS_INCL_SOURCENAME)
+ if (flags & _DPRINTK_FLAGS_INCL_SOURCENAME)
pos += snprintf(buf + pos, remaining(pos), "%s:",
trim_prefix(desc->filename));
- if (desc->flags & _DPRINTK_FLAGS_INCL_LINENO)
+ if (flags & _DPRINTK_FLAGS_INCL_LINENO)
pos += 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)
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 struct 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;
va_start(args, fmt);
@@ -928,7 +940,7 @@ static void ddebug_printk(struct _ddebug *desc, const char *fmt, ...)
va_end(args);
}
- if (desc->flags & _DPRINTK_FLAGS_PRINTK) {
+ if (get_flags(desc) & _DPRINTK_FLAGS_PRINTK) {
va_list args;
va_start(args, fmt);
@@ -942,7 +954,7 @@ static void ddebug_dev_printk(struct _ddebug *desc, const struct device *dev,
const char *fmt, ...)
{
- if (desc->flags & _DPRINTK_FLAGS_TRACE) {
+ if (get_flags(desc) & _DPRINTK_FLAGS_TRACE) {
va_list args;
va_start(args, fmt);
@@ -950,7 +962,7 @@ static void ddebug_dev_printk(struct _ddebug *desc, const struct device *dev,
va_end(args);
}
- if (desc->flags & _DPRINTK_FLAGS_PRINTK) {
+ if (get_flags(desc) & _DPRINTK_FLAGS_PRINTK) {
va_list args;
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 =%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, "\"");
--
2.43.0.472.g3155946c3a-goog
next prev parent reply other threads:[~2023-12-23 1:52 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2023-12-23 1:51 [PATCH v3 00/22] dyndbg: add support for writing debug logs to trace Łukasz Bartosik
2023-12-23 1:51 ` [PATCH v3 01/22] dyndbg: add _DPRINTK_FLAGS_ENABLED Łukasz Bartosik
2023-12-23 1:51 ` [PATCH v3 02/22] dyndbg: add _DPRINTK_FLAGS_TRACE Łukasz Bartosik
2023-12-23 1:51 ` [PATCH v3 03/22] dyndbg: add write events to tracefs code Łukasz Bartosik
2023-12-23 1:51 ` [PATCH v3 04/22] dyndbg: add 2 trace-events: prdbg, devdbg Łukasz Bartosik
2023-12-23 1:51 ` [PATCH v3 05/22] tracefs: add __get_str_strip_nl - RFC Łukasz Bartosik
2023-12-23 1:51 ` [PATCH v3 06/22] dyndbg: use __get_str_strip_nl in prdbg and devdbg Łukasz Bartosik
2023-12-23 1:51 ` [PATCH v3 07/22] dyndbg: repack _ddebug structure Łukasz Bartosik
2023-12-23 1:51 ` Łukasz Bartosik [this message]
2023-12-23 1:51 ` [PATCH v3 09/22] dyndbg: add trace destination field to _ddebug Łukasz Bartosik
2023-12-23 1:51 ` [PATCH v3 10/22] dyndbg: add open and close commands for trace Łukasz Bartosik
2023-12-23 1:51 ` [PATCH v3 11/22] dyndbg: don't close trace instance when in use Łukasz Bartosik
2023-12-23 1:51 ` [PATCH v3 12/22] dyndbg: add processing of T(race) flag argument Łukasz Bartosik
2023-12-23 1:51 ` [PATCH v3 13/22] dyndbg: add support for default trace destination Łukasz Bartosik
2023-12-23 1:51 ` [PATCH v3 14/22] dyndbg: write debug logs to trace instance Łukasz Bartosik
2023-12-23 1:51 ` [PATCH v3 15/22] dyndbg: add support for hex_dump output to trace Łukasz Bartosik
2023-12-23 1:51 ` [PATCH v3 16/22] dyndbg: disambiguate quoting in a debug msg Łukasz Bartosik
2023-12-23 1:51 ` [PATCH v3 17/22] dyndbg: fix old BUG_ON in >control parser Łukasz Bartosik
2023-12-23 1:51 ` [PATCH v3 18/22] dyndbg: treat comma as a token separator Łukasz Bartosik
2023-12-23 1:51 ` [PATCH v3 19/22] dyndbg: add skip_spaces_and_coma() Łukasz Bartosik
2023-12-23 1:51 ` [PATCH v3 20/22] dyndbg: split multi-query strings with % Łukasz Bartosik
2023-12-23 1:51 ` [PATCH v3 21/22] dyndbg: reduce verbose/debug clutter Łukasz Bartosik
2023-12-23 1:51 ` [PATCH v3 22/22] dyndbg: id the bad word in parse-flags err msg Łukasz Bartosik
2023-12-27 4:22 ` [PATCH v3 00/22] dyndbg: add support for writing debug logs to trace jim.cromie
2023-12-27 4:44 ` jim.cromie
2023-12-29 0:05 ` Łukasz Bartosik
2023-12-29 0:00 ` Łukasz Bartosik
2024-01-02 19:13 ` jim.cromie
2024-01-03 16:27 ` Łukasz Bartosik
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20231223015131.2836090-9-lb@semihalf.com \
--to=lb@semihalf.com \
--cc=akpm@linux-foundation.org \
--cc=bleung@google.com \
--cc=contact@emersion.fr \
--cc=daniel@ffwll.ch \
--cc=dianders@chromium.org \
--cc=groeck@google.com \
--cc=jbaron@akamai.com \
--cc=jim.cromie@gmail.com \
--cc=john.ogness@linutronix.de \
--cc=keescook@chromium.org \
--cc=linux-kernel@vger.kernel.org \
--cc=pmladek@suse.com \
--cc=ppaalanen@gmail.com \
--cc=rostedt@goodmis.org \
--cc=seanpaul@chromium.org \
--cc=sergey.senozhatsky@gmail.com \
--cc=upstream@semihalf.com \
--cc=vincent.whitchurch@axis.com \
--cc=yanivt@google.com \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox