Skip to content

Commit

Permalink
dynamic_debug: Remove uses of KERN_CONT in dynamic_emit_prefix
Browse files Browse the repository at this point in the history
Multiple printks with KERN_CONT can be interleaved by
other printks.  Reduce the likelihood of that interleaving
by consolidating multiple calls to printk.

Signed-off-by: Joe Perches <joe@perches.com>
Signed-off-by: Jason Baron <jbaron@redhat.com>
Signed-off-by: Greg Kroah-Hartman <gregkh@suse.de>
  • Loading branch information
JoePerches authored and gregkh committed Aug 23, 2011
1 parent 6c2140e commit 5b2ebce
Showing 1 changed file with 23 additions and 11 deletions.
34 changes: 23 additions & 11 deletions lib/dynamic_debug.c
Original file line number Diff line number Diff line change
Expand Up @@ -430,23 +430,35 @@ static int ddebug_exec_query(char *query_string)

static int dynamic_emit_prefix(const struct _ddebug *descriptor)
{
int res;
char tid[sizeof(int) + sizeof(int)/2 + 4];
char lineno[sizeof(int) + sizeof(int)/2];

res = printk(KERN_DEBUG);
if (descriptor->flags & _DPRINTK_FLAGS_INCL_TID) {
if (in_interrupt())
res += printk(KERN_CONT "<intr> ");
snprintf(tid, sizeof(tid), "%s", "<intr> ");
else
res += printk(KERN_CONT "[%d] ", task_pid_vnr(current));
snprintf(tid, sizeof(tid), "[%d] ",
task_pid_vnr(current));
} else {
tid[0] = 0;
}
if (descriptor->flags & _DPRINTK_FLAGS_INCL_MODNAME)
res += printk(KERN_CONT "%s:", descriptor->modname);
if (descriptor->flags & _DPRINTK_FLAGS_INCL_FUNCNAME)
res += printk(KERN_CONT "%s:", descriptor->function);
if (descriptor->flags & _DPRINTK_FLAGS_INCL_LINENO)
res += printk(KERN_CONT "%d ", descriptor->lineno);

return res;
if (descriptor->flags & _DPRINTK_FLAGS_INCL_LINENO)
snprintf(lineno, sizeof(lineno), "%d", descriptor->lineno);
else
lineno[0] = 0;

return printk(KERN_DEBUG "%s%s%s%s%s%s",
tid,
(descriptor->flags & _DPRINTK_FLAGS_INCL_MODNAME) ?
descriptor->modname : "",
(descriptor->flags & _DPRINTK_FLAGS_INCL_MODNAME) ?
":" : "",
(descriptor->flags & _DPRINTK_FLAGS_INCL_FUNCNAME) ?
descriptor->function : "",
(descriptor->flags & _DPRINTK_FLAGS_INCL_FUNCNAME) ?
":" : "",
lineno);
}

int __dynamic_pr_debug(struct _ddebug *descriptor, const char *fmt, ...)
Expand Down

0 comments on commit 5b2ebce

Please sign in to comment.