Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1753557AbdHWIVZ (ORCPT ); Wed, 23 Aug 2017 04:21:25 -0400 Received: from mailapp01.imgtec.com ([195.59.15.196]:58773 "EHLO mailapp01.imgtec.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1753433AbdHWIVW (ORCPT ); Wed, 23 Aug 2017 04:21:22 -0400 From: Matt Redfearn To: Ralf Baechle CC: , Matt Redfearn , Matija Glavinic Pecotic , Marcin Nowakowski , Paul Gortmaker , , Ingo Molnar , Paul Burton Subject: [PATCH] MIPS: Revert "MIPS: Fix race on setting and getting cpu_online_mask" Date: Wed, 23 Aug 2017 09:21:15 +0100 Message-ID: <1503476475-21069-1-git-send-email-matt.redfearn@imgtec.com> X-Mailer: git-send-email 2.7.4 MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.150.130.83] Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1985 Lines: 54 Commit 6f542ebeaee0 ("MIPS: Fix race on setting and getting cpu_online_mask") effectively reverted commit 8f46cca1e6c06 ("MIPS: SMP: Fix possibility of deadlock when bringing CPUs online") and thus has reinstated the possibility of deadlock. The commit was based on testing of kernel v4.4, where the CPU hotplug code issued a BUG() if the starting CPU is not marked online when the boot CPU returns from __cpu_up. The commit fixes this race, but re-introduces the deadlock situation. As noted in the commit message, upstream differs in this area. The hotplug code now waits on a completion event in bringup_wait_for_ap, which is set by the starting CPU in cpuhp_online_idle once it calls cpu_startup_entry. Thus there is no possibility of a race in upstream, and this commit has only re-introduced the deadlock condition, which can be observed on multiple platforms when running a heavy load test at the same time as hotplugging CPUs. See commit 8f46cca1e6c06 ("MIPS: SMP: Fix possibility of deadlock when bringing CPUs online") for details. This reverts commit 6f542ebeaee0ee552a902ce3892220fc22c7ec8e. Signed-off-by: Matt Redfearn CC: Matija Glavinic Pecotic --- arch/mips/kernel/smp.c | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/arch/mips/kernel/smp.c b/arch/mips/kernel/smp.c index 25f6877ce464..603963e1d8e7 100644 --- a/arch/mips/kernel/smp.c +++ b/arch/mips/kernel/smp.c @@ -383,6 +383,9 @@ asmlinkage void start_secondary(void) cpumask_set_cpu(cpu, &cpu_coherent_mask); notify_cpu_starting(cpu); + complete(&cpu_running); + synchronise_count_slave(cpu); + set_cpu_online(cpu, true); set_cpu_sibling_map(cpu); @@ -390,9 +393,6 @@ asmlinkage void start_secondary(void) calculate_cpu_foreign_map(); - complete(&cpu_running); - synchronise_count_slave(cpu); - /* * irq will be enabled in ->smp_finish(), enabling it too early * is dangerous. -- 2.7.4