RFC rcu/sched: Fix ignored rescheduling after rcu_eqs_enter() v3
Get series with b4
b4 am [email protected]Versions newest first
- v1 RFC Latest8 patches 12 repliesIn review
Patches in v1 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/8 | rcu: Remove superfluous rdp fetchkernel/ | +0 | 2 replies | |
| 2/8 | rcu: Pull deferred rcuog wake up to rcu_eqs_enter() callerskernel/ | +6 | 0 replies | |
| 3/8 | rcu/nocb: Perform deferred wake up before last idle's need_resched() checkinclude/ kernel/ kernel/ +1 more | +10 | 0 replies | |
| 4/8 | rcu/nocb: Trigger self-IPI on late deferred wake up before user resumekernel/ kernel/ kernel/ | +38 | 2 replies | |
| 5/8 | entry: Explicitly flush pending rcuog wakeup before last rescheduling pointskernel/ kernel/ | +13 | 5 replies | |
| 6/8 | sched: Report local wake up on resched blind zone within idle loopinclude/ kernel/ kernel/ +1 more | +59 | 3 replies | |
| 7/8 | entry: Report local wake up on resched blind zone while resuming to userkernel/ | +4 | 0 replies | |
| 8/8 | timer: Report ignored local enqueue in nohz modekernel/ | +23 | 0 replies |
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.
Cover letter [RFC PATCH 0/8] rcu/sched: Fix ignored rescheduling after rcu_eqs_enter() v3
(This was [PATCH 0/4] sched/idle: Fix missing need_resched() checks after rcu_idle_enter() v2)
I initially followed Peterz review but eventually I tried a different approach. Instead of handling the late wake up from rcu_idle_enter(), I've split the delayed rcuog wake up and moved it right before the last generic need_resched() check, it makes more sense and we don't need to fiddle with cpuidle core and drivers anymore. It's also less error prone.
I also fixed the nohz_full case and (hopefully) the guest case.
And this comes with debugging to prevent from that pattern to happen again.
Only lightly tested so far.
git://git.kernel.org/pub/scm/linux/kernel/git/frederic/linux-dynticks.git
sched/idle-v3
HEAD: d95fc510e804a5c4658a823ff12d9caba1d906c7
Thanks,
Frederic
---
Frederic Weisbecker (8):
rcu: Remove superfluous rdp fetch
rcu: Pull deferred rcuog wake up to rcu_eqs_enter() callers rcu/nocb: Perform deferred wake up before last idle's need_resched() check rcu/nocb: Trigger self-IPI on late deferred wake up before user resume
entry: Explicitly flush pending rcuog wakeup before last rescheduling points
sched: Report local wake up on resched blind zone within idle loop
entry: Report local wake up on resched blind zone while resuming to user
timer: Report ignored local enqueue in nohz mode
include/linux/rcupdate.h | 2 ++ include/linux/sched.h | 11 ++++++++ kernel/entry/common.c | 10 ++++++++ kernel/rcu/tree.c | 27 ++++++++++++++++++-- kernel/rcu/tree.h | 2 +- kernel/rcu/tree_plugin.h | 30 +++++++++++++++------- kernel/sched/core.c | 66 +++++++++++++++++++++++++++++++++++++++++++++++- kernel/sched/idle.c | 6 +++++ kernel/sched/sched.h | 3 +++ 9 files changed, 144 insertions(+), 13 deletions(-)