All of lore.kernel.org
 help / color / mirror / Atom feed
From: Adrian Hunter <adrian.hunter@intel.com>
To: Arnaldo Carvalho de Melo <acme@kernel.org>
Cc: linux-kernel@vger.kernel.org, Jiri Olsa <jolsa@redhat.com>
Subject: Re: [PATCH] perf tools: Fix use of wrong event when processing exit events
Date: Wed, 2 Sep 2015 16:00:08 +0300	[thread overview]
Message-ID: <55E6F2D8.30306@intel.com> (raw)
In-Reply-To: <1439888825-27708-1-git-send-email-adrian.hunter@intel.com>

On 18/08/15 12:07, Adrian Hunter wrote:
> In a couple of cases the 'comm' member of 'union event' has
> been used instead of the correct member ('fork') when processing
> exit events.
> 
> In the cases where it has been used incorrectly, only the 'pid'
> and 'tid' are affected.  The 'pid' value would be correct anyway
> because it is in the same position in 'comm' and 'fork' events,
> but the 'tid' would have been incorrectly assigned from 'ppid'.
> However, for exit events, the kernel puts the current task in
> the 'ppid' and 'ttid' which is the same as the exiting task.
> That is 'ppid' == 'pid' and if the task is not multi-threaded,
> 'pid' == 'tid' i.e. the data goes wrong only when tracing
> multi-threaded programs.
> 
> It is hard to find an example of how this would produce an
> error in practice.  There are 3 occurences of the fix:
> 1. perf script is only affected if !sample_id_all which only
> happens on old kernels
> 2. intel_pt is only affected when decoding without timestamps
> and would probably still decode correctly - the exit event is
> only used to flush out data which anyway gets flushed at the
> end of the session
> 3. intel_bts also uses the exit event to flush data which
> would probably not cause errors as it would get flushed at
> the end of the session instead
> 
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>

I think it would be worth picking this one up for 4.3

> ---
>  tools/perf/builtin-script.c | 4 ++--
>  tools/perf/util/intel-bts.c | 2 +-
>  tools/perf/util/intel-pt.c  | 2 +-
>  3 files changed, 4 insertions(+), 4 deletions(-)
> 
> diff --git a/tools/perf/builtin-script.c b/tools/perf/builtin-script.c
> index 105332e950a9..17030c6c64b6 100644
> --- a/tools/perf/builtin-script.c
> +++ b/tools/perf/builtin-script.c
> @@ -739,8 +739,8 @@ static int process_exit_event(struct perf_tool *tool,
>  	if (!evsel->attr.sample_id_all) {
>  		sample->cpu = 0;
>  		sample->time = 0;
> -		sample->tid = event->comm.tid;
> -		sample->pid = event->comm.pid;
> +		sample->tid = event->fork.tid;
> +		sample->pid = event->fork.pid;
>  	}
>  	print_sample_start(sample, thread, evsel);
>  	perf_event__fprintf(event, stdout);
> diff --git a/tools/perf/util/intel-bts.c b/tools/perf/util/intel-bts.c
> index dce99cfb1309..09d142b362fa 100644
> --- a/tools/perf/util/intel-bts.c
> +++ b/tools/perf/util/intel-bts.c
> @@ -623,7 +623,7 @@ static int intel_bts_process_event(struct perf_session *session,
>  	if (err)
>  		return err;
>  	if (event->header.type == PERF_RECORD_EXIT) {
> -		err = intel_bts_process_tid_exit(bts, event->comm.tid);
> +		err = intel_bts_process_tid_exit(bts, event->fork.tid);
>  		if (err)
>  			return err;
>  	}
> diff --git a/tools/perf/util/intel-pt.c b/tools/perf/util/intel-pt.c
> index 2a4a4120473b..ef2fb13f1dfa 100644
> --- a/tools/perf/util/intel-pt.c
> +++ b/tools/perf/util/intel-pt.c
> @@ -1464,7 +1464,7 @@ static int intel_pt_process_event(struct perf_session *session,
>  	if (pt->timeless_decoding) {
>  		if (event->header.type == PERF_RECORD_EXIT) {
>  			err = intel_pt_process_timeless_queues(pt,
> -							       event->comm.tid,
> +							       event->fork.tid,
>  							       sample->time);
>  		}
>  	} else if (timestamp) {
> 


  reply	other threads:[~2015-09-02 13:02 UTC|newest]

Thread overview: 5+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-08-18  9:07 [PATCH] perf tools: Fix use of wrong event when processing exit events Adrian Hunter
2015-09-02 13:00 ` Adrian Hunter [this message]
2015-09-02 19:55   ` Arnaldo Carvalho de Melo
2015-09-03 12:13     ` Adrian Hunter
2015-09-05 14:01 ` [tip:perf/urgent] " tip-bot for Adrian Hunter

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=55E6F2D8.30306@intel.com \
    --to=adrian.hunter@intel.com \
    --cc=acme@kernel.org \
    --cc=jolsa@redhat.com \
    --cc=linux-kernel@vger.kernel.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 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.