Message ID | 20220618022255.1697816-1-qiang1.zhang@intel.com (mailing list archive) |
---|---|
State | Accepted |
Commit | 6a69e757b6a65bb81f1f7d12083668dddd3ba930 |
Headers | show |
Series | rcu: Avoid strict QS reporting in NMI context | expand |
On Sat, Jun 18, 2022 at 12:15:23PM +0000, Zhang, Qiang1 wrote: > Le sam. 18 juin 2022, 04:23, Zqiang <qiang1.zhang@intel.com<mailto:qiang1.zhang@intel.com>> a écrit : > Avoid invoke rcu_report_qs_rdp() in NMI handlers, in NMI handlers, > acquiring raw_spinlocks should be avoided, prevent NMI handlers > from blocking(spin) unnecessarily. > > This commit make rcu_read_unlock_strict() early return when in > NMI context. > > Signed-off-by: Zqiang <qiang1.zhang@intel.com<mailto:qiang1.zhang@intel.com>> > --- > kernel/rcu/tree_plugin.h | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h > index dc78726b993f..e7a36e248a8a 100644 > --- a/kernel/rcu/tree_plugin.h > +++ b/kernel/rcu/tree_plugin.h > @@ -821,7 +821,7 @@ void rcu_read_unlock_strict(void) > { > struct rcu_data *rdp; > > - if (irqs_disabled() || preempt_count() || !rcu_state.gp_kthread) > + if (in_nmi() || irqs_disabled() || preempt_count() || !rcu_state.gp_kthread) > > >Doesn't preempt_count() imply in_nmi()? > > > > > > It looks like this, thanks Frederic > > #define nmi_count() (preempt_count() & NMI_MASK) > #define in_nmi() (nmi_count()) > > Hi Paul, sorry it’s my mistake. Thank you both for catching this! I clearly should not be reviewing incoming patches late on Friday evening! Thanx, Paul > >Thanks. > > return; > rdp = this_cpu_ptr(&rcu_data); > rdp->cpu_no_qs.b.norm = false; > -- > 2.25.1
diff --git a/kernel/rcu/tree_plugin.h b/kernel/rcu/tree_plugin.h index dc78726b993f..e7a36e248a8a 100644 --- a/kernel/rcu/tree_plugin.h +++ b/kernel/rcu/tree_plugin.h @@ -821,7 +821,7 @@ void rcu_read_unlock_strict(void) { struct rcu_data *rdp; - if (irqs_disabled() || preempt_count() || !rcu_state.gp_kthread) + if (in_nmi() || irqs_disabled() || preempt_count() || !rcu_state.gp_kthread) return; rdp = this_cpu_ptr(&rcu_data); rdp->cpu_no_qs.b.norm = false;
Avoid invoke rcu_report_qs_rdp() in NMI handlers, in NMI handlers, acquiring raw_spinlocks should be avoided, prevent NMI handlers from blocking(spin) unnecessarily. This commit make rcu_read_unlock_strict() early return when in NMI context. Signed-off-by: Zqiang <qiang1.zhang@intel.com> --- kernel/rcu/tree_plugin.h | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-)