From: Arnaldo Carvalho de Melo <acme@redhat.com>
To: Steven Rostedt <rostedt@goodmis.org>
Cc: Wang Nan <wangnan0@huawei.com>,
ast@plumgrid.com, brendan.d.gregg@gmail.com,
daniel@iogearbox.net, dsahern@gmail.com, hekuang@huawei.com,
jolsa@kernel.org, xiakaixu@huawei.com,
masami.hiramatsu.pt@hitachi.com, namhyung@kernel.org,
a.p.zijlstra@chello.nl, lizefan@huawei.com, pi3orama@163.com,
linux-kernel@vger.kernel.org, acme@kernel.org
Subject: Re: [PATCH 28/29] tools lib traceevent: Support function __get_dynamic_array_len
Date: Fri, 21 Aug 2015 13:00:27 -0300 [thread overview]
Message-ID: <20150821160027.GE2522@redhat.com> (raw)
In-Reply-To: <1440151770-129878-29-git-send-email-wangnan0@huawei.com>
Em Fri, Aug 21, 2015 at 10:09:29AM +0000, Wang Nan escreveu:
> From: He Kuang <hekuang@huawei.com>
>
> Support helper function __get_dynamic_array_len() in libtraceevent,
> this function is used accompany with __print_array() or __print_hex(),
> but currently it is not an available function in the function list of
> process_function().
Rostedt, Namhyung, Ack?
- Arnaldo
> The total allocated length of the dynamic array is embedded in the top
> half of __data_loc_##item field. This patch adds new arg type
> PRINT_DYNAMIC_ARRAY_LEN to return the length to eval_num_arg(),
>
> Signed-off-by: He Kuang <hekuang@huawei.com>
> ---
> tools/lib/traceevent/event-parse.c | 56 +++++++++++++++++++++-
> tools/lib/traceevent/event-parse.h | 1 +
> .../perf/util/scripting-engines/trace-event-perl.c | 1 +
> .../util/scripting-engines/trace-event-python.c | 1 +
> 4 files changed, 57 insertions(+), 2 deletions(-)
>
> diff --git a/tools/lib/traceevent/event-parse.c b/tools/lib/traceevent/event-parse.c
> index fcd8a9e..4888674 100644
> --- a/tools/lib/traceevent/event-parse.c
> +++ b/tools/lib/traceevent/event-parse.c
> @@ -848,6 +848,7 @@ static void free_arg(struct print_arg *arg)
> free(arg->bitmask.bitmask);
> break;
> case PRINT_DYNAMIC_ARRAY:
> + case PRINT_DYNAMIC_ARRAY_LEN:
> free(arg->dynarray.index);
> break;
> case PRINT_OP:
> @@ -2720,6 +2721,42 @@ process_dynamic_array(struct event_format *event, struct print_arg *arg, char **
> }
>
> static enum event_type
> +process_dynamic_array_len(struct event_format *event, struct print_arg *arg,
> + char **tok)
> +{
> + struct format_field *field;
> + enum event_type type;
> + char *token;
> +
> + if (read_expect_type(EVENT_ITEM, &token) < 0)
> + goto out_free;
> +
> + arg->type = PRINT_DYNAMIC_ARRAY_LEN;
> +
> + /* Find the field */
> + field = pevent_find_field(event, token);
> + if (!field)
> + goto out_free;
> +
> + arg->dynarray.field = field;
> + arg->dynarray.index = 0;
> +
> + if (read_expected(EVENT_DELIM, ")") < 0)
> + goto out_err;
> +
> + type = read_token(&token);
> + *tok = token;
> +
> + return type;
> +
> + out_free:
> + free_token(token);
> + out_err:
> + *tok = NULL;
> + return EVENT_ERROR;
> +}
> +
> +static enum event_type
> process_paren(struct event_format *event, struct print_arg *arg, char **tok)
> {
> struct print_arg *item_arg;
> @@ -2966,6 +3003,10 @@ process_function(struct event_format *event, struct print_arg *arg,
> free_token(token);
> return process_dynamic_array(event, arg, tok);
> }
> + if (strcmp(token, "__get_dynamic_array_len") == 0) {
> + free_token(token);
> + return process_dynamic_array_len(event, arg, tok);
> + }
>
> func = find_func_handler(event->pevent, token);
> if (func) {
> @@ -3646,14 +3687,25 @@ eval_num_arg(void *data, int size, struct event_format *event, struct print_arg
> goto out_warning_op;
> }
> break;
> + case PRINT_DYNAMIC_ARRAY_LEN:
> + offset = pevent_read_number(pevent,
> + data + arg->dynarray.field->offset,
> + arg->dynarray.field->size);
> + /*
> + * The total allocated length of the dynamic array is
> + * stored in the top half of the field, and the offset
> + * is in the bottom half of the 32 bit field.
> + */
> + val = (unsigned long long)(offset >> 16);
> + break;
> case PRINT_DYNAMIC_ARRAY:
> /* Without [], we pass the address to the dynamic data */
> offset = pevent_read_number(pevent,
> data + arg->dynarray.field->offset,
> arg->dynarray.field->size);
> /*
> - * The actual length of the dynamic array is stored
> - * in the top half of the field, and the offset
> + * The total allocated length of the dynamic array is
> + * stored in the top half of the field, and the offset
> * is in the bottom half of the 32 bit field.
> */
> offset &= 0xffff;
> diff --git a/tools/lib/traceevent/event-parse.h b/tools/lib/traceevent/event-parse.h
> index 204befb..6fc83c7 100644
> --- a/tools/lib/traceevent/event-parse.h
> +++ b/tools/lib/traceevent/event-parse.h
> @@ -294,6 +294,7 @@ enum print_arg_type {
> PRINT_OP,
> PRINT_FUNC,
> PRINT_BITMASK,
> + PRINT_DYNAMIC_ARRAY_LEN,
> };
>
> struct print_arg {
> diff --git a/tools/perf/util/scripting-engines/trace-event-perl.c b/tools/perf/util/scripting-engines/trace-event-perl.c
> index 1bd593b..544509c 100644
> --- a/tools/perf/util/scripting-engines/trace-event-perl.c
> +++ b/tools/perf/util/scripting-engines/trace-event-perl.c
> @@ -221,6 +221,7 @@ static void define_event_symbols(struct event_format *event,
> break;
> case PRINT_BSTRING:
> case PRINT_DYNAMIC_ARRAY:
> + case PRINT_DYNAMIC_ARRAY_LEN:
> case PRINT_STRING:
> case PRINT_BITMASK:
> break;
> diff --git a/tools/perf/util/scripting-engines/trace-event-python.c b/tools/perf/util/scripting-engines/trace-event-python.c
> index ace2484..aa9e125 100644
> --- a/tools/perf/util/scripting-engines/trace-event-python.c
> +++ b/tools/perf/util/scripting-engines/trace-event-python.c
> @@ -251,6 +251,7 @@ static void define_event_symbols(struct event_format *event,
> /* gcc warns for these? */
> case PRINT_BSTRING:
> case PRINT_DYNAMIC_ARRAY:
> + case PRINT_DYNAMIC_ARRAY_LEN:
> case PRINT_FUNC:
> case PRINT_BITMASK:
> /* we should warn... */
> --
> 2.1.0
next prev parent reply other threads:[~2015-08-21 16:00 UTC|newest]
Thread overview: 33+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-08-21 10:09 [GIT PULL 00/29] perf tools: filtering events using eBPF programs Wang Nan
2015-08-21 10:09 ` [PATCH 01/29] perf probe: Try to use symbol table if searching debug info failed Wang Nan
2015-08-21 14:13 ` Arnaldo Carvalho de Melo
2015-08-22 6:54 ` [tip:perf/core] " tip-bot for Wang Nan
2015-08-21 10:09 ` [PATCH 02/29] perf tools: Make perf depend on libbpf Wang Nan
2015-08-21 10:09 ` [PATCH 03/29] perf ebpf: Add the libbpf glue Wang Nan
2015-08-21 10:09 ` [PATCH 04/29] perf tools: Enable passing bpf object file to --event Wang Nan
2015-08-21 10:09 ` [PATCH 05/29] perf probe: Attach trace_probe_event with perf_probe_event Wang Nan
2015-08-21 10:09 ` [PATCH 06/29] perf record, bpf: Parse and probe eBPF programs probe points Wang Nan
2015-08-21 10:09 ` [PATCH 07/29] perf bpf: Collect 'struct perf_probe_event' for bpf_program Wang Nan
2015-08-21 10:09 ` [PATCH 08/29] perf record: Load all eBPF object into kernel Wang Nan
2015-08-21 10:09 ` [PATCH 09/29] perf tools: Add bpf_fd field to evsel and config it Wang Nan
2015-08-21 10:09 ` [PATCH 10/29] perf tools: Attach eBPF program to perf event Wang Nan
2015-08-21 10:09 ` [PATCH 11/29] perf tools: Suppress probing messages when probing by BPF loading Wang Nan
2015-08-21 10:09 ` [PATCH 12/29] perf record: Add clang options for compiling BPF scripts Wang Nan
2015-08-21 10:09 ` [PATCH 13/29] perf tools: Infrastructure for compiling scriptlets when passing '.c' to --event Wang Nan
2015-08-21 10:09 ` [PATCH 14/29] perf tests: Enforce LLVM test for BPF test Wang Nan
2015-08-21 10:09 ` [PATCH 15/29] perf test: Add 'perf test BPF' Wang Nan
2015-08-21 10:09 ` [PATCH 16/29] bpf tools: Load a program with different instances using preprocessor Wang Nan
2015-08-21 10:09 ` [PATCH 17/29] perf tools: Fix probe-event.h include Wang Nan
2015-08-21 10:09 ` [PATCH 18/29] perf probe: Reset args and nargs for probe_trace_event when failure Wang Nan
2015-08-21 10:09 ` [PATCH 19/29] perf tools: Move linux/filter.h to tools/include Wang Nan
2015-08-21 10:09 ` [PATCH 20/29] perf tools: Add BPF_PROLOGUE config options for further patches Wang Nan
2015-08-21 10:09 ` [PATCH 21/29] perf tools: Introduce arch_get_reg_info() for x86 Wang Nan
2015-08-21 10:09 ` [PATCH 22/29] perf tools: Add prologue for BPF programs for fetching arguments Wang Nan
2015-08-21 10:09 ` [PATCH 23/29] perf tools: Generate prologue for BPF programs Wang Nan
2015-08-21 10:09 ` [PATCH 24/29] perf tools: Use same BPF program if arguments are identical Wang Nan
2015-08-21 10:09 ` [PATCH 25/29] perf record: Support custom vmlinux path Wang Nan
2015-08-21 10:09 ` [PATCH 26/29] perf probe: Init symbol as kprobe Wang Nan
2015-08-21 10:09 ` [PATCH 27/29] perf tools: Support attach BPF program on uprobe events Wang Nan
2015-08-21 10:09 ` [PATCH 28/29] tools lib traceevent: Support function __get_dynamic_array_len Wang Nan
2015-08-21 16:00 ` Arnaldo Carvalho de Melo [this message]
2015-08-21 10:09 ` [PATCH 29/29] bpf: Introduce function for outputing data to perf event Wang Nan
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=20150821160027.GE2522@redhat.com \
--to=acme@redhat.com \
--cc=a.p.zijlstra@chello.nl \
--cc=acme@kernel.org \
--cc=ast@plumgrid.com \
--cc=brendan.d.gregg@gmail.com \
--cc=daniel@iogearbox.net \
--cc=dsahern@gmail.com \
--cc=hekuang@huawei.com \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=lizefan@huawei.com \
--cc=masami.hiramatsu.pt@hitachi.com \
--cc=namhyung@kernel.org \
--cc=pi3orama@163.com \
--cc=rostedt@goodmis.org \
--cc=wangnan0@huawei.com \
--cc=xiakaixu@huawei.com \
/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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.