PATCH 1~2 mainly fix the deadline PI crash happened when doing enqueue_task_dl()->rt_mutex_get_top_task() due to not holding rq lock for the top waiter update.
PATCH 3~6 mainly fix the deadline PI issue happened when doing enqueue_task_dl() after get @pi_task, and access pi_task's data (dl.dl_runtime and dl.dl_period), because the access is not holding any lock(pi lock or rq lock) of pi_task's. PATCH 3~4 are separated out to make PATCH 5 smaller and easier to reviewers. The two issues can be fixed using the same logic, so bind them together as one series. Xunlei Pang (6): rtmutex: Deboost before waking up the top waiter sched/rtmutex/deadline: Fix a PI crash for deadline tasks rtmutex: Move "rt_mutex_waiter" definition to "include/linux/rtmutex.h" sched: Move dl_policy() to "include/linux/sched.h" sched/deadline/rtmutex: Fix unprotected PI access in enqueue_task_dl() sched/deadline/rtmutex: Don't miss the dl_runtime/dl_period update include/linux/init_task.h | 3 +- include/linux/rtmutex.h | 29 +++++++++++++- include/linux/sched.h | 10 ++++- include/linux/sched/deadline.h | 22 +++++++++++ kernel/fork.c | 1 + kernel/futex.c | 5 +-- kernel/locking/rtmutex.c | 84 ++++++++++++++++++++++++++++------------- kernel/locking/rtmutex_common.h | 22 +---------- kernel/sched/core.c | 2 + kernel/sched/deadline.c | 10 +++-- kernel/sched/sched.h | 4 -- 11 files changed, 132 insertions(+), 60 deletions(-) -- 1.8.3.1