Message ID | 20210819041842.291622924@goodmis.org (mailing list archive) |
---|---|
State | Superseded |
Headers | show |
Series | tracing: Creation of event probe | expand |
On Thu, 19 Aug 2021 00:13:28 -0400 Steven Rostedt <rostedt@goodmis.org> wrote: > From: "Steven Rostedt (VMware)" <rostedt@goodmis.org> > > In preparation to allow event probes to use the process_fetch_insn() > callback in trace_probe_tmpl.h, change the data passed to it from a > pointer to pt_regs, as the event probe will not be using regs, and make it > a void pointer instead. Yes, it is reasonable to be updated in the separated patch. Acked-by: Masami Hiramatsu <mhiramat@kernel.org> Thank you! > > Update the process_fetch_insn() callers for kprobe and uprobe events to > have the regs defined in the function and just typecast the void pointer > parameter. > > Signed-off-by: Steven Rostedt (VMware) <rostedt@goodmis.org> > --- > kernel/trace/trace_kprobe.c | 3 ++- > kernel/trace/trace_probe_tmpl.h | 6 +++--- > kernel/trace/trace_uprobe.c | 3 ++- > 3 files changed, 7 insertions(+), 5 deletions(-) > > diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c > index c6fe7a6e3f35..4b013d24f5a9 100644 > --- a/kernel/trace/trace_kprobe.c > +++ b/kernel/trace/trace_kprobe.c > @@ -1325,9 +1325,10 @@ probe_mem_read(void *dest, void *src, size_t size) > > /* Note that we don't verify it, since the code does not come from user space */ > static int > -process_fetch_insn(struct fetch_insn *code, struct pt_regs *regs, void *dest, > +process_fetch_insn(struct fetch_insn *code, void *rec, void *dest, > void *base) > { > + struct pt_regs *regs = rec; > unsigned long val; > > retry: > diff --git a/kernel/trace/trace_probe_tmpl.h b/kernel/trace/trace_probe_tmpl.h > index f003c5d02a3a..b3bdb8ddb862 100644 > --- a/kernel/trace/trace_probe_tmpl.h > +++ b/kernel/trace/trace_probe_tmpl.h > @@ -54,7 +54,7 @@ fetch_apply_bitfield(struct fetch_insn *code, void *buf) > * If dest is NULL, don't store result and return required dynamic data size. > */ > static int > -process_fetch_insn(struct fetch_insn *code, struct pt_regs *regs, > +process_fetch_insn(struct fetch_insn *code, void *rec, > void *dest, void *base); > static nokprobe_inline int fetch_store_strlen(unsigned long addr); > static nokprobe_inline int > @@ -188,7 +188,7 @@ __get_data_size(struct trace_probe *tp, struct pt_regs *regs) > > /* Store the value of each argument */ > static nokprobe_inline void > -store_trace_args(void *data, struct trace_probe *tp, struct pt_regs *regs, > +store_trace_args(void *data, struct trace_probe *tp, void *rec, > int header_size, int maxlen) > { > struct probe_arg *arg; > @@ -203,7 +203,7 @@ store_trace_args(void *data, struct trace_probe *tp, struct pt_regs *regs, > /* Point the dynamic data area if needed */ > if (unlikely(arg->dynamic)) > *dl = make_data_loc(maxlen, dyndata - base); > - ret = process_fetch_insn(arg->code, regs, dl, base); > + ret = process_fetch_insn(arg->code, rec, dl, base); > if (unlikely(ret < 0 && arg->dynamic)) { > *dl = make_data_loc(0, dyndata - base); > } else { > diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c > index 09f8ca7f7ba0..d219ba50efbd 100644 > --- a/kernel/trace/trace_uprobe.c > +++ b/kernel/trace/trace_uprobe.c > @@ -213,9 +213,10 @@ static unsigned long translate_user_vaddr(unsigned long file_offset) > > /* Note that we don't verify it, since the code does not come from user space */ > static int > -process_fetch_insn(struct fetch_insn *code, struct pt_regs *regs, void *dest, > +process_fetch_insn(struct fetch_insn *code, void *rec, void *dest, > void *base) > { > + struct pt_regs *regs = rec; > unsigned long val; > > /* 1st stage: get value from context */ > -- > 2.30.2
diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c index c6fe7a6e3f35..4b013d24f5a9 100644 --- a/kernel/trace/trace_kprobe.c +++ b/kernel/trace/trace_kprobe.c @@ -1325,9 +1325,10 @@ probe_mem_read(void *dest, void *src, size_t size) /* Note that we don't verify it, since the code does not come from user space */ static int -process_fetch_insn(struct fetch_insn *code, struct pt_regs *regs, void *dest, +process_fetch_insn(struct fetch_insn *code, void *rec, void *dest, void *base) { + struct pt_regs *regs = rec; unsigned long val; retry: diff --git a/kernel/trace/trace_probe_tmpl.h b/kernel/trace/trace_probe_tmpl.h index f003c5d02a3a..b3bdb8ddb862 100644 --- a/kernel/trace/trace_probe_tmpl.h +++ b/kernel/trace/trace_probe_tmpl.h @@ -54,7 +54,7 @@ fetch_apply_bitfield(struct fetch_insn *code, void *buf) * If dest is NULL, don't store result and return required dynamic data size. */ static int -process_fetch_insn(struct fetch_insn *code, struct pt_regs *regs, +process_fetch_insn(struct fetch_insn *code, void *rec, void *dest, void *base); static nokprobe_inline int fetch_store_strlen(unsigned long addr); static nokprobe_inline int @@ -188,7 +188,7 @@ __get_data_size(struct trace_probe *tp, struct pt_regs *regs) /* Store the value of each argument */ static nokprobe_inline void -store_trace_args(void *data, struct trace_probe *tp, struct pt_regs *regs, +store_trace_args(void *data, struct trace_probe *tp, void *rec, int header_size, int maxlen) { struct probe_arg *arg; @@ -203,7 +203,7 @@ store_trace_args(void *data, struct trace_probe *tp, struct pt_regs *regs, /* Point the dynamic data area if needed */ if (unlikely(arg->dynamic)) *dl = make_data_loc(maxlen, dyndata - base); - ret = process_fetch_insn(arg->code, regs, dl, base); + ret = process_fetch_insn(arg->code, rec, dl, base); if (unlikely(ret < 0 && arg->dynamic)) { *dl = make_data_loc(0, dyndata - base); } else { diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c index 09f8ca7f7ba0..d219ba50efbd 100644 --- a/kernel/trace/trace_uprobe.c +++ b/kernel/trace/trace_uprobe.c @@ -213,9 +213,10 @@ static unsigned long translate_user_vaddr(unsigned long file_offset) /* Note that we don't verify it, since the code does not come from user space */ static int -process_fetch_insn(struct fetch_insn *code, struct pt_regs *regs, void *dest, +process_fetch_insn(struct fetch_insn *code, void *rec, void *dest, void *base) { + struct pt_regs *regs = rec; unsigned long val; /* 1st stage: get value from context */