From: Arnaldo Carvalho de Melo <acme@kernel.org>
To: Jiri Olsa <jolsa@kernel.org>
Cc: David Ahern <dsahern@gmail.com>,
Frederic Weisbecker <fweisbec@gmail.com>,
He Kuang <hekuang@huawei.com>, Ingo Molnar <mingo@kernel.org>,
Jeremie Galarneau <jgalar@efficios.com>,
Namhyung Kim <namhyung@kernel.org>,
Paul Mackerras <paulus@samba.org>,
Peter Zijlstra <a.p.zijlstra@chello.nl>,
Sebastian Andrzej Siewior <bigeasy@linutronix.de>,
Tom Zanussi <tzanussi@gmail.com>, Wang Nan <wangnan0@huawei.com>,
lkml <linux-kernel@vger.kernel.org>
Subject: Re: [PATCH 7/7] perf data: Fix signess of value
Date: Mon, 20 Apr 2015 18:23:14 -0300 [thread overview]
Message-ID: <20150420212314.GR11111@kernel.org> (raw)
In-Reply-To: <1429372220-6406-8-git-send-email-jolsa@kernel.org>
Em Sat, Apr 18, 2015 at 05:50:20PM +0200, Jiri Olsa escreveu:
> From: Wang Nan <wangnan0@huawei.com>
>
> When converting int values, perf first extractes it to a ulonglong, then
> feeds it to babeltrace as a signed value. For negative 32 bit values
> (for example, return values of failed syscalls), the extracted data
> should be something like 0xfffffffe (-2). It becomes a large int64
> value. Babeltrace denies to insert it with
> bt_ctf_field_signed_integer_set_value() because it is larger than
> 0x7fffffff, the largest positive value a signed 32 bit int can be.
There is no such word "signess", it is "signedness", fixing this up.
Humm, it seems there is such a word indeed:
http://www.urbandictionary.com/define.php?term=Signess
But I bet this is the one we want:
http://en.wikipedia.org/wiki/Signedness
Right? :-)
- Arnaldo
> This patch introduces adjust_signess(), which fills high bits of
> ulonglong with 1 if the value is negative.
>
> Signed-off-by: Wang Nan <wangnan0@huawei.com>
> Link: http://lkml.kernel.org/n/tip-bq2fguw8pm8s5rr741mmgias@git.kernel.org
> Signed-off-by: Jiri Olsa <jolsa@kernel.org>
> ---
> tools/perf/util/data-convert-bt.c | 64 +++++++++++++++++++++++++++++++--------
> 1 file changed, 52 insertions(+), 12 deletions(-)
>
> diff --git a/tools/perf/util/data-convert-bt.c b/tools/perf/util/data-convert-bt.c
> index 8eda4ed628e7..977cc3f98d8f 100644
> --- a/tools/perf/util/data-convert-bt.c
> +++ b/tools/perf/util/data-convert-bt.c
> @@ -166,6 +166,43 @@ get_tracepoint_field_type(struct ctf_writer *cw, struct format_field *field)
> return cw->data.u32;
> }
>
> +static unsigned long long adjust_signess(unsigned long long value_int, int size)
> +{
> + unsigned long long value_mask;
> +
> + /*
> + * value_mask = (1 << (size * 8 - 1)) - 1.
> + * Directly set value_mask for code readers.
> + */
> + switch (size) {
> + case 1:
> + value_mask = 0x7fULL;
> + break;
> + case 2:
> + value_mask = 0x7fffULL;
> + break;
> + case 4:
> + value_mask = 0x7fffffffULL;
> + break;
> + case 8:
> + /*
> + * For 64 bit value, return it self. There is no need
> + * to fill high bit.
> + */
> + /* Fall through */
> + default:
> + /* BUG! */
> + return value_int;
> + }
> +
> + /* If it is a positive value, don't adjust. */
> + if ((value_int & (~0ULL - value_mask)) == 0)
> + return value_int;
> +
> + /* Fill upper part of value_int with 1 to make it a negative long long. */
> + return (value_int & value_mask) | ~value_mask;
> +}
> +
> static int add_tracepoint_field_value(struct ctf_writer *cw,
> struct bt_ctf_event_class *event_class,
> struct bt_ctf_event *event,
> @@ -177,7 +214,6 @@ static int add_tracepoint_field_value(struct ctf_writer *cw,
> struct bt_ctf_field *field;
> const char *name = fmtf->name;
> void *data = sample->raw_data;
> - unsigned long long value_int;
> unsigned long flags = fmtf->flags;
> unsigned int n_items;
> unsigned int i;
> @@ -222,11 +258,6 @@ static int add_tracepoint_field_value(struct ctf_writer *cw,
> type = get_tracepoint_field_type(cw, fmtf);
>
> for (i = 0; i < n_items; i++) {
> - if (!(flags & FIELD_IS_STRING))
> - value_int = pevent_read_number(
> - fmtf->event->pevent,
> - data + offset + i * len, len);
> -
> if (flags & FIELD_IS_ARRAY)
> field = bt_ctf_field_array_get_field(array_field, i);
> else
> @@ -240,12 +271,21 @@ static int add_tracepoint_field_value(struct ctf_writer *cw,
> if (flags & FIELD_IS_STRING)
> ret = bt_ctf_field_string_set_value(field,
> data + offset + i * len);
> - else if (!(flags & FIELD_IS_SIGNED))
> - ret = bt_ctf_field_unsigned_integer_set_value(
> - field, value_int);
> - else
> - ret = bt_ctf_field_signed_integer_set_value(
> - field, value_int);
> + else {
> + unsigned long long value_int;
> +
> + value_int = pevent_read_number(
> + fmtf->event->pevent,
> + data + offset + i * len, len);
> +
> + if (!(flags & FIELD_IS_SIGNED))
> + ret = bt_ctf_field_unsigned_integer_set_value(
> + field, value_int);
> + else
> + ret = bt_ctf_field_signed_integer_set_value(
> + field, adjust_signess(value_int, len));
> + }
> +
> if (ret) {
> pr_err("failed to set file value %s\n", name);
> goto err_put_field;
> --
> 1.9.3
next prev parent reply other threads:[~2015-04-20 21:23 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-04-18 15:50 [PATCHv6 0/7] perf tools: Add perf data CTF conversion Jiri Olsa
2015-04-18 15:50 ` [PATCH 1/7] perf data: Show error message when conversion failed Jiri Olsa
2015-05-06 2:55 ` [tip:perf/core] " tip-bot for He Kuang
2015-04-18 15:50 ` [PATCH 2/7] perf data: Switch to multiple cpu stream files Jiri Olsa
2015-04-20 19:58 ` Arnaldo Carvalho de Melo
2015-04-20 20:01 ` Arnaldo Carvalho de Melo
2015-04-20 20:19 ` Jiri Olsa
2015-04-20 20:41 ` Arnaldo Carvalho de Melo
2015-04-20 20:49 ` Arnaldo Carvalho de Melo
2015-05-06 2:57 ` [tip:perf/core] " tip-bot for Sebastian Andrzej Siewior
2015-04-18 15:50 ` [PATCH 3/7] perf data: Enable stream flush within processing Jiri Olsa
2015-05-06 2:57 ` [tip:perf/core] " tip-bot for Jiri Olsa
2015-04-18 15:50 ` [PATCH 4/7] perf data: Add support for setting ordered_events queue size Jiri Olsa
2015-05-06 2:57 ` [tip:perf/core] " tip-bot for Jiri Olsa
2015-04-18 15:50 ` [PATCH 5/7] tools lib traceevent: Add alias field to struct format_field Jiri Olsa
2015-04-20 14:24 ` Steven Rostedt
2015-05-06 2:55 ` [tip:perf/core] " tip-bot for Jiri Olsa
2015-04-18 15:50 ` [PATCH 6/7] perf data: Fix duplicate field names and avoid reserved keywords Jiri Olsa
2015-04-18 18:56 ` Jérémie Galarneau
2015-04-18 20:45 ` Jiri Olsa
2015-04-20 14:02 ` Arnaldo Carvalho de Melo
2015-05-06 2:57 ` [tip:perf/core] " tip-bot for Wang Nan
2015-04-18 15:50 ` [PATCH 7/7] perf data: Fix signess of value Jiri Olsa
2015-04-20 21:23 ` Arnaldo Carvalho de Melo [this message]
2015-04-20 21:52 ` Jiri Olsa
2015-04-21 2:41 ` Wang Nan
2015-04-21 14:25 ` Arnaldo Carvalho de Melo
2015-05-06 2:58 ` [tip:perf/core] perf data: Fix signedness " tip-bot for Wang Nan
2015-04-20 20:05 ` [PATCHv6 0/7] perf tools: Add perf data CTF conversion Arnaldo Carvalho de Melo
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=20150420212314.GR11111@kernel.org \
--to=acme@kernel.org \
--cc=a.p.zijlstra@chello.nl \
--cc=bigeasy@linutronix.de \
--cc=dsahern@gmail.com \
--cc=fweisbec@gmail.com \
--cc=hekuang@huawei.com \
--cc=jgalar@efficios.com \
--cc=jolsa@kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mingo@kernel.org \
--cc=namhyung@kernel.org \
--cc=paulus@samba.org \
--cc=tzanussi@gmail.com \
--cc=wangnan0@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.