|
|
@@ -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:
|