* [PATCH v2] rcu: Remove impossible wakeup rcu GP kthread action from rcu_report_qs_rdp()
@ 2023-01-17 7:44 Zqiang
2023-01-17 14:03 ` Frederic Weisbecker
0 siblings, 1 reply; 3+ messages in thread
From: Zqiang @ 2023-01-17 7:44 UTC (permalink / raw)
To: paulmck, frederic, quic_neeraju, joel; +Cc: rcu, linux-kernel
When inovke rcu_report_qs_rdp(), if current CPU's rcu_data structure's ->
grpmask has not been cleared from the corresponding rcu_node structure's
->qsmask, after that will clear and report quiescent state, but in this
time, this also means that current grace period is not end, the current
grace period is ongoing, because the rcu_gp_in_progress() currently return
true, so for non-offloaded rdp, invoke rcu_accelerate_cbs() is impossible
to return true.
This commit therefore remove impossible rcu_gp_kthread_wake() calling.
Signed-off-by: Zqiang <qiang1.zhang@intel.com>
---
kernel/rcu/tree.c | 5 +----
1 file changed, 1 insertion(+), 4 deletions(-)
diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
index b2c204529478..c78d48482583 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
@@ -1956,7 +1956,6 @@ rcu_report_qs_rdp(struct rcu_data *rdp)
{
unsigned long flags;
unsigned long mask;
- bool needwake = false;
bool needacc = false;
struct rcu_node *rnp;
@@ -1988,7 +1987,7 @@ rcu_report_qs_rdp(struct rcu_data *rdp)
* NOCB kthreads have their own way to deal with that...
*/
if (!rcu_rdp_is_offloaded(rdp)) {
- needwake = rcu_accelerate_cbs(rnp, rdp);
+ WARN_ON_ONCE(rcu_accelerate_cbs(rnp, rdp));
} else if (!rcu_segcblist_completely_offloaded(&rdp->cblist)) {
/*
* ...but NOCB kthreads may miss or delay callbacks acceleration
@@ -2000,8 +1999,6 @@ rcu_report_qs_rdp(struct rcu_data *rdp)
rcu_disable_urgency_upon_qs(rdp);
rcu_report_qs_rnp(mask, rnp, rnp->gp_seq, flags);
/* ^^^ Released rnp->lock */
- if (needwake)
- rcu_gp_kthread_wake();
if (needacc) {
rcu_nocb_lock_irqsave(rdp, flags);
--
2.25.1
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH v2] rcu: Remove impossible wakeup rcu GP kthread action from rcu_report_qs_rdp()
2023-01-17 7:44 [PATCH v2] rcu: Remove impossible wakeup rcu GP kthread action from rcu_report_qs_rdp() Zqiang
@ 2023-01-17 14:03 ` Frederic Weisbecker
2023-01-18 7:20 ` Zhang, Qiang1
0 siblings, 1 reply; 3+ messages in thread
From: Frederic Weisbecker @ 2023-01-17 14:03 UTC (permalink / raw)
To: Zqiang; +Cc: paulmck, quic_neeraju, joel, rcu, linux-kernel
On Tue, Jan 17, 2023 at 03:44:43PM +0800, Zqiang wrote:
> When inovke rcu_report_qs_rdp(), if current CPU's rcu_data structure's ->
> grpmask has not been cleared from the corresponding rcu_node structure's
> ->qsmask, after that will clear and report quiescent state, but in this
> time, this also means that current grace period is not end, the current
> grace period is ongoing, because the rcu_gp_in_progress() currently return
> true, so for non-offloaded rdp, invoke rcu_accelerate_cbs() is impossible
> to return true.
>
> This commit therefore remove impossible rcu_gp_kthread_wake() calling.
>
> Signed-off-by: Zqiang <qiang1.zhang@intel.com>
> ---
> kernel/rcu/tree.c | 5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
>
> diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
> index b2c204529478..c78d48482583 100644
> --- a/kernel/rcu/tree.c
> +++ b/kernel/rcu/tree.c
> @@ -1956,7 +1956,6 @@ rcu_report_qs_rdp(struct rcu_data *rdp)
> {
> unsigned long flags;
> unsigned long mask;
> - bool needwake = false;
> bool needacc = false;
> struct rcu_node *rnp;
>
> @@ -1988,7 +1987,7 @@ rcu_report_qs_rdp(struct rcu_data *rdp)
> * NOCB kthreads have their own way to deal with that...
> */
> if (!rcu_rdp_is_offloaded(rdp)) {
> - needwake = rcu_accelerate_cbs(rnp, rdp);
> + WARN_ON_ONCE(rcu_accelerate_cbs(rnp, rdp));
Please also add a comment explaining why we don't expect to have
to wake up the GP kthread.
Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
Thanks!
> } else if (!rcu_segcblist_completely_offloaded(&rdp->cblist)) {
> /*
> * ...but NOCB kthreads may miss or delay callbacks acceleration
> @@ -2000,8 +1999,6 @@ rcu_report_qs_rdp(struct rcu_data *rdp)
> rcu_disable_urgency_upon_qs(rdp);
> rcu_report_qs_rnp(mask, rnp, rnp->gp_seq, flags);
> /* ^^^ Released rnp->lock */
> - if (needwake)
> - rcu_gp_kthread_wake();
>
> if (needacc) {
> rcu_nocb_lock_irqsave(rdp, flags);
> --
> 2.25.1
>
^ permalink raw reply [flat|nested] 3+ messages in thread
* RE: [PATCH v2] rcu: Remove impossible wakeup rcu GP kthread action from rcu_report_qs_rdp()
2023-01-17 14:03 ` Frederic Weisbecker
@ 2023-01-18 7:20 ` Zhang, Qiang1
0 siblings, 0 replies; 3+ messages in thread
From: Zhang, Qiang1 @ 2023-01-18 7:20 UTC (permalink / raw)
To: Frederic Weisbecker
Cc: paulmck@kernel.org, quic_neeraju@quicinc.com,
joel@joelfernandes.org, rcu@vger.kernel.org,
linux-kernel@vger.kernel.org
On Tue, Jan 17, 2023 at 03:44:43PM +0800, Zqiang wrote:
> When inovke rcu_report_qs_rdp(), if current CPU's rcu_data structure's ->
> grpmask has not been cleared from the corresponding rcu_node structure's
> ->qsmask, after that will clear and report quiescent state, but in this
> time, this also means that current grace period is not end, the current
> grace period is ongoing, because the rcu_gp_in_progress() currently return
> true, so for non-offloaded rdp, invoke rcu_accelerate_cbs() is impossible
> to return true.
>
> This commit therefore remove impossible rcu_gp_kthread_wake() calling.
>
> Signed-off-by: Zqiang <qiang1.zhang@intel.com>
> ---
> kernel/rcu/tree.c | 5 +----
> 1 file changed, 1 insertion(+), 4 deletions(-)
>
> diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
> index b2c204529478..c78d48482583 100644
> --- a/kernel/rcu/tree.c
> +++ b/kernel/rcu/tree.c
> @@ -1956,7 +1956,6 @@ rcu_report_qs_rdp(struct rcu_data *rdp)
> {
> unsigned long flags;
> unsigned long mask;
> - bool needwake = false;
> bool needacc = false;
> struct rcu_node *rnp;
>
> @@ -1988,7 +1987,7 @@ rcu_report_qs_rdp(struct rcu_data *rdp)
> * NOCB kthreads have their own way to deal with that...
> */
> if (!rcu_rdp_is_offloaded(rdp)) {
> - needwake = rcu_accelerate_cbs(rnp, rdp);
> + WARN_ON_ONCE(rcu_accelerate_cbs(rnp, rdp));
>
>Please also add a comment explaining why we don't expect to have
>to wake up the GP kthread.
Thanks Frederic, I will add comment next version.
>
>Reviewed-by: Frederic Weisbecker <frederic@kernel.org>
>
>Thanks!
>
> } else if (!rcu_segcblist_completely_offloaded(&rdp->cblist)) {
> /*
> * ...but NOCB kthreads may miss or delay callbacks acceleration
> @@ -2000,8 +1999,6 @@ rcu_report_qs_rdp(struct rcu_data *rdp)
> rcu_disable_urgency_upon_qs(rdp);
> rcu_report_qs_rnp(mask, rnp, rnp->gp_seq, flags);
> /* ^^^ Released rnp->lock */
> - if (needwake)
> - rcu_gp_kthread_wake();
>
> if (needacc) {
> rcu_nocb_lock_irqsave(rdp, flags);
> --
> 2.25.1
>
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2023-01-18 7:53 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2023-01-17 7:44 [PATCH v2] rcu: Remove impossible wakeup rcu GP kthread action from rcu_report_qs_rdp() Zqiang
2023-01-17 14:03 ` Frederic Weisbecker
2023-01-18 7:20 ` Zhang, Qiang1
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox