diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/sched/deadline.c | 13 |
1 files changed, 12 insertions, 1 deletions
diff --git a/kernel/sched/deadline.c b/kernel/sched/deadline.c index 256e577faf1b..92279eaf0ef2 100644 --- a/kernel/sched/deadline.c +++ b/kernel/sched/deadline.c | |||
| @@ -847,8 +847,19 @@ static void enqueue_task_dl(struct rq *rq, struct task_struct *p, int flags) | |||
| 847 | * smaller than our one... OTW we keep our runtime and | 847 | * smaller than our one... OTW we keep our runtime and |
| 848 | * deadline. | 848 | * deadline. |
| 849 | */ | 849 | */ |
| 850 | if (pi_task && p->dl.dl_boosted && dl_prio(pi_task->normal_prio)) | 850 | if (pi_task && p->dl.dl_boosted && dl_prio(pi_task->normal_prio)) { |
| 851 | pi_se = &pi_task->dl; | 851 | pi_se = &pi_task->dl; |
| 852 | } else if (!dl_prio(p->normal_prio)) { | ||
| 853 | /* | ||
| 854 | * Special case in which we have a !SCHED_DEADLINE task | ||
| 855 | * that is going to be deboosted, but exceedes its | ||
| 856 | * runtime while doing so. No point in replenishing | ||
| 857 | * it, as it's going to return back to its original | ||
| 858 | * scheduling class after this. | ||
| 859 | */ | ||
| 860 | BUG_ON(!p->dl.dl_boosted || flags != ENQUEUE_REPLENISH); | ||
| 861 | return; | ||
| 862 | } | ||
| 852 | 863 | ||
| 853 | /* | 864 | /* |
| 854 | * If p is throttled, we do nothing. In fact, if it exhausted | 865 | * If p is throttled, we do nothing. In fact, if it exhausted |
