An error value for a missing die_id may be written into things like
the cpu_topology_map. As the topology needs to be fully written out,
including the die_id, to allow perf.data file features to be aligned
we can't allow error values to be written out. Instead base the
missing die_id value off of the socket/physical_package_id assuming
they correlate 1:1.
Signed-off-by: Ian Rogers <irogers@xxxxxxxxxx>
---
tools/perf/util/cpumap.c | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
diff --git a/tools/perf/util/cpumap.c b/tools/perf/util/cpumap.c
index 27094211edd8..d362272f8466 100644
--- a/tools/perf/util/cpumap.c
+++ b/tools/perf/util/cpumap.c
@@ -283,7 +283,8 @@ int cpu__get_die_id(struct perf_cpu cpu)
{
int value, ret = cpu__get_topology_int(cpu.cpu, "die_id", &value);
- return ret ?: value;
+ /* If die_id is missing fallback on using the socket/physical_package_id. */
+ return ret || value < 0 ? cpu__get_socket_id(cpu) : value;
}
struct aggr_cpu_id aggr_cpu_id__die(struct perf_cpu cpu, void *data)