All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] perf evlist: Fix id index for heterogeneous systems
@ 2021-01-21 12:54 Adrian Hunter
  2021-01-21 13:19 ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 4+ messages in thread
From: Adrian Hunter @ 2021-01-21 12:54 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo, Jiri Olsa; +Cc: linux-kernel, Jin, Yao

perf_evlist__set_sid_idx() updates perf_sample_id with the evlist map
index, cpu number and tid. It is passed indexes to the evsel's cpu and
thread maps, but references the evlist's maps instead. That results in
using incorrect cpu numbers on heterogeneous systems. Fix by using evsel
maps.

The id index (PERF_RECORD_ID_INDEX) is used by AUX area tracing when in
sampling mode. Having an incorrect cpu number causes the trace data to
be attributed to the wrong cpu, and can result in decoder errors because
the trace data is then associated with the wrong process.

Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
---
 tools/lib/perf/evlist.c | 17 ++++-------------
 1 file changed, 4 insertions(+), 13 deletions(-)

diff --git a/tools/lib/perf/evlist.c b/tools/lib/perf/evlist.c
index cfcdbd7be066..37be8042889f 100644
--- a/tools/lib/perf/evlist.c
+++ b/tools/lib/perf/evlist.c
@@ -367,21 +367,13 @@ static struct perf_mmap* perf_evlist__alloc_mmap(struct perf_evlist *evlist, boo
 	return map;
 }
 
-static void perf_evlist__set_sid_idx(struct perf_evlist *evlist,
-				     struct perf_evsel *evsel, int idx, int cpu,
-				     int thread)
+static void set_sid_idx(struct perf_evsel *evsel, int idx, int cpu, int thread)
 {
 	struct perf_sample_id *sid = SID(evsel, cpu, thread);
 
 	sid->idx = idx;
-	if (evlist->cpus && cpu >= 0)
-		sid->cpu = evlist->cpus->map[cpu];
-	else
-		sid->cpu = -1;
-	if (!evsel->system_wide && evlist->threads && thread >= 0)
-		sid->tid = perf_thread_map__pid(evlist->threads, thread);
-	else
-		sid->tid = -1;
+	sid->cpu = perf_cpu_map__cpu(evsel->cpus, cpu);
+	sid->tid = perf_thread_map__pid(evsel->threads, thread);
 }
 
 static struct perf_mmap*
@@ -500,8 +492,7 @@ mmap_per_evsel(struct perf_evlist *evlist, struct perf_evlist_mmap_ops *ops,
 			if (perf_evlist__id_add_fd(evlist, evsel, cpu, thread,
 						   fd) < 0)
 				return -1;
-			perf_evlist__set_sid_idx(evlist, evsel, idx, cpu,
-						 thread);
+			set_sid_idx(evsel, idx, cpu, thread);
 		}
 	}
 
-- 
2.17.1


^ permalink raw reply related	[flat|nested] 4+ messages in thread

* Re: [PATCH] perf evlist: Fix id index for heterogeneous systems
  2021-01-21 12:54 [PATCH] perf evlist: Fix id index for heterogeneous systems Adrian Hunter
@ 2021-01-21 13:19 ` Arnaldo Carvalho de Melo
  2021-01-21 13:39   ` Adrian Hunter
  0 siblings, 1 reply; 4+ messages in thread
From: Arnaldo Carvalho de Melo @ 2021-01-21 13:19 UTC (permalink / raw)
  To: Adrian Hunter; +Cc: Jiri Olsa, linux-kernel, Jin, Yao

Em Thu, Jan 21, 2021 at 02:54:46PM +0200, Adrian Hunter escreveu:
> perf_evlist__set_sid_idx() updates perf_sample_id with the evlist map
> index, cpu number and tid. It is passed indexes to the evsel's cpu and
> thread maps, but references the evlist's maps instead. That results in
> using incorrect cpu numbers on heterogeneous systems. Fix by using evsel
> maps.
> 
> The id index (PERF_RECORD_ID_INDEX) is used by AUX area tracing when in
> sampling mode. Having an incorrect cpu number causes the trace data to
> be attributed to the wrong cpu, and can result in decoder errors because
> the trace data is then associated with the wrong process.

Can you please provide a Fixes: tag so that the stable@kernel.org guys
can apply where appropriate?

Thanks,

- Arnaldo
 
> Signed-off-by: Adrian Hunter <adrian.hunter@intel.com>
> ---
>  tools/lib/perf/evlist.c | 17 ++++-------------
>  1 file changed, 4 insertions(+), 13 deletions(-)
> 
> diff --git a/tools/lib/perf/evlist.c b/tools/lib/perf/evlist.c
> index cfcdbd7be066..37be8042889f 100644
> --- a/tools/lib/perf/evlist.c
> +++ b/tools/lib/perf/evlist.c
> @@ -367,21 +367,13 @@ static struct perf_mmap* perf_evlist__alloc_mmap(struct perf_evlist *evlist, boo
>  	return map;
>  }
>  
> -static void perf_evlist__set_sid_idx(struct perf_evlist *evlist,
> -				     struct perf_evsel *evsel, int idx, int cpu,
> -				     int thread)
> +static void set_sid_idx(struct perf_evsel *evsel, int idx, int cpu, int thread)
>  {
>  	struct perf_sample_id *sid = SID(evsel, cpu, thread);
>  
>  	sid->idx = idx;
> -	if (evlist->cpus && cpu >= 0)
> -		sid->cpu = evlist->cpus->map[cpu];
> -	else
> -		sid->cpu = -1;
> -	if (!evsel->system_wide && evlist->threads && thread >= 0)
> -		sid->tid = perf_thread_map__pid(evlist->threads, thread);
> -	else
> -		sid->tid = -1;
> +	sid->cpu = perf_cpu_map__cpu(evsel->cpus, cpu);
> +	sid->tid = perf_thread_map__pid(evsel->threads, thread);
>  }
>  
>  static struct perf_mmap*
> @@ -500,8 +492,7 @@ mmap_per_evsel(struct perf_evlist *evlist, struct perf_evlist_mmap_ops *ops,
>  			if (perf_evlist__id_add_fd(evlist, evsel, cpu, thread,
>  						   fd) < 0)
>  				return -1;
> -			perf_evlist__set_sid_idx(evlist, evsel, idx, cpu,
> -						 thread);
> +			set_sid_idx(evsel, idx, cpu, thread);
>  		}
>  	}
>  
> -- 
> 2.17.1
> 

-- 

- Arnaldo

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] perf evlist: Fix id index for heterogeneous systems
  2021-01-21 13:19 ` Arnaldo Carvalho de Melo
@ 2021-01-21 13:39   ` Adrian Hunter
  2021-01-21 13:40     ` Arnaldo Carvalho de Melo
  0 siblings, 1 reply; 4+ messages in thread
From: Adrian Hunter @ 2021-01-21 13:39 UTC (permalink / raw)
  To: Arnaldo Carvalho de Melo; +Cc: Jiri Olsa, linux-kernel, Jin Yao

On 21/01/21 3:19 pm, Arnaldo Carvalho de Melo wrote:
> Em Thu, Jan 21, 2021 at 02:54:46PM +0200, Adrian Hunter escreveu:
>> perf_evlist__set_sid_idx() updates perf_sample_id with the evlist map
>> index, cpu number and tid. It is passed indexes to the evsel's cpu and
>> thread maps, but references the evlist's maps instead. That results in
>> using incorrect cpu numbers on heterogeneous systems. Fix by using evsel
>> maps.
>>
>> The id index (PERF_RECORD_ID_INDEX) is used by AUX area tracing when in
>> sampling mode. Having an incorrect cpu number causes the trace data to
>> be attributed to the wrong cpu, and can result in decoder errors because
>> the trace data is then associated with the wrong process.
> 
> Can you please provide a Fixes: tag so that the stable@kernel.org guys
> can apply where appropriate?

Oops sorry missed that.  Here it is:

Fixes: 3c659eedada2 ("perf tools: Add id index")

^ permalink raw reply	[flat|nested] 4+ messages in thread

* Re: [PATCH] perf evlist: Fix id index for heterogeneous systems
  2021-01-21 13:39   ` Adrian Hunter
@ 2021-01-21 13:40     ` Arnaldo Carvalho de Melo
  0 siblings, 0 replies; 4+ messages in thread
From: Arnaldo Carvalho de Melo @ 2021-01-21 13:40 UTC (permalink / raw)
  To: Adrian Hunter; +Cc: Jiri Olsa, linux-kernel, Jin Yao

Em Thu, Jan 21, 2021 at 03:39:03PM +0200, Adrian Hunter escreveu:
> On 21/01/21 3:19 pm, Arnaldo Carvalho de Melo wrote:
> > Em Thu, Jan 21, 2021 at 02:54:46PM +0200, Adrian Hunter escreveu:
> >> perf_evlist__set_sid_idx() updates perf_sample_id with the evlist map
> >> index, cpu number and tid. It is passed indexes to the evsel's cpu and
> >> thread maps, but references the evlist's maps instead. That results in
> >> using incorrect cpu numbers on heterogeneous systems. Fix by using evsel
> >> maps.
> >>
> >> The id index (PERF_RECORD_ID_INDEX) is used by AUX area tracing when in
> >> sampling mode. Having an incorrect cpu number causes the trace data to
> >> be attributed to the wrong cpu, and can result in decoder errors because
> >> the trace data is then associated with the wrong process.
> > 
> > Can you please provide a Fixes: tag so that the stable@kernel.org guys
> > can apply where appropriate?
> 
> Oops sorry missed that.  Here it is:
> 
> Fixes: 3c659eedada2 ("perf tools: Add id index")


Thanks a lot!

- Arnaldo

^ permalink raw reply	[flat|nested] 4+ messages in thread

end of thread, other threads:[~2021-01-21 13:47 UTC | newest]

Thread overview: 4+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-01-21 12:54 [PATCH] perf evlist: Fix id index for heterogeneous systems Adrian Hunter
2021-01-21 13:19 ` Arnaldo Carvalho de Melo
2021-01-21 13:39   ` Adrian Hunter
2021-01-21 13:40     ` Arnaldo Carvalho de Melo

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.