From: Neeraj Upadhyay <neeraj.upadhyay@xxxxxxxxxx> rcu_task_enter() and rcu_task_exit() are not called on NMI entry and exit. So, Tasks-RCU-Rude grace period wait is required to ensure that NMI handlers have entered/exited into Tasks-RCU eqs. For architectures which do not require Tasks-RCU-Rude (as the code sections where RCU is not watching are marked as noinstr), when those architectures switch to not using Tasks-RCU-Rude, NMI handlers task exit to eqs will need to be handled correctly for Tasks-RCU holdout tasks running on nohz_full CPUs. As it is safe to call these two functions from NMI context, remove the in_nmi() check to ensure that Tasks-RCU entry/exit is marked correctly for NMI handlers. Reported-by: Frederic Weisbecker <frederic@xxxxxxxxxx> Suggested-by: Frederic Weisbecker <frederic@xxxxxxxxxx> Suggested-by: "Paul E. McKenney" <paulmck@xxxxxxxxxx> Signed-off-by: Neeraj Upadhyay <neeraj.upadhyay@xxxxxxxxxx> --- kernel/context_tracking.c | 6 ++---- 1 file changed, 2 insertions(+), 4 deletions(-) diff --git a/kernel/context_tracking.c b/kernel/context_tracking.c index 152b485a62db..626dd7a173a5 100644 --- a/kernel/context_tracking.c +++ b/kernel/context_tracking.c @@ -239,8 +239,7 @@ void noinstr ct_nmi_exit(void) ct_kernel_exit_state(CT_RCU_WATCHING); // ... but is no longer watching here. - if (!in_nmi()) - rcu_task_exit(); + rcu_task_exit(); } /** @@ -273,8 +272,7 @@ void noinstr ct_nmi_enter(void) */ if (!rcu_is_watching_curr_cpu()) { - if (!in_nmi()) - rcu_task_enter(); + rcu_task_enter(); // RCU is not watching here ... ct_kernel_enter_state(CT_RCU_WATCHING); -- 2.40.1