From: Masami Hiramatsu (Google) <mhiramat@kernel.org>
To: Song Chen <chensong_2000@189.cn>
Cc: rostedt@goodmis.org, arnd@arndb.de, linux-kernel@vger.kernel.org,
linux-trace-kernel@vger.kernel.org, linux-arch@vger.kernel.org
Subject: Re: [PATCH v5 1/3] kernel/trace: Introduce trace_probe_print_args and use it in *probes
Date: Tue, 3 Jan 2023 22:30:53 +0900 [thread overview]
Message-ID: <20230103223053.d82c08125d8bcb83761b65ea@kernel.org> (raw)
In-Reply-To: <1672382000-18304-1-git-send-email-chensong_2000@189.cn>
On Fri, 30 Dec 2022 14:33:19 +0800
Song Chen <chensong_2000@189.cn> wrote:
> print_probe_args is currently inplemented in trace_probe_tmpl.h and
> included by *probes, as a result, each probe has an identical copy.
>
> This patch will move it to trace_probe.c as an new API, each probe
> calls it to print their args in trace file.
>
This looks good to me.
Acked-by: Masami Hiramatsu (Google) <mhiramat@kernel.org>
Thanks!
> Signed-off-by: Song Chen <chensong_2000@189.cn>
> ---
> kernel/trace/trace_eprobe.c | 2 +-
> kernel/trace/trace_kprobe.c | 4 ++--
> kernel/trace/trace_probe.c | 27 +++++++++++++++++++++++++++
> kernel/trace/trace_probe.h | 2 ++
> kernel/trace/trace_probe_tmpl.h | 28 ----------------------------
> kernel/trace/trace_uprobe.c | 2 +-
> 6 files changed, 33 insertions(+), 32 deletions(-)
>
> diff --git a/kernel/trace/trace_eprobe.c b/kernel/trace/trace_eprobe.c
> index 5dd0617e5df6..bdb26eee7a0c 100644
> --- a/kernel/trace/trace_eprobe.c
> +++ b/kernel/trace/trace_eprobe.c
> @@ -310,7 +310,7 @@ print_eprobe_event(struct trace_iterator *iter, int flags,
>
> trace_seq_putc(s, ')');
>
> - if (print_probe_args(s, tp->args, tp->nr_args,
> + if (trace_probe_print_args(s, tp->args, tp->nr_args,
> (u8 *)&field[1], field) < 0)
> goto out;
>
> diff --git a/kernel/trace/trace_kprobe.c b/kernel/trace/trace_kprobe.c
> index 5a75b039e586..a4ffa864dbb7 100644
> --- a/kernel/trace/trace_kprobe.c
> +++ b/kernel/trace/trace_kprobe.c
> @@ -1426,7 +1426,7 @@ print_kprobe_event(struct trace_iterator *iter, int flags,
>
> trace_seq_putc(s, ')');
>
> - if (print_probe_args(s, tp->args, tp->nr_args,
> + if (trace_probe_print_args(s, tp->args, tp->nr_args,
> (u8 *)&field[1], field) < 0)
> goto out;
>
> @@ -1461,7 +1461,7 @@ print_kretprobe_event(struct trace_iterator *iter, int flags,
>
> trace_seq_putc(s, ')');
>
> - if (print_probe_args(s, tp->args, tp->nr_args,
> + if (trace_probe_print_args(s, tp->args, tp->nr_args,
> (u8 *)&field[1], field) < 0)
> goto out;
>
> diff --git a/kernel/trace/trace_probe.c b/kernel/trace/trace_probe.c
> index 36dff277de46..ae13b6b2d5da 100644
> --- a/kernel/trace/trace_probe.c
> +++ b/kernel/trace/trace_probe.c
> @@ -1218,3 +1218,30 @@ int trace_probe_create(const char *raw_command, int (*createfn)(int, const char
>
> return ret;
> }
> +
> +int trace_probe_print_args(struct trace_seq *s, struct probe_arg *args, int nr_args,
> + u8 *data, void *field)
> +{
> + void *p;
> + int i, j;
> +
> + for (i = 0; i < nr_args; i++) {
> + struct probe_arg *a = args + i;
> +
> + trace_seq_printf(s, " %s=", a->name);
> + if (likely(!a->count)) {
> + if (!a->type->print(s, data + a->offset, field))
> + return -ENOMEM;
> + continue;
> + }
> + trace_seq_putc(s, '{');
> + p = data + a->offset;
> + for (j = 0; j < a->count; j++) {
> + if (!a->type->print(s, p, field))
> + return -ENOMEM;
> + trace_seq_putc(s, j == a->count - 1 ? '}' : ',');
> + p += a->type->size;
> + }
> + }
> + return 0;
> +}
> diff --git a/kernel/trace/trace_probe.h b/kernel/trace/trace_probe.h
> index de38f1c03776..cfef198013af 100644
> --- a/kernel/trace/trace_probe.h
> +++ b/kernel/trace/trace_probe.h
> @@ -343,6 +343,8 @@ int trace_probe_compare_arg_type(struct trace_probe *a, struct trace_probe *b);
> bool trace_probe_match_command_args(struct trace_probe *tp,
> int argc, const char **argv);
> int trace_probe_create(const char *raw_command, int (*createfn)(int, const char **));
> +int trace_probe_print_args(struct trace_seq *s, struct probe_arg *args, int nr_args,
> + u8 *data, void *field);
>
> #define trace_probe_for_each_link(pos, tp) \
> list_for_each_entry(pos, &(tp)->event->files, list)
> diff --git a/kernel/trace/trace_probe_tmpl.h b/kernel/trace/trace_probe_tmpl.h
> index b3bdb8ddb862..1b57420857e1 100644
> --- a/kernel/trace/trace_probe_tmpl.h
> +++ b/kernel/trace/trace_probe_tmpl.h
> @@ -212,31 +212,3 @@ store_trace_args(void *data, struct trace_probe *tp, void *rec,
> }
> }
> }
> -
> -static inline int
> -print_probe_args(struct trace_seq *s, struct probe_arg *args, int nr_args,
> - u8 *data, void *field)
> -{
> - void *p;
> - int i, j;
> -
> - for (i = 0; i < nr_args; i++) {
> - struct probe_arg *a = args + i;
> -
> - trace_seq_printf(s, " %s=", a->name);
> - if (likely(!a->count)) {
> - if (!a->type->print(s, data + a->offset, field))
> - return -ENOMEM;
> - continue;
> - }
> - trace_seq_putc(s, '{');
> - p = data + a->offset;
> - for (j = 0; j < a->count; j++) {
> - if (!a->type->print(s, p, field))
> - return -ENOMEM;
> - trace_seq_putc(s, j == a->count - 1 ? '}' : ',');
> - p += a->type->size;
> - }
> - }
> - return 0;
> -}
> diff --git a/kernel/trace/trace_uprobe.c b/kernel/trace/trace_uprobe.c
> index fb58e86dd117..1ff8f87211a6 100644
> --- a/kernel/trace/trace_uprobe.c
> +++ b/kernel/trace/trace_uprobe.c
> @@ -1041,7 +1041,7 @@ print_uprobe_event(struct trace_iterator *iter, int flags, struct trace_event *e
> data = DATAOF_TRACE_ENTRY(entry, false);
> }
>
> - if (print_probe_args(s, tu->tp.args, tu->tp.nr_args, data, entry) < 0)
> + if (trace_probe_print_args(s, tu->tp.args, tu->tp.nr_args, data, entry) < 0)
> goto out;
>
> trace_seq_putc(s, '\n');
> --
> 2.25.1
>
--
Masami Hiramatsu (Google) <mhiramat@kernel.org>
prev parent reply other threads:[~2023-01-03 13:31 UTC|newest]
Thread overview: 2+ messages / expand[flat|nested] mbox.gz Atom feed top
2022-12-30 6:33 [PATCH v5 1/3] kernel/trace: Introduce trace_probe_print_args and use it in *probes Song Chen
2023-01-03 13:30 ` Masami Hiramatsu [this message]
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=20230103223053.d82c08125d8bcb83761b65ea@kernel.org \
--to=mhiramat@kernel.org \
--cc=arnd@arndb.de \
--cc=chensong_2000@189.cn \
--cc=linux-arch@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=rostedt@goodmis.org \
/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 a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).