Skip to content

Commit da0bfb9

Browse files
captain5050acmel
authored andcommitted
perf cpumap: More cpu map reuse by merge.
perf_cpu_map__merge() will reuse one of its arguments if they are equal or the other argument is NULL. The arguments could be reused if it is known one set of values is a subset of the other. For example, a map of 0-1 and a map of just 0 when merged yields the map of 0-1. Currently a new map is created rather than adding a reference count to the original 0-1 map. Signed-off-by: Ian Rogers <irogers@google.com> Cc: Adrian Hunter <adrian.hunter@intel.com> Cc: Alexander Antonov <alexander.antonov@linux.intel.com> Cc: Alexander Shishkin <alexander.shishkin@linux.intel.com> Cc: Alexei Starovoitov <ast@kernel.org> Cc: Alexey Bayduraev <alexey.v.bayduraev@linux.intel.com> Cc: Andi Kleen <ak@linux.intel.com> Cc: Andrii Nakryiko <andrii@kernel.org> Cc: Daniel Borkmann <daniel@iogearbox.net> Cc: German Gomez <german.gomez@arm.com> Cc: James Clark <james.clark@arm.com> Cc: Jiri Olsa <jolsa@kernel.org> Cc: John Fastabend <john.fastabend@gmail.com> Cc: John Garry <john.garry@huawei.com> Cc: KP Singh <kpsingh@kernel.org> Cc: Kajol Jain <kjain@linux.ibm.com> Cc: Leo Yan <leo.yan@linaro.org> Cc: Mark Rutland <mark.rutland@arm.com> Cc: Martin KaFai Lau <kafai@fb.com> Cc: Mathieu Poirier <mathieu.poirier@linaro.org> Cc: Mike Leach <mike.leach@linaro.org> Cc: Namhyung Kim <namhyung@kernel.org> Cc: Peter Zijlstra <peterz@infradead.org> Cc: Riccardo Mancini <rickyman7@gmail.com> Cc: Song Liu <songliubraving@fb.com> Cc: Stephane Eranian <eranian@google.com> Cc: Suzuki Poulouse <suzuki.poulose@arm.com> Cc: Will Deacon <will@kernel.org> Cc: Yonghong Song <yhs@fb.com> Cc: bpf@vger.kernel.org Cc: coresight@lists.linaro.org Cc: linux-arm-kernel@lists.infradead.org Cc: netdev@vger.kernel.org Link: http://lore.kernel.org/lkml/20220328232648.2127340-5-irogers@google.com Signed-off-by: Arnaldo Carvalho de Melo <acme@redhat.com>
1 parent c3ad8d2 commit da0bfb9

File tree

1 file changed

+5
-10
lines changed

1 file changed

+5
-10
lines changed

tools/lib/perf/cpumap.c

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -355,17 +355,12 @@ struct perf_cpu_map *perf_cpu_map__merge(struct perf_cpu_map *orig,
355355
int i, j, k;
356356
struct perf_cpu_map *merged;
357357

358-
if (!orig && !other)
359-
return NULL;
360-
if (!orig) {
361-
perf_cpu_map__get(other);
362-
return other;
363-
}
364-
if (!other)
365-
return orig;
366-
if (orig->nr == other->nr &&
367-
!memcmp(orig->map, other->map, orig->nr * sizeof(struct perf_cpu)))
358+
if (perf_cpu_map__is_subset(orig, other))
368359
return orig;
360+
if (perf_cpu_map__is_subset(other, orig)) {
361+
perf_cpu_map__put(orig);
362+
return perf_cpu_map__get(other);
363+
}
369364

370365
tmp_len = orig->nr + other->nr;
371366
tmp_cpus = malloc(tmp_len * sizeof(struct perf_cpu));

0 commit comments

Comments
 (0)