From: Carsten Emde <Carsten.Emde@osadl.org>
To: Olof Johansson <olof@lixom.net>
Cc: mingo@redhat.com, hpa@zytor.com, linux-kernel@vger.kernel.org,
rostedt@goodmis.org, tglx@linutronix.de,
linux-tip-commits@vger.kernel.org
Subject: Re: [tip:tracing/urgent] tracing: Fix trace_marker output
Date: Sun, 06 Dec 2009 14:02:44 +0100 [thread overview]
Message-ID: <4B1BAB74.104@osadl.org> (raw)
In-Reply-To: <20091206051352.GA4628@lixom.net>
Olof,
> On Sun, Nov 22, 2009 at 10:24:48AM +0000, tip-bot for Carsten Emde wrote:
>> Commit-ID: c13d2f7c3231e873f30db92b96c8caa48f100f33
>> Gitweb: http://git.kernel.org/tip/c13d2f7c3231e873f30db92b96c8caa48f100f33
>> Author: Carsten Emde <Carsten.Emde@osadl.org>
>> AuthorDate: Mon, 16 Nov 2009 20:56:13 +0100
>> Committer: Steven Rostedt <rostedt@goodmis.org>
>> CommitDate: Tue, 17 Nov 2009 09:19:06 -0500
>>
>> tracing: Fix trace_marker output
>>
>> When a string was written to <debugfs>/tracing/trace_marker, some
>> strange characters appeared in the trace output instead of the
>> string, since a vprint function erroneously called a vararg print
>> function with a va_list argument. This patch fixes the problem and
>> simplifies the related code.
>
> [...]
>
>> diff --git a/kernel/trace/trace.c b/kernel/trace/trace.c
>> index 03c7fd5..12b49ca 100644
>> --- a/kernel/trace/trace.c
>> +++ b/kernel/trace/trace.c
>> @@ -1361,10 +1361,11 @@ int trace_array_vprintk(struct trace_array *tr,
>> pause_graph_tracing();
>> raw_local_irq_save(irq_flags);
>> __raw_spin_lock(&trace_buf_lock);
>> - len = vsnprintf(trace_buf, TRACE_BUF_SIZE, fmt, args);
>> -
>> - len = min(len, TRACE_BUF_SIZE-1);
>> - trace_buf[len] = 0;
>> + if (args == NULL) {
>> + strncpy(trace_buf, fmt, TRACE_BUF_SIZE);
>> + len = strlen(trace_buf);
>> + } else
>> + len = vsnprintf(trace_buf, TRACE_BUF_SIZE, fmt, args);
>
>
> Comparing a va_list with NULL is bogus. It's supposed to be treated like
> an opaque type and only be manipulated with va_* accessors.
>
> I wouldn't really care much, but it broke builds on some ARM platforms:
>
> kernel/trace/trace.c: In function 'trace_array_vprintk':
> kernel/trace/trace.c:1364: error: invalid operands to binary == (have 'va_list' and 'void *')
> kernel/trace/trace.c: In function 'tracing_mark_write':
> kernel/trace/trace.c:3349: error: incompatible type for argument 3 of 'trace_vprintk'
Having looked at other possible solutions, I find that the best thing to do
is to revert this part of the patch. Sorry that I didn't check it on ARM
platforms.
Carsten.
-=-
This patch partly reverts c13d2f7c3231e873f30db92b96c8caa48f100f33 and
re-installs Steven's original mark_printk() mechanism.
Signed-off-by: Carsten Emde <C.Emde@osadl.org>
Index: linux-2.6-tip/kernel/trace/trace.c
===================================================================
--- linux-2.6-tip.orig/kernel/trace/trace.c
+++ linux-2.6-tip/kernel/trace/trace.c
@@ -1361,11 +1361,7 @@ int trace_array_vprintk(struct trace_arr
pause_graph_tracing();
raw_local_irq_save(irq_flags);
__raw_spin_lock(&trace_buf_lock);
- if (args == NULL) {
- strncpy(trace_buf, fmt, TRACE_BUF_SIZE);
- len = strlen(trace_buf);
- } else
- len = vsnprintf(trace_buf, TRACE_BUF_SIZE, fmt, args);
+ len = vsnprintf(trace_buf, TRACE_BUF_SIZE, fmt, args);
size = sizeof(*entry) + len + 1;
buffer = tr->buffer;
@@ -3320,6 +3316,16 @@ tracing_entries_write(struct file *filp,
return cnt;
}
+static int mark_printk(const char *fmt, ...)
+{
+ int ret;
+ va_list args;
+ va_start(args, fmt);
+ ret = trace_vprintk(0, fmt, args);
+ va_end(args);
+ return ret;
+}
+
static ssize_t
tracing_mark_write(struct file *filp, const char __user *ubuf,
size_t cnt, loff_t *fpos)
@@ -3346,7 +3352,7 @@ tracing_mark_write(struct file *filp, co
} else
buf[cnt] = '\0';
- cnt = trace_vprintk(0, buf, NULL);
+ cnt = mark_printk("%s", buf);
kfree(buf);
*fpos += cnt;
next prev parent reply other threads:[~2009-12-06 13:10 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2009-11-16 19:56 [PATCH] ftrace: fix trace_marker output Carsten Emde
2009-11-16 22:15 ` Steven Rostedt
2009-11-17 14:18 ` Steven Rostedt
2009-11-17 15:20 ` [PATCH][GIT PULL][v2.6.32] tracing: Fix " Steven Rostedt
2009-11-22 10:24 ` [tip:tracing/urgent] " tip-bot for Carsten Emde
2009-12-06 5:13 ` Olof Johansson
2009-12-06 9:24 ` Carsten Emde
2009-12-06 13:02 ` Carsten Emde [this message]
2009-12-06 17:50 ` Olof Johansson
2009-12-09 4:19 ` [PATCH][GIT PULL][v2.6.33] tracing: Remove comparing of NULL to va_list in trace_array_vprintk() Steven Rostedt
2009-12-09 5:56 ` Ingo Molnar
2009-12-09 6:11 ` Ingo Molnar
2009-12-09 6:15 ` Ingo Molnar
2009-12-09 14:06 ` Steven Rostedt
2009-12-09 18:05 ` Steven Rostedt
2009-12-10 7:49 ` [tip:tracing/core] " tip-bot for Carsten Emde
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=4B1BAB74.104@osadl.org \
--to=carsten.emde@osadl.org \
--cc=hpa@zytor.com \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-tip-commits@vger.kernel.org \
--cc=mingo@redhat.com \
--cc=olof@lixom.net \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.