Messages in this thread | | | Date | Tue, 22 Aug 2023 20:43:47 +0900 | From | Masami Hiramatsu (Google) <> | Subject | Re: [PATCH v3] tracing/eprobe: Iterate trace_eprobe directly |
| |
On Tue, 22 Aug 2023 10:24:33 +0800 Chuang Wang <nashuiliang@gmail.com> wrote:
> Refer to the description in [1], we can skip "container_of()" following > "list_for_each_entry()" by using "list_for_each_entry()" with > "struct trace_eprobe" and "tp.list". > > Also, this patch defines "for_each_trace_eprobe_tp" to simplify the code > of the same logic. > > [1] https://lore.kernel.org/all/CAHk-=wjakjw6-rDzDDBsuMoDCqd+9ogifR_EE1F0K-jYek1CdA@mail.gmail.com/ > > Signed-off-by: Chuang Wang <nashuiliang@gmail.com>
Thanks, this looks good to me.
Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
> --- > v2 -> v3: > - use "for_each_trace_eprobe_tp" instead of "for_each_trace_eprobe_on_trace_probe" > > v1 -> v2: > - add "for_each_trace_eprobe_on_trace_probe" as suggested by Masami > > v0 -> v1: > - remove "Fixes" in the commit information. > > kernel/trace/trace_eprobe.c | 18 +++++++++--------- > 1 file changed, 9 insertions(+), 9 deletions(-) > > diff --git a/kernel/trace/trace_eprobe.c b/kernel/trace/trace_eprobe.c > index a0a704ba27db..6a024b5912e2 100644 > --- a/kernel/trace/trace_eprobe.c > +++ b/kernel/trace/trace_eprobe.c > @@ -41,6 +41,10 @@ struct eprobe_data { > struct trace_eprobe *ep; > }; > > + > +#define for_each_trace_eprobe_tp(ep, _tp) \ > + list_for_each_entry(ep, trace_probe_probe_list(_tp), tp.list) > + > static int __trace_eprobe_create(int argc, const char *argv[]); > > static void trace_event_probe_cleanup(struct trace_eprobe *ep) > @@ -640,7 +644,7 @@ static int disable_eprobe(struct trace_eprobe *ep, > static int enable_trace_eprobe(struct trace_event_call *call, > struct trace_event_file *file) > { > - struct trace_probe *pos, *tp; > + struct trace_probe *tp; > struct trace_eprobe *ep; > bool enabled; > int ret = 0; > @@ -662,8 +666,7 @@ static int enable_trace_eprobe(struct trace_event_call *call, > if (enabled) > return 0; > > - list_for_each_entry(pos, trace_probe_probe_list(tp), list) { > - ep = container_of(pos, struct trace_eprobe, tp); > + for_each_trace_eprobe_tp(ep, tp) { > ret = enable_eprobe(ep, file); > if (ret) > break; > @@ -680,8 +683,7 @@ static int enable_trace_eprobe(struct trace_event_call *call, > */ > WARN_ON_ONCE(ret != -ENOMEM); > > - list_for_each_entry(pos, trace_probe_probe_list(tp), list) { > - ep = container_of(pos, struct trace_eprobe, tp); > + for_each_trace_eprobe_tp(ep, tp) { > disable_eprobe(ep, file->tr); > if (!--cnt) > break; > @@ -699,7 +701,7 @@ static int enable_trace_eprobe(struct trace_event_call *call, > static int disable_trace_eprobe(struct trace_event_call *call, > struct trace_event_file *file) > { > - struct trace_probe *pos, *tp; > + struct trace_probe *tp; > struct trace_eprobe *ep; > > tp = trace_probe_primary_from_call(call); > @@ -716,10 +718,8 @@ static int disable_trace_eprobe(struct trace_event_call *call, > trace_probe_clear_flag(tp, TP_FLAG_PROFILE); > > if (!trace_probe_is_enabled(tp)) { > - list_for_each_entry(pos, trace_probe_probe_list(tp), list) { > - ep = container_of(pos, struct trace_eprobe, tp); > + for_each_trace_eprobe_tp(ep, tp) > disable_eprobe(ep, file->tr); > - } > } > > out: > -- > 2.39.2 >
-- Masami Hiramatsu (Google) <mhiramat@kernel.org>
| |