59879cb
From: Greg Kurz <gkurz@linux.vnet.ibm.com>
59879cb
Date: Fri, 12 Dec 2014 12:37:40 +0100
59879cb
Subject: [PATCH] powerpc/powernv: force all CPUs to be bootable
59879cb
59879cb
The subcore logic needs all the CPUs declared in the DT to be bootable,
59879cb
otherwise the kernel hangs at boot time. Since subcore support starts
59879cb
with POWER8, we can keep the current behaviour for older CPUs.
59879cb
59879cb
Signed-off-by: Greg Kurz <gkurz@linux.vnet.ibm.com>
59879cb
---
59879cb
 arch/powerpc/platforms/powernv/smp.c | 13 ++++++++++++-
59879cb
 1 file changed, 12 insertions(+), 1 deletion(-)
59879cb
59879cb
diff --git a/arch/powerpc/platforms/powernv/smp.c b/arch/powerpc/platforms/powernv/smp.c
59879cb
index 5fcfcf44e3a9..52552e60df36 100644
59879cb
--- a/arch/powerpc/platforms/powernv/smp.c
59879cb
+++ b/arch/powerpc/platforms/powernv/smp.c
59879cb
@@ -185,13 +185,24 @@ static void pnv_smp_cpu_kill_self(void)
59879cb
 
59879cb
 #endif /* CONFIG_HOTPLUG_CPU */
59879cb
 
59879cb
+static int pnv_cpu_bootable(unsigned int nr)
59879cb
+{
59879cb
+	/* Starting with POWER8, all CPUs need to be booted to avoid hangs
59879cb
+	 * during subcore init.
59879cb
+	 */
59879cb
+	if (cpu_has_feature(CPU_FTR_ARCH_207S))
59879cb
+		return 1;
59879cb
+
59879cb
+	return smp_generic_cpu_bootable(nr);
59879cb
+}
59879cb
+
59879cb
 static struct smp_ops_t pnv_smp_ops = {
59879cb
 	.message_pass	= smp_muxed_ipi_message_pass,
59879cb
 	.cause_ipi	= NULL,	/* Filled at runtime by xics_smp_probe() */
59879cb
 	.probe		= xics_smp_probe,
59879cb
 	.kick_cpu	= pnv_smp_kick_cpu,
59879cb
 	.setup_cpu	= pnv_smp_setup_cpu,
59879cb
-	.cpu_bootable	= smp_generic_cpu_bootable,
59879cb
+	.cpu_bootable	= pnv_cpu_bootable,
59879cb
 #ifdef CONFIG_HOTPLUG_CPU
59879cb
 	.cpu_disable	= pnv_smp_cpu_disable,
59879cb
 	.cpu_die	= generic_cpu_die,
59879cb
-- 
59879cb
2.1.0
59879cb