All of lore.kernel.org
 help / color / mirror / Atom feed
From: Neeraj Upadhyay <quic_neeraju@quicinc.com>
To: Frederic Weisbecker <frederic@kernel.org>,
	"Paul E . McKenney" <paulmck@kernel.org>
Cc: LKML <linux-kernel@vger.kernel.org>,
	Uladzislau Rezki <urezki@gmail.com>,
	Boqun Feng <boqun.feng@gmail.com>,
	Josh Triplett <josh@joshtriplett.org>,
	Joel Fernandes <joel@joelfernandes.org>, <rcu@vger.kernel.org>
Subject: Re: [PATCH] rcu/exp: Mark current CPU as exp-QS in IPI loop second pass
Date: Tue, 30 Nov 2021 22:31:57 +0530	[thread overview]
Message-ID: <dee700be-bad1-e497-ccfc-916b98d7d593@quicinc.com> (raw)
In-Reply-To: <20211130162108.605092-1-frederic@kernel.org>



On 11/30/2021 9:51 PM, Frederic Weisbecker wrote:
> While looping through the rnp's CPUs to IPI for an expedited grace
> period, a first pass excludes the current CPU and the CPUs in dynticks
> idle mode. The workqueue will report their QS on their behalf later.
> 
> The second pass processes the IPIs and also ignores the current CPU,
> assuming it has been previously included in the group of CPUs whose
> QS are to be reported by the workqueue.
> 
> Unfortunately the current CPU may have changed between the first and
> second pass, due to the rnp lock being dropped, re-enabling preemption.
> As a result the current CPU, if different in the second pass, may be
> ignored by the expedited grace period. No IPI will be sent to it
> so it won't be requested to report an expedited quiescent state.
> 
> This ends up in an expedited grace period stall.
> 
> Fix this with including the current CPU in the second round in the group
> of CPUs to report a QS for by the workqueue.
> 
> Fixes: b9ad4d6ed18e ("rcu: Avoid self-IPI in sync_rcu_exp_select_node_cpus()")
> Signed-off-by: Frederic Weisbecker <frederic@kernel.org>
> Cc: Uladzislau Rezki <urezki@gmail.com>
> Cc: Neeraj Upadhyay <quic_neeraju@quicinc.com>
> Cc: Boqun Feng <boqun.feng@gmail.com>
> Cc: Josh Triplett <josh@joshtriplett.org>
> Cc: Joel Fernandes <joel@joelfernandes.org>
> ---

Reviewed-by: Neeraj Upadhyay <quic_neeraju@quicinc.com>



Thanks
Neeraj


>   kernel/rcu/tree_exp.h | 1 +
>   1 file changed, 1 insertion(+)
> 
> diff --git a/kernel/rcu/tree_exp.h b/kernel/rcu/tree_exp.h
> index a96d17206d87..237a79989aba 100644
> --- a/kernel/rcu/tree_exp.h
> +++ b/kernel/rcu/tree_exp.h
> @@ -387,6 +387,7 @@ static void sync_rcu_exp_select_node_cpus(struct work_struct *wp)
>   			continue;
>   		}
>   		if (get_cpu() == cpu) {
> +			mask_ofl_test |= mask;
>   			put_cpu();
>   			continue;
>   		}
> 

  reply	other threads:[~2021-11-30 17:02 UTC|newest]

Thread overview: 3+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-11-30 16:21 [PATCH] rcu/exp: Mark current CPU as exp-QS in IPI loop second pass Frederic Weisbecker
2021-11-30 17:01 ` Neeraj Upadhyay [this message]
2021-11-30 18:44   ` 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=dee700be-bad1-e497-ccfc-916b98d7d593@quicinc.com \
    --to=quic_neeraju@quicinc.com \
    --cc=boqun.feng@gmail.com \
    --cc=frederic@kernel.org \
    --cc=joel@joelfernandes.org \
    --cc=josh@joshtriplett.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=paulmck@kernel.org \
    --cc=rcu@vger.kernel.org \
    --cc=urezki@gmail.com \
    /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.