diff options
-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 | ||