From d87ca0cd531d530b8340104434483594d1358a58 Mon Sep 17 00:00:00 2001
From: Lingutla Chandrasekhar <clingutla@codeaurora.org>
Date: Wed, 27 Mar 2019 10:44:14 +0530
Subject: [PATCH] ldrp_v2: sched-info: Fix finding number of clusters

Current script assumes last cpu would map to last cluster in cpu-map.
But it might not true always, device-tree can map cpus in different
order than its actual number. i.e. cpus0-3 could be part on cluster#1,
and cpus4-7 maps to cluster#0, in this case last cluster id is 0 and
breaks above assumption.

Fix this by dynamically extending the cluster list.

Change-Id: I907d89e33a1f57b656c6df374a23e18b2d2c42fa
Signed-off-by: Lingutla Chandrasekhar <clingutla@codeaurora.org>
---
 linux-ramdump-parser-v2/sched_info.py | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/linux-ramdump-parser-v2/sched_info.py b/linux-ramdump-parser-v2/sched_info.py
index 2c55daf..96007bb 100644
--- a/linux-ramdump-parser-v2/sched_info.py
+++ b/linux-ramdump-parser-v2/sched_info.py
@@ -41,19 +41,18 @@ def verify_active_cpus(ramdump):
     if (cluster_id_off is None):
         print_out_str("\n Invalid cluster topology detected\n")
 
-    clusters = ramdump.read_int(cpu_topology_addr + cluster_id_off + ((nr_cpus - 1) * cpu_topology_size))
-    clusters += 1
-
     # INFO: from 4.19 onwards, core_sibling mask contains only online cpus,
     #       find out cluster cpus dynamically.
 
-    cluster_nrcpus = [0] * (clusters)
+    cluster_nrcpus = [0]
     for j in range(0, nr_cpus):
         c_id = ramdump.read_int(cpu_topology_addr + (j * cpu_topology_size) + cluster_id_off)
+        if len(cluster_nrcpus) <= c_id :
+            cluster_nrcpus.extend([0])
         cluster_nrcpus[c_id] += 1
 
     next_cluster_cpu = 0
-    for i in range(0, clusters):
+    for i in range(0, len(cluster_nrcpus)):
         cluster_cpus = ramdump.read_word(cpu_topology_addr +
                                         (next_cluster_cpu * cpu_topology_size) + core_sib_off)
         cluster_online_cpus = cpu_online_bits & cluster_cpus
-- 
GitLab