diff options
Diffstat (limited to 'kernel/sched/core.c')
-rw-r--r-- | kernel/sched/core.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 50a5352f6205..d59652d60f86 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c | |||
@@ -3417,6 +3417,20 @@ static bool check_same_owner(struct task_struct *p) | |||
3417 | return match; | 3417 | return match; |
3418 | } | 3418 | } |
3419 | 3419 | ||
3420 | static bool dl_param_changed(struct task_struct *p, | ||
3421 | const struct sched_attr *attr) | ||
3422 | { | ||
3423 | struct sched_dl_entity *dl_se = &p->dl; | ||
3424 | |||
3425 | if (dl_se->dl_runtime != attr->sched_runtime || | ||
3426 | dl_se->dl_deadline != attr->sched_deadline || | ||
3427 | dl_se->dl_period != attr->sched_period || | ||
3428 | dl_se->flags != attr->sched_flags) | ||
3429 | return true; | ||
3430 | |||
3431 | return false; | ||
3432 | } | ||
3433 | |||
3420 | static int __sched_setscheduler(struct task_struct *p, | 3434 | static int __sched_setscheduler(struct task_struct *p, |
3421 | const struct sched_attr *attr, | 3435 | const struct sched_attr *attr, |
3422 | bool user) | 3436 | bool user) |
@@ -3545,7 +3559,7 @@ recheck: | |||
3545 | goto change; | 3559 | goto change; |
3546 | if (rt_policy(policy) && attr->sched_priority != p->rt_priority) | 3560 | if (rt_policy(policy) && attr->sched_priority != p->rt_priority) |
3547 | goto change; | 3561 | goto change; |
3548 | if (dl_policy(policy)) | 3562 | if (dl_policy(policy) && dl_param_changed(p, attr)) |
3549 | goto change; | 3563 | goto change; |
3550 | 3564 | ||
3551 | p->sched_reset_on_fork = reset_on_fork; | 3565 | p->sched_reset_on_fork = reset_on_fork; |