From patchwork Fri Oct 13 11:58:56 2023 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Frederic Weisbecker X-Patchwork-Id: 152550 Return-Path: Delivered-To: ouuuleilei@gmail.com Received: by 2002:a05:612c:2908:b0:403:3b70:6f57 with SMTP id ib8csp1835262vqb; Fri, 13 Oct 2023 05:00:55 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFTXu+XXYLQ/LTnGTUueVCsOmpYmrbek7zKmb1gWk2IPlw+9+Iyr9vEAS4xtwhybOf9hvfQ X-Received: by 2002:a05:6870:c689:b0:1e1:e6ee:94b6 with SMTP id cv9-20020a056870c68900b001e1e6ee94b6mr29065538oab.4.1697198455449; Fri, 13 Oct 2023 05:00:55 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1697198455; cv=none; d=google.com; s=arc-20160816; b=JFTF0c07ySHFQTlGFzAfVZUPC+sdiUsNLx6jCKo/chcdAegE/3zEsNc9Rxfti+a4B4 XW9V6Bi11aPeMwkCd8m6/pLvNyUwuULjaBqHdiIFdCx+31buKyEw6uMm1jTma0dw6MZC kKWm97xMashmvxi3mqPqLgT/GK5pi8Nauts3uRrCaaJquHSGFDyd1jYBsN5WPsCO+6iF RsZelCfCahwrqEGYDeS8AG8xPYLyI7sjU4K02msW8J9INNU67jT7R+oBM32U1N5vAtUx UlFFb50zyp/oH1pJUyrLHOqUvWIWscVhqEiBSHRUszlP2h7WY3XBfvd4BmNAjxe5uX2R UcDg== 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=5Xs+vRA2xE8p4nJrqsl3oYiPq5fiqust5CRhlU6snas=; fh=lTKEK1Rt7LvnHRfa4w1cQ2RgMDufzBK6qxi+oKKQlPU=; b=PjRe9I99MpwW2gW8s4y2goY7YwF2i1ZglQvUToth2vdzqzcSmI9zoAw/Bqgj2YJoHW pegKjCk+ONz+xIdcqM05y2ozmUJbf58S9GTJnB4Vbe4oZ2eaSfnjql+Gyi/nzPDi1Ezc Vd8F+B9EQXUY+iKVF/YcDfaQVTczA5qNLdzifv6T+PGxOE5ydbkEabPSHzYIFdDSIEBu 34ffYl28z5UQ+81vJKYs3XyLA73iNWX7Vi0IU3TMwqpuqJxR1UuAe7+Uzog7omn6tOot N6dXGlX3yr1/EFJ7FCn9QjJXzy4RYX41qtleTLs+oSgWCdTiZrlu/t55WmJiZ4rRg98q fdWg== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Num1RS1S; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from pete.vger.email (pete.vger.email. [23.128.96.36]) by mx.google.com with ESMTPS id b69-20020a633448000000b005ae39764b64si254583pga.135.2023.10.13.05.00.54 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 13 Oct 2023 05:00:55 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) client-ip=23.128.96.36; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=Num1RS1S; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.36 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: from out1.vger.email (depot.vger.email [IPv6:2620:137:e000::3:0]) by pete.vger.email (Postfix) with ESMTP id 42E378228811; Fri, 13 Oct 2023 05:00:46 -0700 (PDT) X-Virus-Status: Clean X-Virus-Scanned: clamav-milter 0.103.10 at pete.vger.email Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S231835AbjJMMAY (ORCPT + 19 others); Fri, 13 Oct 2023 08:00:24 -0400 Received: from lindbergh.monkeyblade.net ([23.128.96.19]:59998 "EHLO lindbergh.monkeyblade.net" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S231703AbjJML76 (ORCPT ); Fri, 13 Oct 2023 07:59:58 -0400 Received: from smtp.kernel.org (relay.kernel.org [52.25.139.140]) by lindbergh.monkeyblade.net (Postfix) with ESMTPS id 1AC0BF0; Fri, 13 Oct 2023 04:59:44 -0700 (PDT) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 60DC6C433CC; Fri, 13 Oct 2023 11:59:41 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1697198383; bh=Jc8jfSDSYlcGNx7gh6POnFvbeLKzhx7hBRosliLbEyA=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Num1RS1S+VHmhSvhhfUQFeinEqmcgTGDJDAIaONbq3FPkAFHzwUwOuvjJy8og4CQ7 q81UTKTc6Nx18Ce5vhFTky4BySoGMXuBiiOhVrWipiajLoRtu3GN77cXBFdCzpwRi9 ZCZV6NqAsS/oSBzFeZcgZ6nYtwfbmLl4YejSqQjzoBod3Xz2ogScl+ge2Ez2Zprbys elgAwJhY4FsXsi+9tjsMokcVAg+z8c7hmo0tBd9ZwIX6b6Pfb4OIxQEelAeQBKeCeG 7pX4k7yEGk+3ZFDOYAWJKTn3Lro4s6k26vfj3sC3tm4MeGLIQ/76JO8ktlnQjjIeFj vLl+KJdpcDdzg== From: Frederic Weisbecker To: LKML Cc: Frederic Weisbecker , Boqun Feng , Joel Fernandes , Josh Triplett , Mathieu Desnoyers , Neeraj Upadhyay , "Paul E . McKenney" , Steven Rostedt , Uladzislau Rezki , rcu Subject: [PATCH 12/18] rcu: Assume IRQS disabled from rcu_report_dead() Date: Fri, 13 Oct 2023 13:58:56 +0200 Message-Id: <20231013115902.1059735-13-frederic@kernel.org> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231013115902.1059735-1-frederic@kernel.org> References: <20231013115902.1059735-1-frederic@kernel.org> MIME-Version: 1.0 X-Spam-Status: No, score=-1.2 required=5.0 tests=DKIMWL_WL_HIGH,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,MAILING_LIST_MULTI, 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 pete.vger.email Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org X-Greylist: Sender passed SPF test, not delayed by milter-greylist-4.6.4 (pete.vger.email [0.0.0.0]); Fri, 13 Oct 2023 05:00:46 -0700 (PDT) X-getmail-retrieved-from-mailbox: INBOX X-GMAIL-THRID: 1779641567281509196 X-GMAIL-MSGID: 1779641567281509196 rcu_report_dead() is the last RCU word from the CPU down through the hotplug path. It is called in the idle loop right before the CPU shuts down for good. Because it removes the CPU from the grace period state machine and reports an ultimate quiescent state if necessary, no further use of RCU is allowed. Therefore it is expected that IRQs are disabled upon calling this function and are not to be re-enabled again until the CPU shuts down. Remove the IRQs disablement from that function and verify instead that it is actually called with IRQs disabled as it is expected at that special point in the idle path. Reviewed-by: Joel Fernandes (Google) Reviewed-by: Paul E. McKenney Signed-off-by: Frederic Weisbecker --- kernel/rcu/tree.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index 4dd7df30df31..8c2954502e55 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -4562,11 +4562,16 @@ void rcu_cpu_starting(unsigned int cpu) */ void rcu_report_dead(unsigned int cpu) { - unsigned long flags, seq_flags; + unsigned long flags; unsigned long mask; struct rcu_data *rdp = per_cpu_ptr(&rcu_data, cpu); struct rcu_node *rnp = rdp->mynode; /* Outgoing CPU's rdp & rnp. */ + /* + * IRQS must be disabled from now on and until the CPU dies, or an interrupt + * may introduce a new READ-side while it is actually off the QS masks. + */ + lockdep_assert_irqs_disabled(); // Do any dangling deferred wakeups. do_nocb_deferred_wakeup(rdp); @@ -4574,7 +4579,6 @@ void rcu_report_dead(unsigned int cpu) /* Remove outgoing CPU from mask in the leaf rcu_node structure. */ mask = rdp->grpmask; - local_irq_save(seq_flags); arch_spin_lock(&rcu_state.ofl_lock); raw_spin_lock_irqsave_rcu_node(rnp, flags); /* Enforce GP memory-order guarantee. */ rdp->rcu_ofl_gp_seq = READ_ONCE(rcu_state.gp_seq); @@ -4588,8 +4592,6 @@ void rcu_report_dead(unsigned int cpu) WRITE_ONCE(rnp->qsmaskinitnext, rnp->qsmaskinitnext & ~mask); raw_spin_unlock_irqrestore_rcu_node(rnp, flags); arch_spin_unlock(&rcu_state.ofl_lock); - local_irq_restore(seq_flags); - rdp->cpu_started = false; }