From nobody Mon Jun 22 21:35:18 2026 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from vger.kernel.org (vger.kernel.org [23.128.96.18]) by smtp.lore.kernel.org (Postfix) with ESMTP id 68CA5C433EF for ; Wed, 16 Mar 2022 15:37:30 +0000 (UTC) Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347783AbiCPPin (ORCPT ); Wed, 16 Mar 2022 11:38:43 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59334 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S242953AbiCPPil (ORCPT ); Wed, 16 Mar 2022 11:38:41 -0400 Received: from foss.arm.com (foss.arm.com [217.140.110.172]) by lindbergh.monkeyblade.net (Postfix) with ESMTP id 502C76D1B4 for ; Wed, 16 Mar 2022 08:37:26 -0700 (PDT) Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 16BB51476; Wed, 16 Mar 2022 08:37:26 -0700 (PDT) Received: from e122027.arm.com (unknown [10.57.43.235]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 560793F7D7; Wed, 16 Mar 2022 08:37:24 -0700 (PDT) From: Steven Price To: Peter Zijlstra , Thomas Gleixner , Vincent Donnefort Cc: linux-kernel@vger.kernel.org, Baokun Li , Dongli Zhang , Randy Dunlap , Valentin Schneider , Yuan ZhaoXiong , YueHaibing , Steven Price , Dietmar Eggemann Subject: [PATCH v2] cpu/hotplug: Set st->cpu earlier Date: Wed, 16 Mar 2022 15:36:37 +0000 Message-Id: <20220316153637.288199-1-steven.price@arm.com> X-Mailer: git-send-email 2.25.1 MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Type: text/plain; charset="utf-8" Setting the 'cpu' member of struct cpuhp_cpu_state in cpuhp_create() is too late as other callbacks can be made before that point. In particular if one of the earlier callbacks fails and triggers a rollback that rollback will be done with st->cpu=3D=3D0 causing CPU0 to be erroneously set to be dying, causing the scheduler to get mightily confused and throw its toys out of the pram. Move the assignment earlier before any callbacks have a chance to run. Fixes: 2ea46c6fc945 ("cpumask/hotplug: Fix cpu_dying() state tracking") Signed-off-by: Steven Price CC: Dietmar Eggemann Reviewed-by: Vincent Donnefort Tested-by: Steven Price --- Changes since v1[1]: * Added a Fixes: tag. * Moved the assignment to just before cpuhp_set_state() which is the first place it is needed. [1]: https://lore.kernel.org/r/20220225134918.105796-1-steven.price%40arm.c= om kernel/cpu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kernel/cpu.c b/kernel/cpu.c index 407a2568f35e..c1324c8677cf 100644 --- a/kernel/cpu.c +++ b/kernel/cpu.c @@ -720,7 +720,6 @@ static void cpuhp_create(unsigned int cpu) =20 init_completion(&st->done_up); init_completion(&st->done_down); - st->cpu =3D cpu; } =20 static int cpuhp_should_run(unsigned int cpu) @@ -1351,6 +1350,7 @@ static int _cpu_up(unsigned int cpu, int tasks_frozen= , enum cpuhp_state target) =20 cpuhp_tasks_frozen =3D tasks_frozen; =20 + st->cpu =3D cpu; cpuhp_set_state(st, target); /* * If the current CPU state is in the range of the AP hotplug thread, --=20 2.25.1