|
@@ -1304,7 +1304,8 @@ static void rcu_stall_kick_kthreads(struct rcu_state *rsp)
|
|
|
if (!rcu_kick_kthreads)
|
|
|
return;
|
|
|
j = READ_ONCE(rsp->jiffies_kick_kthreads);
|
|
|
- if (time_after(jiffies, j) && rsp->gp_kthread) {
|
|
|
+ if (time_after(jiffies, j) && rsp->gp_kthread &&
|
|
|
+ (rcu_gp_in_progress(rsp) || READ_ONCE(rsp->gp_flags))) {
|
|
|
WARN_ONCE(1, "Kicking %s grace-period kthread\n", rsp->name);
|
|
|
rcu_ftrace_dump(DUMP_ALL);
|
|
|
wake_up_process(rsp->gp_kthread);
|