Received: by 2002:a05:6a10:206:0:0:0:0 with SMTP id 6csp1702626pxj; Wed, 19 May 2021 11:51:58 -0700 (PDT) X-Google-Smtp-Source: ABdhPJy2y+sIE629/7e6hvP8PXzEN4/XQVoSIQkmiczjgHZkDetzbbBVWgQOccXuxnrKxdv9AVZ2 X-Received: by 2002:a05:6402:280d:: with SMTP id h13mr500793ede.105.1621450318397; Wed, 19 May 2021 11:51:58 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1621450318; cv=none; d=google.com; s=arc-20160816; b=V/whevwOzLga4j/eDaeGoq9qp373TSZFncCF4y20043xK2I/nD2Wsb5n9lf0i50+V2 eUH/qQOBFavEjpCPJvjFWLaa3evFpbCkw3BtQX16hFX3xsryykIUdr1a5xH6v+KofUEP Owdatxdh8WsOoBN5ZFha2Gwq07Tohxj9ZHzSnGri5A6/rCHDWmq4XXrA4mFthsOXy5gi 9kx6NaH0A73XGfhsAfDtVhHrZkN3BA0lUWBNTYWlWEbRrrmJkGI8QLG4c46ro0T4Agqn rG14Tnj95qlXa2ek1mD3Frq0TrQhGbfFcGSiI1mmTGC8i0UddlD5DiI4z6LJxs1CZzl0 V8yA== 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=yFRF/wb7QJPfO1PHN1qaKCWrippbMiVP1vbO9bs445M=; b=Mpj7QpF4Wja7+TiA29j6/+t3JhbkXNpQ4SFCwSrMTOXqDAz+2/Tj7DL9F8Jb7LT2vd qYQrMrNA6/AqVAK2aOcMov4KSLaVMeDJJHjUwfDkpqBvE/HB3IamsQ/slk+wvRq9SVRz 7mwdRpi1Cja2s6IC6Lt/p4ccNago8qX8scsMkKcuq3HjbD2rwV+NVnxLx2c/vifQmj3N EpwWTwp1NgJowJln7GfzIB41VSgxdPoMmZIjbnEt/Sh1j75DWwJgydWCTvEVdHSnzIEX UU98QGj2jvf43nLkbX95RUr8EVGAjWoW82lKgbdV7C2hXdP1FIRps4EpW8f02ta++twj W7AA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=C9FS4vU9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id m11si17393edc.201.2021.05.19.11.51.34; Wed, 19 May 2021 11:51:58 -0700 (PDT) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=k20201202 header.b=C9FS4vU9; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1352846AbhESALE (ORCPT + 99 others); Tue, 18 May 2021 20:11:04 -0400 Received: from mail.kernel.org ([198.145.29.99]:53558 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1352409AbhESAK7 (ORCPT ); Tue, 18 May 2021 20:10:59 -0400 Received: by mail.kernel.org (Postfix) with ESMTPSA id CD26E61363; Wed, 19 May 2021 00:09:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1621382980; bh=8qbxz7WEGpVSMqD1fK+ggrOGQiNhB2uWQDWBi4BQiJE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=C9FS4vU9DG5XzoLMUem3v8MK4IHpxj+Ov6YsnDLZI3dzhHA+Dso16uLc+ezzUREAL wQOeop2jiy+AlaJTHLKOep7mKOCFWoq6dTqR+7g4SqcfNfkRsBFDTukpQ5NX3Kc6Ow bbYwi6SyyM8261wqdg/zeYNTqJYWXWWsXMR8a90TwFQDXmn+H/EFCni253+ISaGWLI lwId6FmQJZRqVJaqMOmOMc7MCHPuxIdGcF2Ew4s/YrwZsk1zr63UfewIfUWqwJC2oz x+88KnAGdPCN8mFERi8wFTBv/yStfmQFE4tQkPXEk5v3OQQWc7zB1BGlMJsQiYB5Qy pbKdbSUoGhkhA== From: Frederic Weisbecker To: "Paul E . McKenney" Cc: LKML , Frederic Weisbecker , rcu@vger.kernel.org Subject: [PATCH 3/3] rcu: Assume rcu_report_dead() always deals with local CPU Date: Wed, 19 May 2021 02:09:30 +0200 Message-Id: <20210519000930.15702-4-frederic@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20210519000930.15702-1-frederic@kernel.org> References: <20210519000930.15702-1-frederic@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org rcu_report_dead() is always called locally from the idle path. Passing a CPU number to it suggests otherwise and is rather error-prone as the code inside relies on locality. Robustify the function prototype and refine the name along the way. Signed-off-by: Frederic Weisbecker --- .../Expedited-Grace-Periods/Expedited-Grace-Periods.rst | 2 +- Documentation/RCU/Design/Memory-Ordering/TreeRCU-gp-fqs.svg | 2 +- Documentation/RCU/Design/Memory-Ordering/TreeRCU-gp.svg | 2 +- .../RCU/Design/Memory-Ordering/TreeRCU-hotplug.svg | 2 +- Documentation/RCU/Design/Requirements/Requirements.rst | 2 +- arch/arm64/kernel/smp.c | 2 +- include/linux/rcupdate.h | 2 +- kernel/cpu.c | 4 ++-- kernel/rcu/tree.c | 6 +++--- 9 files changed, 12 insertions(+), 12 deletions(-) diff --git a/Documentation/RCU/Design/Expedited-Grace-Periods/Expedited-Grace-Periods.rst b/Documentation/RCU/Design/Expedited-Grace-Periods/Expedited-Grace-Periods.rst index 6f89cf1e567d..eddf5eea94f1 100644 --- a/Documentation/RCU/Design/Expedited-Grace-Periods/Expedited-Grace-Periods.rst +++ b/Documentation/RCU/Design/Expedited-Grace-Periods/Expedited-Grace-Periods.rst @@ -181,7 +181,7 @@ operations is carried out at several levels: of this wait (or series of waits, as the case may be) is to permit a concurrent CPU-hotplug operation to complete. #. In the case of RCU-sched, one of the last acts of an outgoing CPU is - to invoke ``rcu_report_dead()``, which reports a quiescent state for + to invoke ``rcu_report_dead_cpu()``, which reports a quiescent state for that CPU. However, this is likely paranoia-induced redundancy. +-----------------------------------------------------------------------+ diff --git a/Documentation/RCU/Design/Memory-Ordering/TreeRCU-gp-fqs.svg b/Documentation/RCU/Design/Memory-Ordering/TreeRCU-gp-fqs.svg index 7ddc094d7f28..6e7b05ff00d3 100644 --- a/Documentation/RCU/Design/Memory-Ordering/TreeRCU-gp-fqs.svg +++ b/Documentation/RCU/Design/Memory-Ordering/TreeRCU-gp-fqs.svg @@ -1135,7 +1135,7 @@ font-weight="bold" font-size="192" id="text202-7-5-3-27-6-5" - style="font-size:192px;font-style:normal;font-weight:bold;text-anchor:start;fill:#000000;stroke-width:0.025in;font-family:Courier">rcu_report_dead() + style="font-size:192px;font-style:normal;font-weight:bold;text-anchor:start;fill:#000000;stroke-width:0.025in;font-family:Courier">rcu_report_dead_cpu() rcu_report_dead() + style="font-size:192px;font-style:normal;font-weight:bold;text-anchor:start;fill:#000000;stroke-width:0.025in;font-family:Courier">rcu_report_dead_cpu() rcu_report_dead() + style="font-size:192px;font-style:normal;font-weight:bold;text-anchor:start;fill:#000000;stroke-width:0.025in;font-family:Courier">rcu_report_dead_cpu() state != CPUHP_AP_OFFLINE); - rcu_report_dead(smp_processor_id()); + rcu_report_dead_cpu(); st->state = CPUHP_AP_IDLE_DEAD; /* - * We cannot call complete after rcu_report_dead() so we delegate it + * We cannot call complete after rcu_report_dead_cpu() so we delegate it * to an online cpu. */ smp_call_function_single(cpumask_first(cpu_online_mask), diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c index a6b448e6e059..824a3b367797 100644 --- a/kernel/rcu/tree.c +++ b/kernel/rcu/tree.c @@ -4322,11 +4322,11 @@ void rcu_cpu_starting(unsigned int cpu) * from the outgoing CPU rather than from the cpuhp_step mechanism. * This is because this function must be invoked at a precise location. */ -void rcu_report_dead(unsigned int cpu) +void rcu_report_dead_cpu(void) { unsigned long flags; unsigned long mask; - struct rcu_data *rdp = per_cpu_ptr(&rcu_data, cpu); + struct rcu_data *rdp = this_cpu_ptr(&rcu_data); struct rcu_node *rnp = rdp->mynode; /* Outgoing CPU's rdp & rnp. */ // Do any dangling deferred wakeups. @@ -4334,7 +4334,7 @@ void rcu_report_dead(unsigned int cpu) /* QS for any half-done expedited grace period. */ preempt_disable(); - rcu_report_exp_rdp(this_cpu_ptr(&rcu_data)); + rcu_report_exp_rdp(rdp); preempt_enable(); rcu_preempt_deferred_qs(current); -- 2.25.1