Message ID | 1391186607-11247-1-git-send-email-juri.lelli@gmail.com |
---|---|
State | Superseded |
Headers | show |
On 02/03/2014 10:53 AM, Henrik Austad wrote: > On Fri, Jan 31, 2014 at 05:43:27PM +0100, Juri Lelli wrote: >> Don't compare sysctl_sched_rt_runtime against sysctl_sched_rt_period if >> the former is equal to RUNTIME_INF, otherwise disabling -rt bandwidth >> management always fails. >> >> Cc: Ingo Molnar <mingo@redhat.com> >> Cc: Peter Zijlstra <peterz@infradead.org> >> Signed-off-by: Juri Lelli <juri.lelli@gmail.com> >> --- >> kernel/sched/core.c | 3 ++- >> 1 file changed, 2 insertions(+), 1 deletion(-) >> >> diff --git a/kernel/sched/core.c b/kernel/sched/core.c >> index 210a12a..5c0a304 100644 >> --- a/kernel/sched/core.c >> +++ b/kernel/sched/core.c >> @@ -7477,7 +7477,8 @@ static int sched_rt_global_validate(void) >> if (sysctl_sched_rt_period <= 0) >> return -EINVAL; >> >> - if (sysctl_sched_rt_runtime > sysctl_sched_rt_period) >> + if ((sysctl_sched_rt_runtime != RUNTIME_INF) && >> + (sysctl_sched_rt_runtime > sysctl_sched_rt_period)) >> return -EINVAL; > > Won't this be caught by the test above? > > #define RUNTIME_INF ((u64)~0ULL) > > which means that if sysctl_sched_rt_runtime is set to RUNTIME_INF, it will > trigger on the previous test, and the first part of this test will always > be true. > > Or have I suffered catastrophic monday-morning braindamage? > As I understand it. When you do echo -1 > /proc/sys/kernel/sched_rt_runtime_us sysctl_sched_rt_runtime is actually set to -1 (being an int). But then you compare it against and unsigned int, so the cast converts it to actually be RUNTIME_INF, and thus greater than sysctl_sched_rt_period (so the function returns -EINVAL, while you'd want it to return 0, as you are disabling -rt throttling). Makes sense? Thanks, - Juri -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 210a12a..5c0a304 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -7477,7 +7477,8 @@ static int sched_rt_global_validate(void) if (sysctl_sched_rt_period <= 0) return -EINVAL; - if (sysctl_sched_rt_runtime > sysctl_sched_rt_period) + if ((sysctl_sched_rt_runtime != RUNTIME_INF) && + (sysctl_sched_rt_runtime > sysctl_sched_rt_period)) return -EINVAL; return 0;
Don't compare sysctl_sched_rt_runtime against sysctl_sched_rt_period if the former is equal to RUNTIME_INF, otherwise disabling -rt bandwidth management always fails. Cc: Ingo Molnar <mingo@redhat.com> Cc: Peter Zijlstra <peterz@infradead.org> Signed-off-by: Juri Lelli <juri.lelli@gmail.com> --- kernel/sched/core.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-)