From: Frederic Weisbecker <frederic@kernel.org>
To: "Paul E. McKenney" <paulmck@kernel.org>
Cc: Boqun Feng <boqun.feng@gmail.com>,
linux-kernel@vger.kernel.org, rcu@vger.kernel.org,
Neeraj Upadhyay <Neeraj.Upadhyay@amd.com>,
Thomas Gleixner <tglx@linutronix.de>,
Sebastian Siewior <bigeasy@linutronix.de>,
Anna-Maria Behnsen <anna-maria@linutronix.de>,
Steven Rostedt <rostedt@goodmis.org>,
Neeraj Upadhyay <quic_neeraju@quicinc.com>,
Joel Fernandes <joel@joelfernandes.org>,
Josh Triplett <josh@joshtriplett.org>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Lai Jiangshan <jiangshanlai@gmail.com>,
Zqiang <qiang.zhang1211@gmail.com>
Subject: Re: [PATCH v2 6/6] rcu-tasks: Maintain real-time response in rcu_tasks_postscan()
Date: Fri, 23 Feb 2024 16:14:49 +0100 [thread overview]
Message-ID: <Zdi2aXbgKdsmP/1O@lothringen> (raw)
In-Reply-To: <ZdiMympnNOo6e+5T@lothringen>
On Fri, Feb 23, 2024 at 01:17:14PM +0100, Frederic Weisbecker wrote:
> diff --git a/kernel/rcu/tasks.h b/kernel/rcu/tasks.h
> index 866743e0796f..0ff2b554f5b5 100644
> --- a/kernel/rcu/tasks.h
> +++ b/kernel/rcu/tasks.h
> @@ -973,12 +973,13 @@ static void rcu_tasks_postscan(struct list_head *hop)
> for_each_possible_cpu(cpu) {
> unsigned long j = jiffies + 1;
> struct rcu_tasks_percpu *rtpcp = per_cpu_ptr(rcu_tasks.rtpcpu, cpu);
> - struct task_struct *t;
> - struct task_struct *t1;
> - struct list_head tmp;
>
> raw_spin_lock_irq_rcu_node(rtpcp);
> - list_for_each_entry_safe(t, t1, &rtpcp->rtp_exit_list, rcu_tasks_exit_list) {
> + while (!list_empty(&rtpcp->rtp_exit_list)) {
> + struct task_struct *t;
> + t = list_first_entry(&rtpcp->rtp_exit_list, typeof(*t), rcu_tasks_exit_list);
> + list_del_init(&t->rcu_tasks_exit_list);
Oh no! The task has to stay in the list for subsequent grace periods! Please
forget that suggestion... Yours looks good!
Thanks.
> +
> if (list_empty(&t->rcu_tasks_holdout_list))
> rcu_tasks_pertask(t, hop);
>
> @@ -987,14 +988,9 @@ static void rcu_tasks_postscan(struct list_head *hop)
> if (!IS_ENABLED(CONFIG_PREEMPT_RT) && time_before(jiffies, j))
> continue;
>
> - // Keep our place in the list while pausing.
> - // Nothing else traverses this list, so adding a
> - // bare list_head is OK.
> - list_add(&tmp, &t->rcu_tasks_exit_list);
> raw_spin_unlock_irq_rcu_node(rtpcp);
> cond_resched(); // For CONFIG_PREEMPT=n kernels
> raw_spin_lock_irq_rcu_node(rtpcp);
> - list_del(&tmp);
> j = jiffies + 1;
> }
> raw_spin_unlock_irq_rcu_node(rtpcp);
> @@ -1219,7 +1215,6 @@ void exit_tasks_rcu_stop(void)
> struct rcu_tasks_percpu *rtpcp;
> struct task_struct *t = current;
>
> - WARN_ON_ONCE(list_empty(&t->rcu_tasks_exit_list));
> rtpcp = per_cpu_ptr(rcu_tasks.rtpcpu, t->rcu_tasks_exit_cpu);
> raw_spin_lock_irqsave_rcu_node(rtpcp, flags);
> list_del_init(&t->rcu_tasks_exit_list);
>
next prev parent reply other threads:[~2024-02-23 15:14 UTC|newest]
Thread overview: 28+ messages / expand[flat|nested] mbox.gz Atom feed top
2024-02-17 1:27 [PATCH v2 0/6] RCU tasks fixes for v6.9 Boqun Feng
2024-02-17 1:27 ` [PATCH v2 1/6] rcu-tasks: Repair RCU Tasks Trace quiescence check Boqun Feng
2024-02-17 1:27 ` [PATCH v2 2/6] rcu-tasks: Add data to eliminate RCU-tasks/do_exit() deadlocks Boqun Feng
2024-02-22 16:54 ` Frederic Weisbecker
2024-02-22 20:46 ` Paul E. McKenney
2024-02-17 1:27 ` [PATCH v2 3/6] rcu-tasks: Initialize " Boqun Feng
2024-02-22 16:21 ` Frederic Weisbecker
2024-02-22 20:41 ` Paul E. McKenney
2024-02-23 11:39 ` Frederic Weisbecker
2024-02-17 1:27 ` [PATCH v2 4/6] rcu-tasks: Maintain lists " Boqun Feng
2024-02-22 16:32 ` Frederic Weisbecker
2024-02-23 12:19 ` Frederic Weisbecker
2024-02-24 0:28 ` Paul E. McKenney
2024-02-17 1:27 ` [PATCH v2 5/6] rcu-tasks: Eliminate deadlocks involving do_exit() and RCU tasks Boqun Feng
2024-02-22 16:46 ` Frederic Weisbecker
2024-02-17 1:27 ` [PATCH v2 6/6] rcu-tasks: Maintain real-time response in rcu_tasks_postscan() Boqun Feng
2024-02-22 17:48 ` Frederic Weisbecker
2024-02-22 20:52 ` Paul E. McKenney
2024-02-22 22:56 ` Paul E. McKenney
2024-02-23 12:17 ` Frederic Weisbecker
2024-02-23 15:14 ` Frederic Weisbecker [this message]
2024-02-24 0:23 ` Paul E. McKenney
2024-02-22 16:52 ` [PATCH v2 0/6] RCU tasks fixes for v6.9 Frederic Weisbecker
2024-02-22 22:09 ` Paul E. McKenney
2024-02-23 12:25 ` Frederic Weisbecker
2024-02-24 0:43 ` Paul E. McKenney
2024-02-26 13:56 ` Frederic Weisbecker
2024-02-26 14:37 ` Paul E. McKenney
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=Zdi2aXbgKdsmP/1O@lothringen \
--to=frederic@kernel.org \
--cc=Neeraj.Upadhyay@amd.com \
--cc=anna-maria@linutronix.de \
--cc=bigeasy@linutronix.de \
--cc=boqun.feng@gmail.com \
--cc=jiangshanlai@gmail.com \
--cc=joel@joelfernandes.org \
--cc=josh@joshtriplett.org \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=paulmck@kernel.org \
--cc=qiang.zhang1211@gmail.com \
--cc=quic_neeraju@quicinc.com \
--cc=rcu@vger.kernel.org \
--cc=rostedt@goodmis.org \
--cc=tglx@linutronix.de \
/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.