From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from out-172.mta0.migadu.com (out-172.mta0.migadu.com [91.218.175.172]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 36049241CB7 for ; Mon, 13 Jul 2026 10:31:33 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=91.218.175.172 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783938695; cv=none; b=Jr/r97w67nGIFviJzJMI9nqADPfC2pusXT2Acm1I2Hv8F30ol+qeOAbAJiAIM2OZPwcMy/x83dV8x+DxgBThbACRwUIOkGEMjev74Z+bl6aSWzbwQInRivyj/22yJF4mgl1RD0UkKlcEbYLzJ54Q2g/GaB3vv6ucmIFTZ8ToNHE= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1783938695; c=relaxed/simple; bh=guyB+6quiEFGX4AsnlbsfiQaXv5z+paJdn/EUo/CSXg=; h=From:To:Cc:Subject:Date:Message-Id; b=EzDB4AbqbXb/lKQpCd0wKwZRLtgsa9aYeSSx2p5EMhDpOI+w8TRIjrTa02fqV3hGhwrff6i2LfkYEPylSvPlzQGQE3PQme0CBlEBeG4ywYCF9VOw9oSWH/8mdYPgfk3SMzSDabdD/ygQYBZ+OXnSPaIYB6LW+ZzsgHZJc+8PAKQ= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev; spf=pass smtp.mailfrom=linux.dev; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b=oK2MkkjL; arc=none smtp.client-ip=91.218.175.172 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linux.dev Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linux.dev Authentication-Results: smtp.subspace.kernel.org; dkim=pass (1024-bit key) header.d=linux.dev header.i=@linux.dev header.b="oK2MkkjL" X-Report-Abuse: Please report any abuse attempt to abuse@migadu.com and include these headers. DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linux.dev; s=key1; t=1783938681; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc; bh=DdZw068OCkfwYhuGEqn5npBkDRG5/RkIUC8PHlVzGcY=; b=oK2MkkjL4UYqSGcuJGJM4hqpTSBcTNiBD6QhU/XRz+UjPVl/guJxkW0jWr5YSDvpjzCanb s0VZAepI/3g9Fo6utQy4WdhvdVyiLnNvnN6z+oncwCfZf3QaO4C3fAjB+cc09UocoNMGCM b83HE8e0xt/yUhdswfy/oD2771L3Ijw= From: Zqiang To: paulmck@kernel.org, frederic@kernel.org, neeraj.upadhyay@kernel.org, joelagnelf@nvidia.com, urezki@gmail.com, boqun@kernel.org Cc: qiang.zhang@linux.dev, rcu@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH v2] rcu-tasks: Remove smp_mb() in rcu_spawn_tasks_kthread_generic() Date: Mon, 13 Jul 2026 18:31:12 +0800 Message-Id: <20260713103112.29425-1-qiang.zhang@linux.dev> X-Migadu-Flow: FLOW_OUT Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: The smp_mb() after kthread_run() in rcu_spawn_tasks_kthread_generic() from early commit: 'commit eacd6f04a133 ("rcu-tasks: Move Tasks RCU to its own file")' 'commit 84a8f446ffd7 ("rcu: Defer rcu_tasks_kthread() creation till first call_rcu_tasks()")' the memory order pairing as follows: rcu_spawn_tasks_kthread() ->t = kthread_run(rcu_tasks_kthread, ...); ->smp_mb(); /* Ensure others see full kthread. */ ->WRITE_ONCE(rcu_tasks_kthread_ptr, t); call_rcu_tasks() ->if (READ_ONCE(rcu_tasks_kthread_ptr)) ->wake_up(&rcu_tasks_cbs_wq) ->try_to_wake_up() lock pi_lock ->smp_mb__after_spinlock() //see full kthread Currently, the 'commit d119357d0743 ("rcu-tasks: Treat only synchronous grace periods urgently")' moved the kthread_ptr assignment into the rcu_tasks_kthread(), the following memory order pairings are sufficient: The runq's raw_spinlock/unlock(or smp_mb__after_spinlock()) from wake_up_process() in kthread_run() and __schedule() provides memory order barrier when the kthread is first scheduled, this ensures the kthread's func observes all of the kthread's initialization. The kthread's smp_store_release(&rtp->kthread_ptr, ...) in rcu_tasks_kthread() and smp_load_acquire(&rtp->kthread_ptr) in call_rcu_tasks_generic() compose release/acquire pairing, the cumulativity of smp_store_release() propagates visibility of the kthread's initialization through the scheduler chain. This commit therefore remove smp_mb() in rcu_spawn_tasks_kthread_generic(). Signed-off-by: Zqiang --- kernel/rcu/tasks.h | 1 - 1 file changed, 1 deletion(-) diff --git a/kernel/rcu/tasks.h b/kernel/rcu/tasks.h index 5a8db89135eb..a2ca79d1dd6a 100644 --- a/kernel/rcu/tasks.h +++ b/kernel/rcu/tasks.h @@ -681,7 +681,6 @@ static void __init rcu_spawn_tasks_kthread_generic(struct rcu_tasks *rtp) t = kthread_run(rcu_tasks_kthread, rtp, "%s_kthread", rtp->kname); if (WARN_ONCE(IS_ERR(t), "%s: Could not start %s grace-period kthread, OOM is now expected behavior\n", __func__, rtp->name)) return; - smp_mb(); /* Ensure others see full kthread. */ } #ifndef CONFIG_TINY_RCU -- 2.17.1