Messages in this thread | | | Date | Tue, 21 Apr 2020 11:09:13 -0400 | From | Phil Auld <> | Subject | Re: [PATCH 2/2] sched/fair: Refill bandwidth before scaling |
| |
Hi,
On Mon, Apr 20, 2020 at 10:44:21AM +0800 Huaixin Chang wrote: > In order to prevent possible hardlockup of sched_cfs_period_timer() > loop, loop count is introduced to denote whether to scale quota and > period or not. However, scale is done between forwarding period timer > and refilling cfs bandwidth runtime, which means that period timer is > forwarded with old "period" while runtime is refilled with scaled > "quota". > > Move do_sched_cfs_period_timer() before scaling to solve this. > > Fixes: 2e8e19226398 ("sched/fair: Limit sched_cfs_period_timer() loop to avoid hard lockup") > Signed-off-by: Huaixin Chang <changhuaixin@linux.alibaba.com> > --- > kernel/sched/fair.c | 4 ++-- > 1 file changed, 2 insertions(+), 2 deletions(-) > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index 02f323b85b6d..9ace1c5c73a5 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -5152,6 +5152,8 @@ static enum hrtimer_restart sched_cfs_period_timer(struct hrtimer *timer) > if (!overrun) > break; > > + idle = do_sched_cfs_period_timer(cfs_b, overrun, flags); > + > if (++count > 3) { > u64 new, old = ktime_to_ns(cfs_b->period); > > @@ -5181,8 +5183,6 @@ static enum hrtimer_restart sched_cfs_period_timer(struct hrtimer *timer) > /* reset count so we don't come right back in here */ > count = 0; > } > - > - idle = do_sched_cfs_period_timer(cfs_b, overrun, flags); > } > if (idle) > cfs_b->period_active = 0; > -- > 2.14.4.44.g2045bb6 >
This one is independent of the first so could be taken as is.
Reviewed-by: Phil Auld <pauld@redhat.com> --
| |