From: "Gautham R. Shenoy" <e...@linux.vnet.ibm.com>

On POWER9 DD1, in order to get around a hardware issue, we store in
every CPU thread's paca the paca pointers of all its siblings.

Move this code into pnv_alloc_idle_core_states() soon after the space
for saving the sibling pacas is allocated.

Signed-off-by: Gautham R. Shenoy <e...@linux.vnet.ibm.com>
---
 arch/powerpc/platforms/powernv/idle.c | 45 +++++++++++++++++------------------
 1 file changed, 22 insertions(+), 23 deletions(-)

diff --git a/arch/powerpc/platforms/powernv/idle.c 
b/arch/powerpc/platforms/powernv/idle.c
index c400ff9..254a0db8 100644
--- a/arch/powerpc/platforms/powernv/idle.c
+++ b/arch/powerpc/platforms/powernv/idle.c
@@ -194,6 +194,28 @@ static void pnv_alloc_idle_core_states(void)
                }
        }
 
+       /*
+        * For each CPU, record its PACA address in each of it's
+        * sibling thread's PACA at the slot corresponding to this
+        * CPU's index in the core.
+        */
+       if (cpu_has_feature(CPU_FTR_POWER9_DD1)) {
+               int cpu;
+
+               pr_info("powernv: idle: Saving PACA pointers of all CPUs in 
their thread sibling PACA\n");
+               for_each_possible_cpu(cpu) {
+                       int base_cpu = cpu_first_thread_sibling(cpu);
+                       int idx = cpu_thread_in_core(cpu);
+                       int i;
+
+                       for (i = 0; i < threads_per_core; i++) {
+                               int j = base_cpu + i;
+
+                               paca[j].thread_sibling_pacas[idx] = &paca[cpu];
+                       }
+               }
+       }
+
        update_subcore_sibling_mask();
 
        if (supported_cpuidle_states & OPAL_PM_LOSE_FULL_CONTEXT)
@@ -898,31 +920,8 @@ static int __init pnv_init_idle_states(void)
        if (pnv_probe_idle_states())
                goto out;
 
-
        pnv_alloc_idle_core_states();
 
-       /*
-        * For each CPU, record its PACA address in each of it's
-        * sibling thread's PACA at the slot corresponding to this
-        * CPU's index in the core.
-        */
-       if (cpu_has_feature(CPU_FTR_POWER9_DD1)) {
-               int cpu;
-
-               pr_info("powernv: idle: Saving PACA pointers of all CPUs in 
their thread sibling PACA\n");
-               for_each_possible_cpu(cpu) {
-                       int base_cpu = cpu_first_thread_sibling(cpu);
-                       int idx = cpu_thread_in_core(cpu);
-                       int i;
-
-                       for (i = 0; i < threads_per_core; i++) {
-                               int j = base_cpu + i;
-
-                               paca[j].thread_sibling_pacas[idx] = &paca[cpu];
-                       }
-               }
-       }
-
 out:
        return 0;
 }
-- 
1.9.4

Reply via email to