diff options
Diffstat (limited to 'kernel')
| -rw-r--r-- | kernel/sched/core.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 03a67f09404c..a4869bd426ca 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c | |||
| @@ -7675,6 +7675,17 @@ static int tg_set_rt_bandwidth(struct task_group *tg, | |||
| 7675 | { | 7675 | { |
| 7676 | int i, err = 0; | 7676 | int i, err = 0; |
| 7677 | 7677 | ||
| 7678 | /* | ||
| 7679 | * Disallowing the root group RT runtime is BAD, it would disallow the | ||
| 7680 | * kernel creating (and or operating) RT threads. | ||
| 7681 | */ | ||
| 7682 | if (tg == &root_task_group && rt_runtime == 0) | ||
| 7683 | return -EINVAL; | ||
| 7684 | |||
| 7685 | /* No period doesn't make any sense. */ | ||
| 7686 | if (rt_period == 0) | ||
| 7687 | return -EINVAL; | ||
| 7688 | |||
| 7678 | mutex_lock(&rt_constraints_mutex); | 7689 | mutex_lock(&rt_constraints_mutex); |
| 7679 | read_lock(&tasklist_lock); | 7690 | read_lock(&tasklist_lock); |
| 7680 | err = __rt_schedulable(tg, rt_period, rt_runtime); | 7691 | err = __rt_schedulable(tg, rt_period, rt_runtime); |
| @@ -7731,9 +7742,6 @@ static int sched_group_set_rt_period(struct task_group *tg, long rt_period_us) | |||
| 7731 | rt_period = (u64)rt_period_us * NSEC_PER_USEC; | 7742 | rt_period = (u64)rt_period_us * NSEC_PER_USEC; |
| 7732 | rt_runtime = tg->rt_bandwidth.rt_runtime; | 7743 | rt_runtime = tg->rt_bandwidth.rt_runtime; |
| 7733 | 7744 | ||
| 7734 | if (rt_period == 0) | ||
| 7735 | return -EINVAL; | ||
| 7736 | |||
| 7737 | return tg_set_rt_bandwidth(tg, rt_period, rt_runtime); | 7745 | return tg_set_rt_bandwidth(tg, rt_period, rt_runtime); |
| 7738 | } | 7746 | } |
| 7739 | 7747 | ||
