Received: by 2002:a05:6358:11c7:b0:104:8066:f915 with SMTP id i7csp767689rwl; Sat, 25 Mar 2023 10:34:52 -0700 (PDT) X-Google-Smtp-Source: AKy350YQtBzziSCf+p32oEnAJP5w74CR85obITvd1GiLijHbtTf9SXEjvTFZ2keIxoaozWWoV0Yj X-Received: by 2002:a17:90a:ba08:b0:23d:5196:eca8 with SMTP id s8-20020a17090aba0800b0023d5196eca8mr6979885pjr.20.1679765691866; Sat, 25 Mar 2023 10:34:51 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1679765691; cv=none; d=google.com; s=arc-20160816; b=MS1qJXE7F4mPESW1l+JCwe7toM+j5lWXruvVXbRnak6dK4AMZhnEpcujprm8JQg4zg tWbGIHNpdUwnApxXwDmWHhOEmi6GOqtaRiDOvDnvrFw555KlqYCfcM7F+kNuZoY0ANpN c26pqktFDNJUyS76V2MZVCNydnyuN/HgXH+7L+ZeC5/PsWmTIXM4B6xkLub0c3XqNlst dEe6WB9ofVPiXi86rmEHMWkshAFUGkg27JNDFRDIw9uulcomFDv57Tw7GitBdL/CRUzl BiXPgPcukAxENmFfeGpDh9KAJjfb1nxDi/Akw3wP4yDviBKSpnMJh3Z6tSJv4rq2MYHQ j+YQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=ttYDdJ2Zx276ZWlJoVAWoRza17Ux4kZUYP3LM4W/4/Q=; b=mo2xZQJSpiDULQrhK5fsAxVwngjdr3vcOJKNWj7lo03z3c1NeEaVKBT0pKFaWyU4A0 4uluy/z7k3OGIx2Apr4MShV5Akyd0qb0vZeAgTGjO7ymLGRMQa9SvcoAZMUmi7x1X3FI gugzE35n5XO5VudaKm9766Fj5X2Ojoi5xZq8tWDpDCX1CcM0iwlz50yx1W+Rbm+EkVY4 G+cSUvpzi8XJbe9GJCQTsEHCok0aUK1gVvKc9M4wLLBGc/ETmyrm+jfSKOYgIkagI9wb 4sNFV4cFRrkQCPgH4G3T50ik+nLsj8EnkFUMQp3SeMJ884DSqS6+/9NknEMC7/6KPpnx m3Fw== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@joelfernandes.org header.s=google header.b=TBoO+zTC; 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 Return-Path: Received: from out1.vger.email (out1.vger.email. [2620:137:e000::1:20]) by mx.google.com with ESMTP id x11-20020a17090aca0b00b00234bf8d76f7si7042456pjt.2.2023.03.25.10.34.40; Sat, 25 Mar 2023 10:34:51 -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=@joelfernandes.org header.s=google header.b=TBoO+zTC; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231575AbjCYReQ (ORCPT + 99 others); Sat, 25 Mar 2023 13:34:16 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:36658 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231691AbjCYReE (ORCPT ); Sat, 25 Mar 2023 13:34:04 -0400 Received: from mail-qv1-xf36.google.com (mail-qv1-xf36.google.com [IPv6:2607:f8b0:4864:20::f36]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 9D443E380 for ; Sat, 25 Mar 2023 10:33:57 -0700 (PDT) Received: by mail-qv1-xf36.google.com with SMTP id oe8so3783689qvb.6 for ; Sat, 25 Mar 2023 10:33:57 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=joelfernandes.org; s=google; t=1679765636; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to; bh=ttYDdJ2Zx276ZWlJoVAWoRza17Ux4kZUYP3LM4W/4/Q=; b=TBoO+zTCa6TlvCdSFINwGhqY8IkwKRzIpUuMBfJ00Ks7v4MNhxO5xhvGMwRhaK8P9r Gn7ol1JTk3hslUvRYVP2KSNYdJj6l80Fwotm3y4bciBkbTl7+U9pgO5y+hZKzkz8ZyyY aElsltBE3c6EIzkIKdIrj8qosyBuHLivrfW1E= X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20210112; t=1679765636; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ttYDdJ2Zx276ZWlJoVAWoRza17Ux4kZUYP3LM4W/4/Q=; b=mIbl+fkns+xjiAEYW/ClTiSlwGFXKe4q5QFU26T84/ec7aHYeQ2B7xxgWEH7hZtnpY 1ofntlZKbXBxEMW2rpvIPrmVpKmL0g5OyReMfr31rsYoAy+TCXwVFAnOLxoLn4xtHP+I ELM59PYNtrVa85h8UpJfLsmN2OhmArECdNjFjxbNxhBm/LYwdVvDw624/FAK0Dq99Tcc Z2DnBgbVsvOb6u8FDY0CRyvCND9rA9UNNm9leeSjy1F5uDP+jFM5Ll8E/xYG5QcsTrVY 2RQ8TDmSn9soyOMLSeGooFWSXEbilYg19qnOuUjpkXQi/1EI0LnCGsNS0yer97wlMyxA 90yw== X-Gm-Message-State: AAQBX9eukbGnQAvaCxARmBBpPah3TKJu3k3hFvfhC8K55kuVIaFsnI2Q H8QHuYwCganm8wY2HbqNs1NoClstMe8mFKiD23U= X-Received: by 2002:a05:6214:f0f:b0:56e:a9d4:428a with SMTP id gw15-20020a0562140f0f00b0056ea9d4428amr9766799qvb.1.1679765636225; Sat, 25 Mar 2023 10:33:56 -0700 (PDT) Received: from joelboxx.c.googlers.com.com (129.239.188.35.bc.googleusercontent.com. [35.188.239.129]) by smtp.gmail.com with ESMTPSA id m4-20020ac84444000000b003e37ee54b5dsm6762764qtn.90.2023.03.25.10.33.55 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Sat, 25 Mar 2023 10:33:55 -0700 (PDT) From: "Joel Fernandes (Google)" To: linux-kernel@vger.kernel.org, Greg Kroah-Hartman , "Rafael J. Wysocki" , Frederic Weisbecker , Thomas Gleixner , Ingo Molnar , "Paul E. McKenney" , Josh Triplett Cc: "Joel Fernandes (Google)" , Frederic Weisbecker , Zhouyi Zhou , Will Deacon , Marc Zyngier , rcu , stable@vger.kernel.org Subject: [PATCH v2 04/13] tick/nohz: Fix cpu_is_hotpluggable() by checking with nohz subsystem Date: Sat, 25 Mar 2023 17:33:07 +0000 Message-Id: <20230325173316.3118674-5-joel@joelfernandes.org> X-Mailer: git-send-email 2.40.0.348.gf938b09366-goog In-Reply-To: <20230325173316.3118674-1-joel@joelfernandes.org> References: <20230325173316.3118674-1-joel@joelfernandes.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Spam-Status: No, score=-0.2 required=5.0 tests=DKIM_SIGNED,DKIM_VALID, DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_NONE,SPF_HELO_NONE,SPF_PASS autolearn=unavailable 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 For CONFIG_NO_HZ_FULL systems, the tick_do_timer_cpu cannot be offlined. However, cpu_is_hotpluggable() still returns true for those CPUs. This causes torture tests that do offlining to end up trying to offline this CPU causing test failures. Such failure happens on all architectures. Fix it by asking the opinion of the nohz subsystem on whether the CPU can be hotplugged. [ Apply Frederic Weisbecker feedback on refactoring tick_nohz_cpu_down(). ] For drivers/base/ portion: Acked-by: Greg Kroah-Hartman Cc: Frederic Weisbecker Cc: "Paul E. McKenney" Cc: Zhouyi Zhou Cc: Will Deacon Cc: Marc Zyngier Cc: rcu Cc: stable@vger.kernel.org Fixes: 2987557f52b9 ("driver-core/cpu: Expose hotpluggability to the rest of the kernel") Signed-off-by: Paul E. McKenney Signed-off-by: Joel Fernandes (Google) --- drivers/base/cpu.c | 3 ++- include/linux/tick.h | 2 ++ kernel/time/tick-sched.c | 11 ++++++++--- 3 files changed, 12 insertions(+), 4 deletions(-) diff --git a/drivers/base/cpu.c b/drivers/base/cpu.c index 182c6122f815..c1815b9dae68 100644 --- a/drivers/base/cpu.c +++ b/drivers/base/cpu.c @@ -487,7 +487,8 @@ static const struct attribute_group *cpu_root_attr_groups[] = { bool cpu_is_hotpluggable(unsigned int cpu) { struct device *dev = get_cpu_device(cpu); - return dev && container_of(dev, struct cpu, dev)->hotpluggable; + return dev && container_of(dev, struct cpu, dev)->hotpluggable + && tick_nohz_cpu_hotpluggable(cpu); } EXPORT_SYMBOL_GPL(cpu_is_hotpluggable); diff --git a/include/linux/tick.h b/include/linux/tick.h index bfd571f18cfd..9459fef5b857 100644 --- a/include/linux/tick.h +++ b/include/linux/tick.h @@ -216,6 +216,7 @@ extern void tick_nohz_dep_set_signal(struct task_struct *tsk, enum tick_dep_bits bit); extern void tick_nohz_dep_clear_signal(struct signal_struct *signal, enum tick_dep_bits bit); +extern bool tick_nohz_cpu_hotpluggable(unsigned int cpu); /* * The below are tick_nohz_[set,clear]_dep() wrappers that optimize off-cases @@ -280,6 +281,7 @@ static inline void tick_nohz_full_add_cpus_to(struct cpumask *mask) { } static inline void tick_nohz_dep_set_cpu(int cpu, enum tick_dep_bits bit) { } static inline void tick_nohz_dep_clear_cpu(int cpu, enum tick_dep_bits bit) { } +static inline bool tick_nohz_cpu_hotpluggable(unsigned int cpu) { return true; } static inline void tick_dep_set(enum tick_dep_bits bit) { } static inline void tick_dep_clear(enum tick_dep_bits bit) { } diff --git a/kernel/time/tick-sched.c b/kernel/time/tick-sched.c index b0e3c9205946..68d81a4283c8 100644 --- a/kernel/time/tick-sched.c +++ b/kernel/time/tick-sched.c @@ -527,7 +527,7 @@ void __init tick_nohz_full_setup(cpumask_var_t cpumask) tick_nohz_full_running = true; } -static int tick_nohz_cpu_down(unsigned int cpu) +bool tick_nohz_cpu_hotpluggable(unsigned int cpu) { /* * The tick_do_timer_cpu CPU handles housekeeping duty (unbound @@ -535,8 +535,13 @@ static int tick_nohz_cpu_down(unsigned int cpu) * CPUs. It must remain online when nohz full is enabled. */ if (tick_nohz_full_running && tick_do_timer_cpu == cpu) - return -EBUSY; - return 0; + return false; + return true; +} + +static int tick_nohz_cpu_down(unsigned int cpu) +{ + return tick_nohz_cpu_hotpluggable(cpu) ? 0 : -EBUSY; } void __init tick_nohz_init(void) -- 2.40.0.348.gf938b09366-goog