diff options
Diffstat (limited to 'tools/perf/util')
| -rw-r--r-- | tools/perf/util/cpumap.c | 11 | ||||
| -rw-r--r-- | tools/perf/util/ordered-events.c | 6 | ||||
| -rw-r--r-- | tools/perf/util/setup.py | 2 |
3 files changed, 15 insertions, 4 deletions
diff --git a/tools/perf/util/cpumap.c b/tools/perf/util/cpumap.c index 1ccbd3342069..383674f448fc 100644 --- a/tools/perf/util/cpumap.c +++ b/tools/perf/util/cpumap.c | |||
| @@ -134,7 +134,12 @@ struct cpu_map *cpu_map__new(const char *cpu_list) | |||
| 134 | if (!cpu_list) | 134 | if (!cpu_list) |
| 135 | return cpu_map__read_all_cpu_map(); | 135 | return cpu_map__read_all_cpu_map(); |
| 136 | 136 | ||
| 137 | if (!isdigit(*cpu_list)) | 137 | /* |
| 138 | * must handle the case of empty cpumap to cover | ||
| 139 | * TOPOLOGY header for NUMA nodes with no CPU | ||
| 140 | * ( e.g., because of CPU hotplug) | ||
| 141 | */ | ||
| 142 | if (!isdigit(*cpu_list) && *cpu_list != '\0') | ||
| 138 | goto out; | 143 | goto out; |
| 139 | 144 | ||
| 140 | while (isdigit(*cpu_list)) { | 145 | while (isdigit(*cpu_list)) { |
| @@ -181,8 +186,10 @@ struct cpu_map *cpu_map__new(const char *cpu_list) | |||
| 181 | 186 | ||
| 182 | if (nr_cpus > 0) | 187 | if (nr_cpus > 0) |
| 183 | cpus = cpu_map__trim_new(nr_cpus, tmp_cpus); | 188 | cpus = cpu_map__trim_new(nr_cpus, tmp_cpus); |
| 184 | else | 189 | else if (*cpu_list != '\0') |
| 185 | cpus = cpu_map__default_new(); | 190 | cpus = cpu_map__default_new(); |
| 191 | else | ||
| 192 | cpus = cpu_map__dummy_new(); | ||
| 186 | invalid: | 193 | invalid: |
| 187 | free(tmp_cpus); | 194 | free(tmp_cpus); |
| 188 | out: | 195 | out: |
diff --git a/tools/perf/util/ordered-events.c b/tools/perf/util/ordered-events.c index 897589507d97..ea523d3b248f 100644 --- a/tools/perf/util/ordered-events.c +++ b/tools/perf/util/ordered-events.c | |||
| @@ -391,8 +391,10 @@ void ordered_events__free(struct ordered_events *oe) | |||
| 391 | * Current buffer might not have all the events allocated | 391 | * Current buffer might not have all the events allocated |
| 392 | * yet, we need to free only allocated ones ... | 392 | * yet, we need to free only allocated ones ... |
| 393 | */ | 393 | */ |
| 394 | list_del(&oe->buffer->list); | 394 | if (oe->buffer) { |
| 395 | ordered_events_buffer__free(oe->buffer, oe->buffer_idx, oe); | 395 | list_del(&oe->buffer->list); |
| 396 | ordered_events_buffer__free(oe->buffer, oe->buffer_idx, oe); | ||
| 397 | } | ||
| 396 | 398 | ||
| 397 | /* ... and continue with the rest */ | 399 | /* ... and continue with the rest */ |
| 398 | list_for_each_entry_safe(buffer, tmp, &oe->to_free, list) { | 400 | list_for_each_entry_safe(buffer, tmp, &oe->to_free, list) { |
diff --git a/tools/perf/util/setup.py b/tools/perf/util/setup.py index 63f758c655d5..64d1f36dee99 100644 --- a/tools/perf/util/setup.py +++ b/tools/perf/util/setup.py | |||
| @@ -17,6 +17,8 @@ if cc == "clang": | |||
| 17 | vars[var] = sub("-mcet", "", vars[var]) | 17 | vars[var] = sub("-mcet", "", vars[var]) |
| 18 | if not clang_has_option("-fcf-protection"): | 18 | if not clang_has_option("-fcf-protection"): |
| 19 | vars[var] = sub("-fcf-protection", "", vars[var]) | 19 | vars[var] = sub("-fcf-protection", "", vars[var]) |
| 20 | if not clang_has_option("-fstack-clash-protection"): | ||
| 21 | vars[var] = sub("-fstack-clash-protection", "", vars[var]) | ||
| 20 | 22 | ||
| 21 | from distutils.core import setup, Extension | 23 | from distutils.core import setup, Extension |
| 22 | 24 | ||
