RFC Avoid sending IPIs to offline CPUs
Get series with b4
b4 am [email protected]Versions newest first
- v1 RFC Latest2 patches 0 repliesNew
Patches in v1 No applies recorded yet
| # | Subject and files | Size | Replies | Applied |
|---|---|---|---|---|
| 1/2 | sched: Stop resched_cpu() from sending IPIs to offline CPUskernel/ | +2 | 0 replies | |
| 2/2 | sched: Stop switched_to_rt() from sending IPIs to offline CPUskernel/ | +1 | 0 replies |
Reviews trailers per patch
No Reviewed-by, Acked-by or Tested-by trailers for v1 yet.
Cover letter [PATCH RFC tip/core/rcu 0/2] Avoid sending IPIs to offline CPUs
Hello!
This RFC series contains a couple of small patches that avoid splats due to resched_cpu() and rt_mutex_setprio() sending IPIs to offline CPUs. They make the obvious (and thus perhaps inappropriate) changes to avoid this. Nevertheless, they do seem effective in rcutorture testing. The patches are as follows:
1. Stop resched_cpu() from sending IPIs to offline CPUs, unless
that offline CPU happens to be the current CPU. (This last proviso is required to preserve resched_cpu()'s unconditional semantics for expedited RCU grace periods.) I am reasonably confident in this patch.
2. Stop switched_to_rt() from sending IPIs to offline CPUs, in
particular, when invoked via rt_mutex_lock(). This -looks- correct to me, but I am assuming that the fact that the current CPU is holding the target task's CPU's rq lock is preventing the to-be-boosted task from doing anything, and that a later migration of the target task will finalize the priority boosting. But there might be an odd corner case involving offlining an extremely heavily loaded CPU with lots of preempted tasks, one of which is blocking a high-priority real-time task somewhere else.
Note: The first patch depends on a patch intended for the upcoming merge window, and this latter patch may be found here:
lkml.kernel.org/r/[email protected]
Thanx, Paul
------------------------------------------------------------------------
core.c | 3 ++- rt.c | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-)