sched: rt-group: fixup schedulability constraints calculation

it was only possible to configure the rt-group scheduling parameters
beyond the default value in a very small range.

that's because div64_64() has a different calling convention than
do_div() :/

fix a few untidies while we are here; sysctl_sched_rt_period may overflow
due to that multiplication, so cast to u64 first. Also that RUNTIME_INF
juggling makes little sense although its an effective NOP.

Signed-off-by: Peter Zijlstra <a.p.zijlstra@chello.nl>
Signed-off-by: Ingo Molnar <mingo@elte.hu>

authored by Peter Zijlstra and committed by Ingo Molnar 2692a240 1868f958

+3 -7
+3 -7
kernel/sched.c
··· 7726 if (runtime == RUNTIME_INF) 7727 return 1ULL << 16; 7728 7729 - runtime *= (1ULL << 16); 7730 - div64_64(runtime, period); 7731 - return runtime; 7732 } 7733 7734 static int __rt_schedulable(struct task_group *tg, u64 period, u64 runtime) ··· 7755 u64 rt_runtime, rt_period; 7756 int err = 0; 7757 7758 - rt_period = sysctl_sched_rt_period * NSEC_PER_USEC; 7759 rt_runtime = (u64)rt_runtime_us * NSEC_PER_USEC; 7760 if (rt_runtime_us == -1) 7761 - rt_runtime = rt_period; 7762 7763 mutex_lock(&rt_constraints_mutex); 7764 if (!__rt_schedulable(tg, rt_period, rt_runtime)) { 7765 err = -EINVAL; 7766 goto unlock; 7767 } 7768 - if (rt_runtime_us == -1) 7769 - rt_runtime = RUNTIME_INF; 7770 tg->rt_runtime = rt_runtime; 7771 unlock: 7772 mutex_unlock(&rt_constraints_mutex);
··· 7726 if (runtime == RUNTIME_INF) 7727 return 1ULL << 16; 7728 7729 + return div64_64(runtime << 16, period); 7730 } 7731 7732 static int __rt_schedulable(struct task_group *tg, u64 period, u64 runtime) ··· 7757 u64 rt_runtime, rt_period; 7758 int err = 0; 7759 7760 + rt_period = (u64)sysctl_sched_rt_period * NSEC_PER_USEC; 7761 rt_runtime = (u64)rt_runtime_us * NSEC_PER_USEC; 7762 if (rt_runtime_us == -1) 7763 + rt_runtime = RUNTIME_INF; 7764 7765 mutex_lock(&rt_constraints_mutex); 7766 if (!__rt_schedulable(tg, rt_period, rt_runtime)) { 7767 err = -EINVAL; 7768 goto unlock; 7769 } 7770 tg->rt_runtime = rt_runtime; 7771 unlock: 7772 mutex_unlock(&rt_constraints_mutex);