On Thu, May 30, 2019 at 07:53:47AM -0700, kan.liang@xxxxxxxxxxxxxxx wrote:
SNIP
+
static int perf_env__get_core(struct cpu_map *map, int idx, void *data)
{
struct perf_env *env = data;
int core = -1, cpu = perf_env__get_cpu(env, map, idx);
if (cpu != -1) {
- int socket_id = env->cpu[cpu].socket_id;
-
/*
- * Encode socket in upper 16 bits
- * core_id is relative to socket, and
+ * Encode socket in upper 24 bits
please note we use upper 8 bits for socket number,
the comments suggests it's 24 bits
+ * encode die id in upper 16 bits
+ * core_id is relative to socket and die,
* we need a global id. So we combine
- * socket + core id.
+ * socket + die id + core id
*/
- core = (socket_id << 16) | (env->cpu[cpu].core_id & 0xffff);
+ if (WARN_ONCE(env->cpu[cpu].socket_id >> 8,
+ "The socket_id number is too big. Please upgrade the perf tool.\n"))
hum, how's perf tool upgrade going to help in here?
+ return -1;
+
+ if (WARN_ONCE(env->cpu[cpu].die_id >> 8,
+ "The die_id number is too big. Please upgrade the perf tool.\n"))
+ return -1;
+
+ core = (env->cpu[cpu].socket_id << 24) |
+ (env->cpu[cpu].die_id << 16) |
+ (env->cpu[cpu].core_id & 0xffff);
}
other than comments above, the patchset looks good to me