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 <[email protected]>
---
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)
return;
rdp = this_cpu_ptr(&rcu_data);
rdp->cpu_no_qs.b.norm = false;
--
2.25.1
On Sat, Jun 18, 2022 at 12:15:23PM +0000, Zhang, Qiang1 wrote:
> Le sam. 18 juin 2022, 04:23, Zqiang <[email protected]<mailto:[email protected]>> 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 <[email protected]<mailto:[email protected]>>
> ---
> 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