From: Boqun Feng <boqun.feng@gmail.com>
To: Lai Jiangshan <laijs@linux.alibaba.com>
Cc: linux-kernel@vger.kernel.org,
"Paul E. McKenney" <paulmck@kernel.org>,
Josh Triplett <josh@joshtriplett.org>,
Steven Rostedt <rostedt@goodmis.org>,
Mathieu Desnoyers <mathieu.desnoyers@efficios.com>,
Lai Jiangshan <jiangshanlai@gmail.com>,
Joel Fernandes <joel@joelfernandes.org>,
rcu@vger.kernel.org
Subject: Re: [PATCH V2 2/7] rcu: cleanup rcu_preempt_deferred_qs()
Date: Sun, 3 Nov 2019 10:01:50 +0800 [thread overview]
Message-ID: <20191103020150.GA23770@tardis> (raw)
In-Reply-To: <20191102124559.1135-3-laijs@linux.alibaba.com>
[-- Attachment #1: Type: text/plain, Size: 1890 bytes --]
Hi Jiangshan,
I haven't checked the correctness of this patch carefully, but..
On Sat, Nov 02, 2019 at 12:45:54PM +0000, Lai Jiangshan wrote:
> Don't need to set ->rcu_read_lock_nesting negative, irq-protected
> rcu_preempt_deferred_qs_irqrestore() doesn't expect
> ->rcu_read_lock_nesting to be negative to work, it even
> doesn't access to ->rcu_read_lock_nesting any more.
rcu_preempt_deferred_qs_irqrestore() will report RCU qs, and may
eventually call swake_up() or its friends to wake up, say, the gp
kthread, and the wake up functions could go into the scheduler code
path which might have RCU read-side critical section in it, IOW,
accessing ->rcu_read_lock_nesting.
Again, haven't checked closely, but this argument in the commit log
seems untrue.
Regards,
Boqun
>
> It is true that NMI over rcu_preempt_deferred_qs_irqrestore()
> may access to ->rcu_read_lock_nesting, but it is still safe
> since rcu_read_unlock_special() can protect itself from NMI.
>
> Signed-off-by: Lai Jiangshan <laijs@linux.alibaba.com>
> ---
> kernel/rcu/tree_plugin.h | 5 -----
> 1 file changed, 5 deletions(-)
>
> diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h
> index aba5896d67e3..2fab8be2061f 100644
> --- a/kernel/rcu/tree_plugin.h
> +++ b/kernel/rcu/tree_plugin.h
> @@ -552,16 +552,11 @@ static bool rcu_preempt_need_deferred_qs(struct task_struct *t)
> static void rcu_preempt_deferred_qs(struct task_struct *t)
> {
> unsigned long flags;
> - bool couldrecurse = t->rcu_read_lock_nesting >= 0;
>
> if (!rcu_preempt_need_deferred_qs(t))
> return;
> - if (couldrecurse)
> - t->rcu_read_lock_nesting -= RCU_NEST_BIAS;
> local_irq_save(flags);
> rcu_preempt_deferred_qs_irqrestore(t, flags);
> - if (couldrecurse)
> - t->rcu_read_lock_nesting += RCU_NEST_BIAS;
> }
>
> /*
> --
> 2.20.1
>
[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]
next prev parent reply other threads:[~2019-11-03 2:01 UTC|newest]
Thread overview: 39+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-11-02 12:45 [PATCH V2 0/7] rcu: introduce percpu rcu_preempt_depth Lai Jiangshan
2019-11-02 12:45 ` [PATCH V2 1/7] rcu: use preempt_count to test whether scheduler locks is held Lai Jiangshan
2019-11-15 16:53 ` Paul E. McKenney
2020-02-19 3:31 ` Joel Fernandes
2020-02-19 3:59 ` Paul E. McKenney
2019-11-02 12:45 ` [PATCH V2 2/7] rcu: cleanup rcu_preempt_deferred_qs() Lai Jiangshan
2019-11-03 2:01 ` Boqun Feng [this message]
2019-11-03 5:01 ` Lai Jiangshan
2019-11-04 14:55 ` Paul E. McKenney
2019-11-05 2:09 ` Lai Jiangshan
2019-11-05 7:19 ` Paul E. McKenney
2019-11-11 14:32 ` Paul E. McKenney
2019-11-12 1:28 ` Lai Jiangshan
2020-02-17 23:23 ` Paul E. McKenney
2020-02-18 14:41 ` Steven Rostedt
2020-02-18 16:43 ` Paul E. McKenney
2019-11-15 16:55 ` Paul E. McKenney
2019-11-02 12:45 ` [PATCH V2 3/7] rcu: remove useless special.b.deferred_qs Lai Jiangshan
2020-02-17 23:23 ` Paul E. McKenney
2019-11-02 12:45 ` [PATCH V2 4/7] rcu: don't use negative ->rcu_read_lock_nesting Lai Jiangshan
2020-02-17 23:26 ` Paul E. McKenney
2019-11-02 12:45 ` [PATCH V2 5/7] rcu: wrap usages of rcu_read_lock_nesting Lai Jiangshan
2019-11-15 22:25 ` Paul E. McKenney
2019-11-02 12:45 ` [PATCH V2 6/7] rcu: clear the special.b.need_qs in rcu_note_context_switch() Lai Jiangshan
2019-11-16 15:46 ` Paul E. McKenney
2019-11-02 12:45 ` [PATCH V2 7/7] x86,rcu: use percpu rcu_preempt_depth Lai Jiangshan
2019-11-02 16:30 ` Borislav Petkov
2019-11-03 4:33 ` Lai Jiangshan
2019-11-04 9:25 ` Sebastian Andrzej Siewior
2019-11-04 11:41 ` Lai Jiangshan
2019-11-04 12:09 ` Sebastian Andrzej Siewior
2019-11-16 15:48 ` Paul E. McKenney
2019-11-18 2:02 ` Lai Jiangshan
2019-11-18 14:59 ` Paul E. McKenney
2019-11-19 1:59 ` Lai Jiangshan
2019-11-19 21:14 ` Paul E. McKenney
2019-11-20 2:47 ` Lai Jiangshan
2019-11-21 4:02 ` Paul E. McKenney
2019-11-02 15:05 ` [PATCH V2 0/7] rcu: introduce " 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=20191103020150.GA23770@tardis \
--to=boqun.feng@gmail.com \
--cc=jiangshanlai@gmail.com \
--cc=joel@joelfernandes.org \
--cc=josh@joshtriplett.org \
--cc=laijs@linux.alibaba.com \
--cc=linux-kernel@vger.kernel.org \
--cc=mathieu.desnoyers@efficios.com \
--cc=paulmck@kernel.org \
--cc=rcu@vger.kernel.org \
--cc=rostedt@goodmis.org \
/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.