Please consider to RK. -- Best regards,
Konstantin Khorenko, Virtuozzo Linux Kernel Team On 12/08/2016 04:45 PM, Konstantin Khorenko wrote:
The commit is pushed to "branch-rh7-3.10.0-327.36.1.vz7.20.x-ovz" and will appear at https://src.openvz.org/scm/ovz/vzkernel.git after rh7-3.10.0-327.36.1.vz7.20.12 ------> commit 53fc9a189617835a17b831512f1f93515c4719aa Author: Kirill Tkhai <[email protected]> Date: Thu Dec 8 17:45:56 2016 +0400 ve/sched: Dereference resched_next on next task's stack When we dereference it before context switch, the read value just caches in prev task's stack. Later, the prev task may wake up in any cpu, so the value became useless. https://jira.sw.ru/browse/PSBM-56984 Signed-off-by: Kirill Tkhai <[email protected]> khorenko@: this fixes our priority inversion defense in kernel. --- kernel/sched/core.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index ccc826a..384373c 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -3443,9 +3443,6 @@ need_resched: clear_tsk_need_resched(prev); rq->skip_clock_update = 0; - resched_next = rq->resched_next; - rq->resched_next = 0; - if (likely(prev != next)) { rq->nr_switches++; rq->curr = next; @@ -3465,8 +3462,11 @@ need_resched: post_schedule(rq); - if (resched_next) + resched_next = READ_ONCE(rq->resched_next); + if (resched_next) { set_tsk_need_resched(current); + rq->resched_next = 0; + } sched_preempt_enable_no_resched(); if (!resched_next && need_resched()) .
_______________________________________________ Devel mailing list [email protected] https://lists.openvz.org/mailman/listinfo/devel
