Received: by 2002:a05:6602:18e:0:0:0:0 with SMTP id m14csp1054020ioo; Thu, 26 May 2022 23:51:31 -0700 (PDT) X-Google-Smtp-Source: ABdhPJw7vMCTzdKdexpQOKq6pcHmBG6DO2xVllbP/xL8tdj+f7NLI2NwC86s0XcFsFjIDhERiFb2 X-Received: by 2002:a17:90b:1d0c:b0:1e0:4198:5c34 with SMTP id on12-20020a17090b1d0c00b001e041985c34mr6772743pjb.174.1653634291342; Thu, 26 May 2022 23:51:31 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1653634291; cv=none; d=google.com; s=arc-20160816; b=okzmXIXJbXLFBtNFjMA7MqSJIR7LmdwCyFG4aa2lDRhWUxs/6aJGtdV6Au/ESuOh9t xepB2RFLAhPaZXne9WgjQrzOC67Svw8VTjTz5yai29hAEJiXnUbWeDVGH+yXm1RQhYLk +oNYwMDlqoA4UI7awfmsXho8k2KitkjHIzhLR/qcUlmQiEmOSGStNmt3AGEeyLrX/zfP dO6/9xDuTpEeURZf6RdDv7wo20yUElOG63Nxu9zQVPEmi1/2KB04s/xMAX8QMPk1HHSv kq3SRy1F372KsMVHKNr+OQFpc4rtXXXRMfDfSvrRvXJNhaNu2dXQErFyNPOgDvWM8g0V MLww== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:content-language :in-reply-to:mime-version:date:message-id:from:references:cc:to :subject:dkim-signature; bh=VlLal5NtblV8+vTcYwdbMBR2ZQ4UimIoxEKfq/rZzt8=; b=XB9QMuY2xdggyONBebigCVaBPBFPNs+PEHa/f39b0JGwcIb6CAMuRn05GCVCRq57uj sxeiboClGKgOBPtKBr1bO8kkibTDP62MlZDzabSwZWl2ZbrLaIRd+9y86sGbyjsRmIlO Rc0CJpXWNmzJ/b3NzseeI3B4UDH7QxS9D5Tgv6rzfL6vDeru6o7xQl8fwLqv0rFg3kSi 1+VmdNGVyELriQjxTU4tsCf8a1P7yMqinroup4jhAOo3lxERJ4egGjbtzmVoFrqBTLSm I02a/sVI56Du/ixNBf9OM7MXWokb1xMdmh1FrvBA8arBkkDKEf84/JOhRoC5XnO0Yvw3 wmcQ== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@posteo.net header.s=2017 header.b=SJ2CozR0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=posteo.net Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id j12-20020a65558c000000b003f5f0e7a705si5535918pgs.190.2022.05.26.23.51.19; Thu, 26 May 2022 23:51:31 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) client-ip=2620:137:e000::1:20; Authentication-Results: mx.google.com; dkim=pass header.i=@posteo.net header.s=2017 header.b=SJ2CozR0; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 2620:137:e000::1:20 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=posteo.net Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1347274AbiEZLuZ (ORCPT + 99 others); Thu, 26 May 2022 07:50:25 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:50710 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S232856AbiEZLuA (ORCPT ); Thu, 26 May 2022 07:50:00 -0400 Received: from mout02.posteo.de (mout02.posteo.de [185.67.36.66]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 81B9D13CE7 for ; Thu, 26 May 2022 04:49:57 -0700 (PDT) Received: from submission (posteo.de [185.67.36.169]) by mout02.posteo.de (Postfix) with ESMTPS id 3993C240109 for ; Thu, 26 May 2022 13:49:55 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=posteo.net; s=2017; t=1653565795; bh=cRcbvpylDEovzuioyUFbmK10HWZL8EtsZHhbUVtRPI0=; h=Subject:To:Cc:From:Date:From; b=SJ2CozR0XtfZ6bF8xNQcF5bqVGtpyVhVp4vw7HjWiVkPW5GClTlJbRdl9fogACn4C 3kJ/jgUTfVc1YUBuh4d9mqz8q7wCJWkumo9zvFSAtQTw/f+Tu2FmpzQxenDhRc477D rw0fs0dzSGxu3p3I30NGlng+Zc6VrcO4RsIOKumTbM/fuZaxV/52knY/Ec2LS9oG5r Wwx6Kv52LrRSLSTey7+Qd1WI+Tg4e33pwcqsPrHGbrcZRbFF2ywlcZtBaVBtdSEQrv 1Vz9c5Kb4N2y5MQ8YaAsBW6NBk69xCMj4hHFxf6ZoZnc0f2fGsp7nvTMoVoq6ImcqF S/MOPQkcM/brg== Received: from customer (localhost [127.0.0.1]) by submission (posteo.de) with ESMTPSA id 4L85p75wHzz6tmY; Thu, 26 May 2022 13:49:51 +0200 (CEST) Subject: Re: [PATCH v2] cpu/hotplug: Do not bail-out in DYING/STARTING sections To: Vincent Donnefort , peterz@infradead.org, tglx@linutronix.de Cc: linux-kernel@vger.kernel.org, vschneid@redhat.com, kernel-team@android.com References: <20220523160536.2889162-1-vdonnefort@google.com> From: Derek Dolney Message-ID: <7083f81f-cded-44f8-1586-46a1e44f0786@posteo.net> Date: Thu, 26 May 2022 11:48:01 +0000 MIME-Version: 1.0 In-Reply-To: <20220523160536.2889162-1-vdonnefort@google.com> Content-Type: text/plain; charset=utf-8 Content-Language: en-US Content-Transfer-Encoding: 7bit X-Spam-Status: No, score=-4.4 required=5.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_MED, RCVD_IN_MSPIKE_H2,SPF_HELO_NONE,SPF_PASS,T_SCC_BODY_TEXT_LINE autolearn=ham autolearn_force=no version=3.4.6 X-Spam-Checker-Version: SpamAssassin 3.4.6 (2021-04-09) on lindbergh.monkeyblade.net Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org I tested this patch on the 5.12 commit that broke suspend and also on the latest git 5.18 branch and this is good, suspend and resume are working again. Derek On 5/23/22 12:05 PM, Vincent Donnefort wrote: > The DYING/STARTING callbacks are not expected to fail. However, as reported > by Derek, drivers such as tboot are still free to return errors within > those sections. In that case, there's nothing the hotplug machinery can do, > so let's just proceed and log the failures. > > Fixes: 453e41085183 (cpu/hotplug: Add cpuhp_invoke_callback_range()) > Reported-by: Derek Dolney > Signed-off-by: Vincent Donnefort > > --- > > v1 -> v2: > - Commit message rewording. > - More details in the warnings. > - Some variable renaming > > diff --git a/kernel/cpu.c b/kernel/cpu.c > index bbad5e375d3b..c3617683459e 100644 > --- a/kernel/cpu.c > +++ b/kernel/cpu.c > @@ -663,21 +663,51 @@ static bool cpuhp_next_state(bool bringup, > return true; > } > > -static int cpuhp_invoke_callback_range(bool bringup, > - unsigned int cpu, > - struct cpuhp_cpu_state *st, > - enum cpuhp_state target) > +static int _cpuhp_invoke_callback_range(bool bringup, > + unsigned int cpu, > + struct cpuhp_cpu_state *st, > + enum cpuhp_state target, > + bool nofail) > { > enum cpuhp_state state; > - int err = 0; > + int ret = 0; > > while (cpuhp_next_state(bringup, &state, st, target)) { > + int err; > + > err = cpuhp_invoke_callback(cpu, state, bringup, NULL, NULL); > - if (err) > + if (!err) > + continue; > + > + if (nofail) { > + pr_warn("CPU %u %s state %s (%d) failed (%d)\n", > + cpu, bringup ? "UP" : "DOWN", > + cpuhp_get_step(st->state)->name, > + st->state, err); > + ret = -1; > + } else { > + ret = err; > break; > + } > } > > - return err; > + return ret; > +} > + > +static inline int cpuhp_invoke_callback_range(bool bringup, > + unsigned int cpu, > + struct cpuhp_cpu_state *st, > + enum cpuhp_state target) > +{ > + return _cpuhp_invoke_callback_range(bringup, cpu, st, target, false); > +} > + > +static inline void cpuhp_invoke_callback_range_nofail(bool bringup, > + unsigned int cpu, > + struct cpuhp_cpu_state *st, > + enum cpuhp_state target) > +{ > + WARN_ON_ONCE(_cpuhp_invoke_callback_range(bringup, cpu, st, target, true)); > } > > static inline bool can_rollback_cpu(struct cpuhp_cpu_state *st) > @@ -999,7 +1029,6 @@ static int take_cpu_down(void *_param) > struct cpuhp_cpu_state *st = this_cpu_ptr(&cpuhp_state); > enum cpuhp_state target = max((int)st->target, CPUHP_AP_OFFLINE); > int err, cpu = smp_processor_id(); > - int ret; > > /* Ensure this CPU doesn't handle any more interrupts. */ > err = __cpu_disable(); > @@ -1012,13 +1041,11 @@ static int take_cpu_down(void *_param) > */ > WARN_ON(st->state != (CPUHP_TEARDOWN_CPU - 1)); > > - /* Invoke the former CPU_DYING callbacks */ > - ret = cpuhp_invoke_callback_range(false, cpu, st, target); > - > /* > + * Invoke the former CPU_DYING callbacks > * DYING must not fail! > */ > - WARN_ON_ONCE(ret); > + cpuhp_invoke_callback_range_nofail(false, cpu, st, target); > > /* Give up timekeeping duties */ > tick_handover_do_timer(); > @@ -1296,16 +1323,14 @@ void notify_cpu_starting(unsigned int cpu) > { > struct cpuhp_cpu_state *st = per_cpu_ptr(&cpuhp_state, cpu); > enum cpuhp_state target = min((int)st->target, CPUHP_AP_ONLINE); > - int ret; > > rcu_cpu_starting(cpu); /* Enables RCU usage on this CPU. */ > cpumask_set_cpu(cpu, &cpus_booted_once_mask); > - ret = cpuhp_invoke_callback_range(true, cpu, st, target); > > /* > * STARTING must not fail! > */ > - WARN_ON_ONCE(ret); > + cpuhp_invoke_callback_range_nofail(true, cpu, st, target); > } > > /* >