perf cpumap: Fix cpu conversion in cpu_map__from_entries
We can't convert u16 cpu_map_entries::cpu[x] value directly to int, because it could hold -1, which would be converted as 65535. Adding special treatment for -1, which is not real cpu number, to be converted to (int -1). Reported-by: Arnaldo Carvalho de Melo <acme@kernel.org> Signed-off-by: Jiri Olsa <jolsa@kernel.org> Cc: David Ahern <dsahern@gmail.com> Cc: Kan Liang <kan.liang@intel.com> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <a.p.zijlstra@chello.nl> Link: http://lkml.kernel.org/r/1452077397-31958-2-git-send-email-jolsa@kernel.org Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
aef9026356
commit
15d2b9956b
|
@ -188,8 +188,17 @@ static struct cpu_map *cpu_map__from_entries(struct cpu_map_entries *cpus)
|
|||
if (map) {
|
||||
unsigned i;
|
||||
|
||||
for (i = 0; i < cpus->nr; i++)
|
||||
map->map[i] = (int)cpus->cpu[i];
|
||||
for (i = 0; i < cpus->nr; i++) {
|
||||
/*
|
||||
* Special treatment for -1, which is not real cpu number,
|
||||
* and we need to use (int) -1 to initialize map[i],
|
||||
* otherwise it would become 65535.
|
||||
*/
|
||||
if (cpus->cpu[i] == (u16) -1)
|
||||
map->map[i] = -1;
|
||||
else
|
||||
map->map[i] = (int) cpus->cpu[i];
|
||||
}
|
||||
}
|
||||
|
||||
return map;
|
||||
|
|
Loading…
Reference in New Issue