From: "Lorenzo Stoakes (ARM)" <ljs@kernel.org>
To: Ye Liu <ye.liu@linux.dev>
Cc: Thomas Gleixner <tglx@kernel.org>,
Peter Zijlstra <peterz@infradead.org>,
"Rafael J. Wysocki" <rafael@kernel.org>,
Andrew Morton <akpm@linux-foundation.org>,
Ingo Molnar <mingo@redhat.com>, Will Deacon <will@kernel.org>,
Boqun Feng <boqun@kernel.org>,
"Paul E. McKenney" <paulmck@kernel.org>,
Frederic Weisbecker <frederic@kernel.org>,
Neeraj Upadhyay <neeraj.upadhyay@kernel.org>,
Joel Fernandes <joelagnelf@nvidia.com>,
Josh Triplett <josh@joshtriplett.org>,
Uladzislau Rezki <urezki@gmail.com>,
Juri Lelli <juri.lelli@redhat.com>,
Vincent Guittot <vincent.guittot@linaro.org>,
Steven Rostedt <rostedt@goodmis.org>,
Masami Hiramatsu <mhiramat@kernel.org>,
Josh Poimboeuf <jpoimboe@kernel.org>, Ye Liu <liuye@kylinos.cn>,
Michal Hocko <mhocko@suse.com>,
mic@digikod.net, oleg@redhat.com, david@kernel.org,
linmiaohe@huawei.com, nao.horiguchi@gmail.com,
gnoack3000@gmail.com, sj@kernel.org, rientjes@google.com,
shakeel.butt@linux.dev, xu.xin16@zte.com.cn,
chengming.zhou@linux.dev, tony.luck@intel.com,
reinette.chatre@intel.com, x86@kernel.org, paul@paul-moore.com,
jmorris@namei.org, serge@hallyn.com, pavel@kernel.org,
lance.yang@linux.dev, pmladek@suse.com, longman@redhat.com,
mathieu.desnoyers@efficios.com, jiangshanlai@gmail.com,
qiang.zhang@linux.dev, dietmar.eggemann@arm.com,
bsegall@google.com, mgorman@suse.de, vschneid@redhat.com,
kprateek.nayak@amd.com, mark.rutland@arm.com,
Dave.Martin@arm.com, james.morse@arm.com, babu.moger@amd.com,
linux-mm@kvack.org, linux-kernel@vger.kernel.org,
linux-pm@vger.kernel.org, rcu@vger.kernel.org,
linux-trace-kernel@vger.kernel.org,
linux-fsdevel@vger.kernel.org,
linux-security-module@vger.kernel.org
Subject: Re: [PATCH v2 5/8] kernel: convert process/thread iterators to for_each_*_rculock
Date: Mon, 7 Sep 2026 13:20:51 +0100 [thread overview]
Message-ID: <ap6d3zuVsJiLkrpr@gremlin> (raw)
In-Reply-To: <20260907081334.1152889-6-ye.liu@linux.dev>
On Mon, Sep 07, 2026 at 04:13:31PM +0800, Ye Liu wrote:
> From: Ye Liu <liuye@kylinos.cn>
>
> Replace the manual rcu_read_lock()/rcu_read_unlock() and guard(rcu)
> pairs combined with for_each_process(), for_each_thread() and
> for_each_process_thread() loops across kernel/ with the
> for_each_*_rculock() macros, which scope the RCU read lock to the
> loop body via scoped_guard(rcu).
>
> No functional change.
>
> Signed-off-by: Ye Liu <liuye@kylinos.cn>
> Acked-by: Michal Hocko <mhocko@suse.com>
LGTM so:
Reviewed-by: Lorenzo Stoakes (ARM) <ljs@kernel.org>
> ---
> Changes in v2:
> - Rename *_rcu to *_rculock
> - Rename stale 'unlock:' label to 'out:' in hung_task.c (Günther Noack)
> kernel/cpu.c | 4 +---
> kernel/freezer.c | 4 +---
> kernel/hung_task.c | 11 ++++-------
> kernel/locking/lockdep.c | 4 +---
> kernel/rcu/update.c | 4 +---
> kernel/sched/core.c | 3 +--
> kernel/sched/debug.c | 4 +---
> kernel/trace/fgraph.c | 8 ++------
> kernel/unwind/deferred.c | 3 +--
> 9 files changed, 13 insertions(+), 32 deletions(-)
>
> diff --git a/kernel/cpu.c b/kernel/cpu.c
> index b3c8553d7bd6..00638d2abc0f 100644
> --- a/kernel/cpu.c
> +++ b/kernel/cpu.c
> @@ -1254,8 +1254,7 @@ void clear_tasks_mm_cpumask(int cpu)
> * full-fledged tasklist_lock.
> */
> WARN_ON(cpu_online(cpu));
> - rcu_read_lock();
> - for_each_process(p) {
> + for_each_process_rculock(p) {
> struct task_struct *t;
>
> /*
> @@ -1268,7 +1267,6 @@ void clear_tasks_mm_cpumask(int cpu)
> arch_clear_mm_cpumask_cpu(cpu, t->mm);
> task_unlock(t);
> }
> - rcu_read_unlock();
> }
>
> /* Take this CPU down. */
> diff --git a/kernel/freezer.c b/kernel/freezer.c
> index a76bf957fb32..7a870f71dcf6 100644
> --- a/kernel/freezer.c
> +++ b/kernel/freezer.c
> @@ -217,11 +217,9 @@ void thaw_process(struct task_struct *p)
> {
> struct task_struct *t;
>
> - rcu_read_lock();
> - for_each_thread(p, t) {
> + for_each_thread_rculock(p, t) {
> __thaw_task(t);
> }
> - rcu_read_unlock();
> }
>
> /**
> diff --git a/kernel/hung_task.c b/kernel/hung_task.c
> index 6fcc94ce4ca9..73a5ad3be9a8 100644
> --- a/kernel/hung_task.c
> +++ b/kernel/hung_task.c
> @@ -315,13 +315,12 @@ static void check_hung_uninterruptible_tasks(unsigned long timeout)
> return;
>
> this_round_count = 0;
> - rcu_read_lock();
> - for_each_process_thread(g, t) {
> + for_each_process_thread_rculock(g, t) {
> if (!max_count--)
> - goto unlock;
> + goto out;
> if (time_after(jiffies, last_break + HUNG_TASK_LOCK_BREAK)) {
> if (!rcu_lock_break(g, t))
> - goto unlock;
> + goto out;
> last_break = jiffies;
> }
>
> @@ -337,9 +336,7 @@ static void check_hung_uninterruptible_tasks(unsigned long timeout)
> hung_task_info(t, timeout, this_round_count);
> }
> }
> - unlock:
> - rcu_read_unlock();
> -
> +out:
> if (!this_round_count)
> return;
>
> diff --git a/kernel/locking/lockdep.c b/kernel/locking/lockdep.c
> index c56a7f91d72e..ea218dc75ad5 100644
> --- a/kernel/locking/lockdep.c
> +++ b/kernel/locking/lockdep.c
> @@ -6834,15 +6834,13 @@ void debug_show_all_locks(void)
> }
> pr_warn("\nShowing all locks held in the system:\n");
>
> - rcu_read_lock();
> - for_each_process_thread(g, p) {
> + for_each_process_thread_rculock(g, p) {
> if (!p->lockdep_depth)
> continue;
> lockdep_print_held_locks(p);
> touch_nmi_watchdog();
> touch_all_softlockup_watchdogs();
> }
> - rcu_read_unlock();
>
> pr_warn("\n");
> pr_warn("=============================================\n\n");
> diff --git a/kernel/rcu/update.c b/kernel/rcu/update.c
> index 2a778b8ab4ad..d8e0b5896db9 100644
> --- a/kernel/rcu/update.c
> +++ b/kernel/rcu/update.c
> @@ -548,15 +548,13 @@ void synchronize_rcu_trivial_preempt(void)
> struct task_struct *t;
>
> smp_mb(); // Order prior accesses before grace-period start.
> - rcu_read_lock(); // Protect task list.
> - for_each_process_thread(g, t) {
> + for_each_process_thread_rculock(g, t) {
> if (t == current)
> continue; // Don't deadlock on ourselves!
> // Order later rcu_read_lock() on other tasks after QS.
> while (smp_load_acquire(&t->rcu_trivial_preempt_nesting))
> continue;
> }
> - rcu_read_unlock();
> }
> EXPORT_SYMBOL_GPL(synchronize_rcu_trivial_preempt);
> #endif // #if IS_ENABLED(CONFIG_TRIVIAL_PREEMPT_RCU)
> diff --git a/kernel/sched/core.c b/kernel/sched/core.c
> index 0697ed0f1c3d..fd5bdd2cb798 100644
> --- a/kernel/sched/core.c
> +++ b/kernel/sched/core.c
> @@ -2005,8 +2005,7 @@ static void uclamp_sync_util_min_rt_default(void)
> smp_mb__after_spinlock();
> read_unlock(&tasklist_lock);
>
> - guard(rcu)();
> - for_each_process_thread(g, p)
> + for_each_process_thread_rculock(g, p)
> uclamp_update_util_min_rt_default(p);
> }
>
> diff --git a/kernel/sched/debug.c b/kernel/sched/debug.c
> index 72236db67983..cdae165b98f7 100644
> --- a/kernel/sched/debug.c
> +++ b/kernel/sched/debug.c
> @@ -1029,14 +1029,12 @@ static void print_rq(struct seq_file *m, struct rq *rq, int rq_cpu)
> #endif
> "\n");
>
> - rcu_read_lock();
> - for_each_process_thread(g, p) {
> + for_each_process_thread_rculock(g, p) {
> if (task_cpu(p) != rq_cpu)
> continue;
>
> print_task(m, rq, p);
> }
> - rcu_read_unlock();
> }
>
> void print_cfs_rq(struct seq_file *m, int cpu, struct cfs_rq *cfs_rq)
> diff --git a/kernel/trace/fgraph.c b/kernel/trace/fgraph.c
> index 40d373d65f9b..f797ce119223 100644
> --- a/kernel/trace/fgraph.c
> +++ b/kernel/trace/fgraph.c
> @@ -1057,11 +1057,10 @@ static int alloc_retstack_tasklist(unsigned long **ret_stack_list)
> }
> }
>
> - rcu_read_lock();
> - for_each_process_thread(g, t) {
> + for_each_process_thread_rculock(g, t) {
> if (start == end) {
> ret = -EAGAIN;
> - goto unlock;
> + goto free;
> }
>
> if (t->ret_stack == NULL) {
> @@ -1074,9 +1073,6 @@ static int alloc_retstack_tasklist(unsigned long **ret_stack_list)
> t->ret_stack = ret_stack_list[start++];
> }
> }
> -
> -unlock:
> - rcu_read_unlock();
> free:
> for (i = start; i < end; i++)
> kmem_cache_free(fgraph_stack_cachep, ret_stack_list[i]);
> diff --git a/kernel/unwind/deferred.c b/kernel/unwind/deferred.c
> index 5bea47314254..ecfe1336095e 100644
> --- a/kernel/unwind/deferred.c
> +++ b/kernel/unwind/deferred.c
> @@ -319,9 +319,8 @@ void unwind_deferred_cancel(struct unwind_work *work)
>
> synchronize_srcu(&unwind_srcu);
>
> - guard(rcu)();
> /* Clear this bit from all threads */
> - for_each_process_thread(g, t) {
> + for_each_process_thread_rculock(g, t) {
> atomic_long_andnot(BIT(bit),
> &t->unwind_info.unwind_mask);
> if (t->unwind_info.cache)
> --
> 2.25.1
>
--
Cheers, Lorenzo
next prev parent reply other threads:[~2026-09-07 12:21 UTC|newest]
Thread overview: 49+ messages / expand[flat|nested] mbox.gz Atom feed top
2026-09-07 8:13 [PATCH v2 0/8] sched: introduce for_each_process_rculock and for_each_thread_rculock Ye Liu
2026-09-07 8:13 ` [PATCH v2 1/8] " Ye Liu
2026-09-07 8:30 ` Lorenzo Stoakes (ARM)
2026-09-07 9:35 ` Oleg Nesterov
2026-09-07 15:42 ` Gregory Price
2026-09-07 21:20 ` SJ Park
2026-09-07 8:13 ` [PATCH v2 2/8] mm/oom_kill: convert process/thread iterators to for_each_*_rculock Ye Liu
2026-09-07 8:35 ` Lorenzo Stoakes (ARM)
2026-09-07 15:42 ` Gregory Price
2026-09-07 8:13 ` [PATCH v2 3/8] mm/ksm: convert process iterator to for_each_process_rculock Ye Liu
2026-09-07 8:36 ` Lorenzo Stoakes (ARM)
2026-09-07 15:43 ` Gregory Price
2026-09-09 16:11 ` David Hildenbrand (Arm)
2026-09-07 8:13 ` [PATCH v2 4/8] mm/memory-failure: " Ye Liu
2026-09-07 11:05 ` Lorenzo Stoakes (ARM)
2026-09-07 15:43 ` Gregory Price
2026-09-07 21:24 ` SJ Park
2026-09-07 8:13 ` [PATCH v2 5/8] kernel: convert process/thread iterators to for_each_*_rculock Ye Liu
2026-09-07 8:22 ` sashiko-bot
2026-09-07 12:20 ` Lorenzo Stoakes (ARM) [this message]
2026-09-07 15:53 ` Gregory Price
2026-09-07 17:57 ` Oleg Nesterov
2026-09-07 21:05 ` Gregory Price
2026-09-07 21:54 ` Oleg Nesterov
2026-09-07 22:27 ` Gregory Price
2026-09-07 22:44 ` Oleg Nesterov
2026-09-08 2:27 ` K Prateek Nayak
2026-09-08 6:35 ` Oleg Nesterov
2026-09-09 22:14 ` Gregory Price
2026-09-08 7:51 ` Peter Zijlstra
2026-09-07 21:28 ` SJ Park
2026-09-08 6:42 ` Oleg Nesterov
2026-09-08 7:42 ` Peter Zijlstra
2026-09-09 16:09 ` Steven Rostedt
2026-09-09 21:46 ` Peter Zijlstra
2026-09-07 8:13 ` [PATCH v2 6/8] fs: " Ye Liu
2026-09-07 8:23 ` sashiko-bot
2026-09-07 12:27 ` Lorenzo Stoakes (ARM)
2026-09-07 15:47 ` Gregory Price
2026-09-07 21:40 ` SJ Park
2026-09-07 8:13 ` [PATCH v2 7/8] lib: convert process iterator to for_each_process_rculock Ye Liu
2026-09-07 12:27 ` Lorenzo Stoakes (ARM)
2026-09-07 15:47 ` Gregory Price
2026-09-07 21:42 ` SJ Park
2026-09-07 8:13 ` [PATCH v2 8/8] security/landlock: convert thread iterator to for_each_thread_rculock Ye Liu
2026-09-07 12:28 ` Lorenzo Stoakes (ARM)
2026-09-07 15:49 ` Gregory Price
2026-09-07 21:44 ` SJ Park
2026-09-07 8:26 ` [PATCH v2 0/8] sched: introduce for_each_process_rculock and for_each_thread_rculock Lorenzo Stoakes (ARM)
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=ap6d3zuVsJiLkrpr@gremlin \
--to=ljs@kernel.org \
--cc=Dave.Martin@arm.com \
--cc=akpm@linux-foundation.org \
--cc=babu.moger@amd.com \
--cc=boqun@kernel.org \
--cc=bsegall@google.com \
--cc=chengming.zhou@linux.dev \
--cc=david@kernel.org \
--cc=dietmar.eggemann@arm.com \
--cc=frederic@kernel.org \
--cc=gnoack3000@gmail.com \
--cc=james.morse@arm.com \
--cc=jiangshanlai@gmail.com \
--cc=jmorris@namei.org \
--cc=joelagnelf@nvidia.com \
--cc=josh@joshtriplett.org \
--cc=jpoimboe@kernel.org \
--cc=juri.lelli@redhat.com \
--cc=kprateek.nayak@amd.com \
--cc=lance.yang@linux.dev \
--cc=linmiaohe@huawei.com \
--cc=linux-fsdevel@vger.kernel.org \
--cc=linux-kernel@vger.kernel.org \
--cc=linux-mm@kvack.org \
--cc=linux-pm@vger.kernel.org \
--cc=linux-security-module@vger.kernel.org \
--cc=linux-trace-kernel@vger.kernel.org \
--cc=liuye@kylinos.cn \
--cc=longman@redhat.com \
--cc=mark.rutland@arm.com \
--cc=mathieu.desnoyers@efficios.com \
--cc=mgorman@suse.de \
--cc=mhiramat@kernel.org \
--cc=mhocko@suse.com \
--cc=mic@digikod.net \
--cc=mingo@redhat.com \
--cc=nao.horiguchi@gmail.com \
--cc=neeraj.upadhyay@kernel.org \
--cc=oleg@redhat.com \
--cc=paul@paul-moore.com \
--cc=paulmck@kernel.org \
--cc=pavel@kernel.org \
--cc=peterz@infradead.org \
--cc=pmladek@suse.com \
--cc=qiang.zhang@linux.dev \
--cc=rafael@kernel.org \
--cc=rcu@vger.kernel.org \
--cc=reinette.chatre@intel.com \
--cc=rientjes@google.com \
--cc=rostedt@goodmis.org \
--cc=serge@hallyn.com \
--cc=shakeel.butt@linux.dev \
--cc=sj@kernel.org \
--cc=tglx@kernel.org \
--cc=tony.luck@intel.com \
--cc=urezki@gmail.com \
--cc=vincent.guittot@linaro.org \
--cc=vschneid@redhat.com \
--cc=will@kernel.org \
--cc=x86@kernel.org \
--cc=xu.xin16@zte.com.cn \
--cc=ye.liu@linux.dev \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.