dynamic_debug: Remove uses of KERN_CONT in dynamic_emit_prefix

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>
This commit is contained in:
Joe Perches 2011-08-11 14:36:29 -04:00 committed by Greg Kroah-Hartman
parent 6c2140ee0e
commit 5b2ebce482
1 changed files with 23 additions and 11 deletions

View File

@ -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, ...)