linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
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

  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 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).