|
@@ -3417,6 +3417,20 @@ static bool check_same_owner(struct task_struct *p)
|
|
|
return match;
|
|
|
}
|
|
|
|
|
|
+static bool dl_param_changed(struct task_struct *p,
|
|
|
+ const struct sched_attr *attr)
|
|
|
+{
|
|
|
+ struct sched_dl_entity *dl_se = &p->dl;
|
|
|
+
|
|
|
+ if (dl_se->dl_runtime != attr->sched_runtime ||
|
|
|
+ dl_se->dl_deadline != attr->sched_deadline ||
|
|
|
+ dl_se->dl_period != attr->sched_period ||
|
|
|
+ dl_se->flags != attr->sched_flags)
|
|
|
+ return true;
|
|
|
+
|
|
|
+ return false;
|
|
|
+}
|
|
|
+
|
|
|
static int __sched_setscheduler(struct task_struct *p,
|
|
|
const struct sched_attr *attr,
|
|
|
bool user)
|
|
@@ -3545,7 +3559,7 @@ recheck:
|
|
|
goto change;
|
|
|
if (rt_policy(policy) && attr->sched_priority != p->rt_priority)
|
|
|
goto change;
|
|
|
- if (dl_policy(policy))
|
|
|
+ if (dl_policy(policy) && dl_param_changed(p, attr))
|
|
|
goto change;
|
|
|
|
|
|
p->sched_reset_on_fork = reset_on_fork;
|