Thanks for replying to reply Paul :) > And try testing with CONFIG_RCU_STRICT_GRACE_PERIOD=y and CONFIG_PREEMPT=n. > Though there might be better Kconfig options to use. Those two come > immediately to mind. I've tested with this option via rcu torture. and it doesn't report any problems. and after commit 6d60ea03ac2d3 ("rcu: Report QS for outermost PREEMPT=n rcu_read_unlock() for strict GPs") it always makes cpu_no_qs.b.norm false whenever it calls rcu_report_qs_rdp in rcu_read_unlock. > But one critical piece is that softirq handlers, including the RCU_SOFTIRQ > handler rcu_core_si(), can be invoked upon return from interrupts. I think in that case, no problem because if it reports qs already, rcu_check_quiescent_state wouldn't call rcu_report_qs_rdp again. And if RCU_SOFTIRQ is called as soon as RCU interrupt is finished, it seems the fastest one to notify qs to related tree. > Another critical piece is that if a CPU is idle during any part of a > grace period, the grace-period kthread can report a quiescent state on > its behalf. I think 1) If timer interrupt is still programed, - when rcu_sched_clock_irq first reports qs, no problem - If qs is reported via grace period thread first, note_gp_chagned in rcu interrupt will recognize this situation by setting core_needs_qs as false, it doesn't call rcu_report_qs_rdp thou cpu_no_qs.b.norm is true. 2) If the timer interrupt isn't programmed, - rcu_gp_kthreaad reports its qs, no problem. So, I think there's no problem removing "rdp->cpu_no_qs.b.norm" check in rcu_report_qs_rdp. or wrap this condition check as WARN_ON_ONCE. > Does that help? Many thanks always :) -------- SIncerely, Levi.