Re: [PATCH] rcu/tree: Fix self wakeups for grace period kthread

From: Neeraj Upadhyay
Date: Tue Mar 12 2019 - 07:55:36 EST




On 3/12/19 7:20 AM, Steven Rostedt wrote:
On Fri, 8 Mar 2019 15:16:18 +0530
Neeraj Upadhyay <neeraju@xxxxxxxxxxxxxx> wrote:

Update the code to match the comment that self wakeup of
grace period kthread is allowed from interrupt handler, and
softirq handler, running in the grace period kthread's
context. Present code allows self wakeups from all
interrupt contexts - nmi, softirq and hardirq contexts.

That's not actually the issue. But it appears that we return if we
simply have BH disabled, which I don't think we want, and we don't care
about NMI as NMI should never call this code.

I think your patch is correct, but the change log is not.

-- Steve


Hi Steve, sorry, I don't understand fully, why we want to not return in BH disabled case. From the commit logs and lkml discussion, there is a case where GP kthread is interrupted in the wait event path and rcu_gp_kthread_wake() is called in softirq handler (I am not sure about interrupt handler case; how rcu_gp_kthread_wake() is called from that path).

https://github.com/torvalds/linux/commit/1d1f898df6586c5ea9aeaf349f13089c6fa37903

Thanks
Neeraj


Signed-off-by: Neeraj Upadhyay <neeraju@xxxxxxxxxxxxxx>
---
kernel/rcu/tree.c | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/kernel/rcu/tree.c b/kernel/rcu/tree.c
index acd6ccf..57cac6d 100644
--- a/kernel/rcu/tree.c
+++ b/kernel/rcu/tree.c
@@ -1585,7 +1585,7 @@ static bool rcu_future_gp_cleanup(struct rcu_node *rnp)
static void rcu_gp_kthread_wake(void)
{
if ((current == rcu_state.gp_kthread &&
- !in_interrupt() && !in_serving_softirq()) ||
+ !in_irq() && !in_serving_softirq()) ||
!READ_ONCE(rcu_state.gp_flags) ||
!rcu_state.gp_kthread)
return;


--
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a
member of the Code Aurora Forum, hosted by The Linux Foundation