[PATCH 0/1] uprobes/tracing: Don't pass addr=ip toperf_trace_buf_submit()
From: Oleg Nesterov
Date: Wed Apr 10 2013 - 11:08:15 EST
On 04/08, Masami Hiramatsu wrote:
> (2013/04/06 0:01), Oleg Nesterov wrote:
> > Masami, perhaps you can also answer the question I asked in 0/4
> > marc.info/?l=linux-kernel&m=136458107403835 ?
> > Off-topic question... Why uprobe_perf_func() passes "addr = ip" to
> > perf_trace_buf_submit() ? This just sets perf_sample_data->addr for
> > PERF_SAMPLE_ADDR, do we really need this? and we already have
> > perf_sample_data->ip initialized by perf.
> > kprobe_perf_func() and kretprobe_perf_func() do the same.
> Good catch! I guess that I might misunderstood that it was used
> for sampling execution address. It should be replaced with (u64)0,
> as perf_trace_##call() does.
How about this trivial cleanup then? If I have your ack I'll add this
patch to other pending changes.
And... Cough, another question ;) To simplify, lets discuss kprobe_perf_func()
only. Suppose that a task hits the kprobe but this task/cpu doesn't have
a counter. Can't we avoid perf_trace_buf_prepare/submit in this case?
IOW, what do you think about the change below?
@@ -985,6 +985,10 @@ static __kprobes void kprobe_perf_func(s
int size, __size, dsize;
+ head = this_cpu_ptr(call->perf_events);
+ if (hlist_empty(head))
dsize = __get_data_size(tp, regs);
__size = sizeof(*entry) + tp->size + dsize;
size = ALIGN(__size + sizeof(u32), sizeof(u64));
@@ -1001,7 +1005,6 @@ static __kprobes void kprobe_perf_func(s
memset(&entry, 0, dsize);
store_trace_args(sizeof(*entry), tp, regs, (u8 *)&entry, dsize);
- head = this_cpu_ptr(call->perf_events);
perf_trace_buf_submit(entry, size, rctx,
entry->ip, 1, regs, head, NULL);
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/