Re: [PATCH v2 11/11] Uprobes traceevents patch.

From: Masami Hiramatsu
Date: Thu Apr 01 2010 - 00:18:37 EST


Hi Steven,

Steven Rostedt wrote:
> On Wed, 2010-03-31 at 21:23 +0530, Srikar Dronamraju wrote:
>
>> libftrace-y := ftrace.o
>> diff --git a/kernel/trace/trace.h b/kernel/trace/trace.h
>> index 2825ef2..9fe02ab 100644
>> --- a/kernel/trace/trace.h
>> +++ b/kernel/trace/trace.h
>> @@ -126,6 +126,18 @@ struct kretprobe_trace_entry {
>> (offsetof(struct kretprobe_trace_entry, args) + \
>> (sizeof(unsigned long) * (n)))
>>
>> +struct uprobe_trace_entry {
>> + struct trace_entry ent;
>> + pid_t pid;
>
> Unless pid is not the current pid, ent already records it.

Indeed.

>> + unsigned long ip;
>> + int nargs;
>> + unsigned long args[];
>> +};
>
> Note, you want to really add this to trace_entries.h instead:
>
> FTRACE_ENTRY(uprobe, uprobe_trace_entry,
>
> TRACE_GRAPH_ENT,
>
> F_STRUCT(
> __field( unsigned long, ip )
> __field( int, nargs )
> __dynamic_array(unsigned long, args )
> ),
>
> F_printk("%lx nrargs:%u", __entry->ip, __entry->nargs)
> );
>
>
> This will put this event into the events/ftrace directory. Don't worry
> about the printk format, we can write a plugin for it to override it if
> need be.

Hmm, interesting idea. But this dynamic event definition allows us
to filter events based on each argument value.

As you can see this code,

>> +struct probe_arg {
>> + struct fetch_func fetch;
>> + const char *name;
>> +};

each argument can have unique name. Therefore user can write a filter
by using these names.

Moreover, dynamic events (at least kprobe-tracer) are going to support
'types' for each argument. this means that the arg[] in *probe_trace_entry
will be no longer an unsigned long array.

Thank you,

--
Masami Hiramatsu
e-mail: mhiramat@xxxxxxxxxx
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/