perf tools: Handle TOPOLOGY headers with no CPU
This patch fixes an issue in cpumap.c when used with the TOPOLOGY header. In some configurations, some NUMA nodes may have no CPU (empty cpulist). Yet a cpumap map must be created otherwise perf abort with an error. This patch handles this case by creating a dummy map. Before: $ perf record -o - -e cycles noploop 2 | perf script -i - 0x6e8 [0x6c]: failed to process type: 80 After: $ perf record -o - -e cycles noploop 2 | perf script -i - noploop for 2 seconds Signed-off-by: Stephane Eranian <eranian@google.com> Acked-by: Jiri Olsa <jolsa@kernel.org> Cc: Andi Kleen <ak@linux.intel.com> Cc: Kan Liang <kan.liang@linux.intel.com> Cc: Peter Zijlstra <peterz@infradead.org> Link: http://lkml.kernel.org/r/1547885559-1657-1-git-send-email-eranian@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
This commit is contained in:
parent
94ec1eb711
commit
1497e804d1
|
@ -134,7 +134,12 @@ struct cpu_map *cpu_map__new(const char *cpu_list)
|
|||
if (!cpu_list)
|
||||
return cpu_map__read_all_cpu_map();
|
||||
|
||||
if (!isdigit(*cpu_list))
|
||||
/*
|
||||
* must handle the case of empty cpumap to cover
|
||||
* TOPOLOGY header for NUMA nodes with no CPU
|
||||
* ( e.g., because of CPU hotplug)
|
||||
*/
|
||||
if (!isdigit(*cpu_list) && *cpu_list != '\0')
|
||||
goto out;
|
||||
|
||||
while (isdigit(*cpu_list)) {
|
||||
|
@ -181,8 +186,10 @@ struct cpu_map *cpu_map__new(const char *cpu_list)
|
|||
|
||||
if (nr_cpus > 0)
|
||||
cpus = cpu_map__trim_new(nr_cpus, tmp_cpus);
|
||||
else
|
||||
else if (*cpu_list != '\0')
|
||||
cpus = cpu_map__default_new();
|
||||
else
|
||||
cpus = cpu_map__dummy_new();
|
||||
invalid:
|
||||
free(tmp_cpus);
|
||||
out:
|
||||
|
|
Loading…
Reference in New Issue