From 95527c5751faba069fe8f23f3b8ee2999cf519d1 Mon Sep 17 00:00:00 2001 From: Huaixin Chang Date: Fri, 20 Mar 2020 12:17:47 +0800 Subject: [PATCH 2115/2944] alinux: sched: Restore upper limit of cfs_b->buffer to max_cfs_runtime This prevents users from setting cpu.cfs_burst_us to -1. All bandwidth runtime is strictly bound by max_cfs_runtime when runtime is enabled. Reviewed-by: Shanpei Chen Signed-off-by: Huaixin Chang --- kernel/sched/core.c | 17 +++++------------ kernel/sched/fair.c | 17 +++-------------- 2 files changed, 8 insertions(+), 26 deletions(-) diff --git a/kernel/sched/core.c b/kernel/sched/core.c index 4f38763..9203019 100644 --- a/kernel/sched/core.c +++ b/kernel/sched/core.c @@ -6562,11 +6562,11 @@ static int tg_set_cfs_bandwidth(struct task_group *tg, u64 period, u64 quota, /* * Bound burst to defend burst against overflow during bandwidth shift. */ - if (burst != RUNTIME_INF && burst > max_cfs_runtime) + if (burst > max_cfs_runtime) return -EINVAL; - if (quota == RUNTIME_INF || burst == RUNTIME_INF) - buffer = RUNTIME_INF; + if (quota == RUNTIME_INF) + buffer = max_cfs_runtime; else buffer = min(max_cfs_runtime, quota + burst); /* @@ -6604,15 +6604,8 @@ static int tg_set_cfs_bandwidth(struct task_group *tg, u64 period, u64 quota, burst_onset = burst / 100 * sysctl_sched_cfs_bw_burst_onset_percent; - if (cfs_b->burst != RUNTIME_INF) { - cfs_b->runtime += burst_onset; - cfs_b->runtime = min(max_cfs_runtime, cfs_b->runtime); - } else { /* cfs_b->burst == RUNTIME_INF */ - if (RUNTIME_INF - burst_onset >= cfs_b->runtime) - cfs_b->runtime += burst_onset; - else - cfs_b->runtime = RUNTIME_INF; - } + cfs_b->runtime += burst_onset; + cfs_b->runtime = min(max_cfs_runtime, cfs_b->runtime); } cfs_b->previous_runtime = cfs_b->runtime; diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index b093dda..080d48d 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -4395,18 +4395,8 @@ void __refill_cfs_bandwidth_runtime(struct cfs_bandwidth *cfs_b, u64 overrun) overrun = min(overrun, cfs_b->max_overrun); refill = cfs_b->quota * overrun; - - if (cfs_b->buffer != RUNTIME_INF || - RUNTIME_INF - refill >= cfs_b->runtime) { - cfs_b->runtime += refill; - cfs_b->runtime = min(cfs_b->runtime, cfs_b->buffer); - } else { - /* - * cfs_b->buffer == RUNTIME_INF && - * cfs_b->runtime + refill > RUNTIME_INF - */ - cfs_b->runtime = RUNTIME_INF; - } + cfs_b->runtime += refill; + cfs_b->runtime = min(cfs_b->runtime, cfs_b->buffer); cfs_b->previous_runtime = cfs_b->runtime; } @@ -4986,8 +4976,7 @@ static enum hrtimer_restart sched_cfs_period_timer(struct hrtimer *timer) cfs_b->quota = min(cfs_b->quota * 2, max_cfs_runtime); - if (cfs_b->buffer != RUNTIME_INF) - cfs_b->buffer = min(max_cfs_runtime, + cfs_b->buffer = min(max_cfs_runtime, cfs_b->quota + cfs_b->burst); /* Add 1 in case max_overrun becomes 0. */ cfs_b->max_overrun >>= 1; -- 1.8.3.1