From: Masami Hiramatsu <mhiramat@redhat.com>
To: Mathieu Desnoyers <mathieu.desnoyers@polymtl.ca>
Cc: Peter Zijlstra <peterz@infradead.org>,
Steven Rostedt <rostedt@goodmis.org>,
"Frank Ch. Eigler" <fche@redhat.com>, Ingo Molnar <mingo@elte.hu>,
LKML <linux-kernel@vger.kernel.org>,
systemtap-ml <systemtap@sources.redhat.com>,
Hideo AOKI <haoki@redhat.com>
Subject: Re: [RFC][Patch 2/2] markers: example of irq regular kernel markers
Date: Fri, 20 Jun 2008 15:34:38 -0400 [thread overview]
Message-ID: <485C064E.5020705@redhat.com> (raw)
In-Reply-To: <20080620174529.GB10943@Krystal>
Hi Mathieu,
Mathieu Desnoyers wrote:
> * Masami Hiramatsu (mhiramat@redhat.com) wrote:
>> Add trace points of irq handle events ported from LTTng's markers.
>>
>> Signed-off-by: Masami Hiramatsu <mhiramat@redhat.com>
>> ---
>> I just rewrote LTTng's irq event by using DEFINE_TRACE for example.
>>
>> include/linux/irq_trace.h | 6 ++++++
>> kernel/irq/handle.c | 6 ++++++
>> 2 files changed, 12 insertions(+)
>>
>> Index: 2.6.26-rc5-mm3/include/linux/irq_trace.h
>> ===================================================================
>> --- /dev/null 1970-01-01 00:00:00.000000000 +0000
>> +++ 2.6.26-rc5-mm3/include/linux/irq_trace.h 2008-06-16 12:27:51.000000000 -0400
>> @@ -0,0 +1,6 @@
>> +#include <linux/marker.h>
>> +
>> +DEFINE_TRACE(irq_entry, (int irq_id, int kernel_mode), irq_id, kernel_mode);
>> +
>> +DEFINE_TRACE(irq_exit, (void));
>> +
>
> All this work look good, thanks Masami! Sorry I did not find time to do
> it lately, I've been busy on other things. A small question though :
> since LTTng is configurable both as an external module or as an
> in-kernel tracer, I wonder if it would really hurt to add the format
> strings to DEFINE_TRACE, e.g. :
>
> DEFINE_TRACE(name, prototype, format_string, args...)
>
> which would give :
>
> DEFINE_TRACE(irq_entry, (int irq_id, int kernel_mode), "%d %d",
> irq_id, kernel_mode);
>
> DEFINE_TRACE(irq_exit, (void), MARK_NOARGS);
>
> and calling this in the kernel code :
>
> trace_irq_entry(irq, (regs)?(!user_mode(regs)):(1));
> ...
> trace_irq_exit();
>
> and for quick-and-dirty debug usage, one would add this to kernel code :
>
> trace_mark(subsystem_event, "(int arg, struct task_struct *task)",
> "%d %p", arg, current);
why would you complicate it? I think.
trace_mark(subsystem_event, "arg %d task %p", arg, current);
is enough for user-defined markers.
>
> By doing so, we could leave a gcc format string check by passing the
> format string to __mark_check_format(). We could extract the field names
> from the prototype, so there is no need to duplicate field information
> in the format string.
I thought that someone complained against those format strings in
kernel code. Thus I removed it from DEFINE_TRACE.
even though, I think you can do that by adding below string table
to LTTng module.
const char *lookup_table[MAX_MARKERS][2] = {
{"irq_entry", "%d %d"}, // or "(int irq_id, int kernel_mode)", "%d %d"
...
};
>
> Since the format string information is hidden in a header but kept at
> the same location as the trace point definition, I think it reaches
> goals of being "neat", efficient for general purpose tracers and to keep
> the tracepoint information all in one place so we don't end up adding
> stuff to various information consumers whenever a new trace point is
> added.
Hmm, IMHO, there seems no difference between
DEFINE_TRACE(irq_entry, (int irq_id, int kernel_mode), "%d %d",
irq_id, kernel_mode);
and
trace_irq_entry(int irq_id, int kernel_mode)
{
trace_mark(irq_entry, "%d %d", irq_id, kernel_mode);
}
for me. If so, we'd better use latter because of simplicity:-)
Thank you,
>
> What do you think of these changes ?
>
> Mathieu
>
>
>> Index: 2.6.26-rc5-mm3/kernel/irq/handle.c
>> ===================================================================
>> --- 2.6.26-rc5-mm3.orig/kernel/irq/handle.c 2008-06-16 12:27:50.000000000 -0400
>> +++ 2.6.26-rc5-mm3/kernel/irq/handle.c 2008-06-16 12:27:51.000000000 -0400
>> @@ -15,6 +15,7 @@
>> #include <linux/random.h>
>> #include <linux/interrupt.h>
>> #include <linux/kernel_stat.h>
>> +#include <linux/irq_trace.h>
>>
>> #include "internals.h"
>>
>> @@ -130,6 +131,9 @@ irqreturn_t handle_IRQ_event(unsigned in
>> {
>> irqreturn_t ret, retval = IRQ_NONE;
>> unsigned int status = 0;
>> + struct pt_regs *regs = get_irq_regs();
>> +
>> + trace_irq_entry(irq, (regs)?(!user_mode(regs)):(1));
>>
>> handle_dynamic_tick(action);
>>
>> @@ -148,6 +152,8 @@ irqreturn_t handle_IRQ_event(unsigned in
>> add_interrupt_randomness(irq);
>> local_irq_disable();
>>
>> + trace_irq_exit();
>> +
>> return retval;
>> }
>>
>> --
>> Masami Hiramatsu
>>
>> Software Engineer
>> Hitachi Computer Products (America) Inc.
>> Software Solutions Division
>>
>> e-mail: mhiramat@redhat.com
>>
>
--
Masami Hiramatsu
Software Engineer
Hitachi Computer Products (America) Inc.
Software Solutions Division
e-mail: mhiramat@redhat.com
next prev parent reply other threads:[~2008-06-20 19:36 UTC|newest]
Thread overview: 45+ messages / expand[flat|nested] mbox.gz Atom feed top
2008-06-20 17:03 [RFC][Patch 2/2] markers: example of irq regular kernel markers Masami Hiramatsu
2008-06-20 17:45 ` Mathieu Desnoyers
2008-06-20 19:34 ` Masami Hiramatsu [this message]
2008-06-21 10:12 ` KOSAKI Motohiro
2008-06-21 14:36 ` Steven Rostedt
2008-06-21 14:53 ` Frank Ch. Eigler
2008-06-21 15:07 ` Steven Rostedt
2008-06-21 16:13 ` Peter Zijlstra
2008-06-21 18:02 ` Frank Ch. Eigler
2008-06-22 4:31 ` Masami Hiramatsu
2008-06-23 2:19 ` KOSAKI Motohiro
2008-06-21 19:39 ` Frank Ch. Eigler
2008-06-22 4:00 ` Masami Hiramatsu
2008-06-20 20:07 ` Peter Zijlstra
2008-06-22 17:11 ` [RFC] Tracepoint proposal Mathieu Desnoyers
2008-06-22 17:59 ` Alexey Dobriyan
2008-06-22 18:27 ` Mathieu Desnoyers
2008-06-24 0:20 ` Alexey Dobriyan
2008-06-24 4:01 ` Masami Hiramatsu
2008-06-24 7:15 ` Takashi Nishiie
2008-06-24 11:55 ` Frank Ch. Eigler
2008-06-24 16:04 ` Masami Hiramatsu
2008-06-24 16:21 ` KOSAKI Motohiro
2008-06-24 17:01 ` Masami Hiramatsu
2008-06-24 17:46 ` Mathieu Desnoyers
2008-06-25 23:52 ` [RFC PATCH] Kernel Tracepoints Mathieu Desnoyers
2008-06-26 21:02 ` Masami Hiramatsu
2008-06-27 13:14 ` Mathieu Desnoyers
2008-06-27 22:45 ` Masami Hiramatsu
2008-06-30 15:43 ` Mathieu Desnoyers
2008-06-27 13:15 ` Mathieu Desnoyers
2008-06-30 19:38 ` Masami Hiramatsu
2008-06-27 13:30 ` Mathieu Desnoyers
2008-06-27 20:58 ` Masami Hiramatsu
2008-06-30 15:40 ` Mathieu Desnoyers
2008-06-30 19:58 ` Masami Hiramatsu
2008-07-03 15:12 ` Mathieu Desnoyers
2008-07-03 18:51 ` Masami Hiramatsu
2008-06-27 13:36 ` [RFC PATCH] Kernel Tracepoints (update) Mathieu Desnoyers
2008-07-03 15:27 ` Masami Hiramatsu
2008-07-03 15:47 ` Mathieu Desnoyers
2008-07-03 18:18 ` Mathieu Desnoyers
2008-07-03 18:46 ` Masami Hiramatsu
2008-06-25 23:55 ` [RFC PATCH] Tracepoint sched probes Mathieu Desnoyers
2008-06-24 3:09 ` [RFC] Tracepoint proposal Masami Hiramatsu
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=485C064E.5020705@redhat.com \
--to=mhiramat@redhat.com \
--cc=fche@redhat.com \
--cc=haoki@redhat.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@polymtl.ca \
--cc=mingo@elte.hu \
--cc=peterz@infradead.org \
--cc=rostedt@goodmis.org \
--cc=systemtap@sources.redhat.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 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.