Patch "sched, dl: Convert switched_{from, to}_dl() / prio_changed_dl() to balance callbacks" has been added to the 3.14-stable tree
Subsystems (2)
This is a note to let you know that I've just added the patch titled
sched, dl: Convert switched_{from, to}_dl() / prio_changed_dl() to balance callbacks
to the 3.14-stable tree which can be found at:
http://www.kernel.org/git/?p=linux/kernel/git/stable/stable-queue.git;a=summary
The filename of the patch is:
sched-dl-convert-switched_-from-to-_dl-prio_changed_dl-to-balance-callbacks.patch
and it can be found in the queue-3.14 subdirectory.
If you, or anyone else, feels it should not be added to the stable tree, please let <[email protected]> know about it.
Quoted 1 line
From
9916e214998a4a363b152b637245e5c958067350Mon Sep 17 00:00:00 2001
From: Peter Zijlstra <[email protected]>
Date: Thu, 11 Jun 2015 14:46:43 +0200
Subject: sched, dl: Convert switched_{from, to}_dl() / prio_changed_dl() to balance callbacks
From: Peter Zijlstra <[email protected]>
commit 9916e214998a4a363b152b637245e5c958067350 upstream.
Remove the direct {push,pull} balancing operations from switched_{from,to}_dl() / prio_changed_dl() and use the balance callback queue.
Again, err on the side of too many reschedules; since too few is a hard bug while too many is just annoying.
--- kernel/sched/deadline.c | 34 +++++++++++++++++++++------------- 1 file changed, 21 insertions(+), 13 deletions(-)
kernel/sched/deadline.c +21 -13
@@ -210,16 +210,23 @@ static inline int has_pushable_dl_tasks(static int push_dl_task (struct rq *rq); -static DEFINE_PER_CPU(struct callback_head, dl_balance_head); +static DEFINE_PER_CPU(struct callback_head, dl_push_head); +static DEFINE_PER_CPU(struct callback_head, dl_pull_head);static void push_dl_tasks (struct rq *); +static void pull_dl_task (struct rq *);static inline void queue_push_tasks (struct rq *rq) {if (!has_pushable_dl_tasks (rq))return ; -queue_balance_callback (rq, &per_cpu (dl_balance_head, rq->cpu), push_dl_tasks); +queue_balance_callback (rq, &per_cpu (dl_push_head, rq->cpu), push_dl_tasks); +} + +static inline void queue_pull_task (struct rq *rq) +{ +queue_balance_callback (rq, &per_cpu (dl_pull_head, rq->cpu), pull_dl_task); }#else
@@ -247,6 +254,10 @@ void dec_dl_migration(struct sched_dl_enstatic inline void queue_push_tasks (struct rq *rq) { } + +static inline void queue_pull_task (struct rq *rq) +{ +}#endif /* CONFIG_SMP */ static void enqueue_task_dl (struct rq *rq,struct task_struct *p,int flags);
@@ -1541,7 +1552,7 @@ static void switched_from_dl(struct rq ** from an overloaded cpu, if any. */ if (!rq->dl.dl_nr_running) -pull_dl_task (rq); +queue_pull_task (rq);#endif }
@@ -1551,8 +1562,6 @@ static void switched_from_dl(struct rq **/ static void switched_to_dl (struct rq *rq,struct task_struct *p) { -int check_resched =1 ; -/* * If p is throttled, don't consider the possibility * of preempting rq->curr, the check will be done right
@@ -1563,12 +1572,12 @@ static void switched_to_dl(struct rq *rqif (p->on_rq || rq->curr != p) {#ifdef CONFIG_SMP -if (rq->dl.overloaded &&push_dl_task (rq) && rq !=task_rq (p)) -/* Only reschedule if pushing failed */ - check_resched =0 ; -#endif /* CONFIG_SMP */ -if (check_resched &&task_has_dl_policy (rq->curr)) +if (rq->dl.overloaded) +queue_push_tasks (rq); +#else +if (task_has_dl_policy (rq->curr))check_preempt_curr_dl (rq, p,0 ); +#endif /* CONFIG_SMP */ } }
@@ -1588,15 +1597,14 @@ static void prio_changed_dl(struct rq *r* or lowering its prio, so... */ if (!rq->dl.overloaded) -pull_dl_task (rq); +queue_pull_task (rq);/* * If we now have a earlier deadline task than p, * then reschedule, provided p is still on this * runqueue. */ -if (dl_time_before (rq->dl.earliest_dl.curr, p->dl.deadline) && - rq->curr == p) +if (dl_time_before (rq->dl.earliest_dl.curr, p->dl.deadline))resched_task (p);#else /*
Patches currently in stable-queue which might be from [email protected] are
queue-3.14/sched-rt-remove-return-value-from-pull_rt_task.patch queue-3.14/sched-replace-post_schedule-with-a-balance-callback-list.patch queue-3.14/sched-clean-up-idle-task-smp-logic.patch queue-3.14/sched-dl-convert-switched_-from-to-_dl-prio_changed_dl-to-balance-callbacks.patch queue-3.14/sched-dl-remove-return-value-from-pull_dl_task.patch queue-3.14/sched-allow-balance-callbacks-for-check_class_changed.patch queue-3.14/sched-rt-convert-switched_-from-to-_rt-prio_changed_rt-to-balance-callbacks.patch