[Devel] [PATCH vz8 v2] kernel/sched/fair.c: Add more missing update_rq_clock() calls
Add update_rq_clock() for 'target_rq' to avoid WARN() coming from attach_task(). Also add rq_repin_lock(busiest, &rf); in load_balance() for detach_task(). The update_rq_clock() isn't necessary since it was updated before, but we need the repin since rq lock was released after update. https://jira.sw.ru/browse/PSBM-108013 Reported-by: Kirill Tkhai Signed-off-by: Andrey Ryabinin --- kernel/sched/fair.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c index e6dc21d5fa03..fc87dee4fd0e 100644 --- a/kernel/sched/fair.c +++ b/kernel/sched/fair.c @@ -7817,6 +7817,7 @@ static int cpulimit_balance_cpu_stop(void *data) schedstat_inc(sd->clb_count); update_rq_clock(rq); + update_rq_clock(target_rq); if (do_cpulimit_balance(&env)) schedstat_inc(sd->clb_pushed); else @@ -9177,6 +9178,7 @@ static int load_balance(int this_cpu, struct rq *this_rq, env.loop = 0; local_irq_save(rf.flags); double_rq_lock(env.dst_rq, busiest); + rq_repin_lock(env.src_rq, &rf); update_rq_clock(env.dst_rq); cur_ld_moved = ld_moved = move_task_groups(&env); double_rq_unlock(env.dst_rq, busiest); -- 2.26.2 ___ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel
Re: [Devel] [PATCH vz8 v2] kernel/sched/fair.c: Add more missing update_rq_clock() calls
On 29.09.2020 18:32, Andrey Ryabinin wrote: > Add update_rq_clock() for 'target_rq' to avoid WARN() coming > from attach_task(). Also add rq_repin_lock(busiest, &rf); in > load_balance() for detach_task(). The update_rq_clock() isn't > necessary since it was updated before, but we need the repin > since rq lock was released after update. > > https://jira.sw.ru/browse/PSBM-108013 > Reported-by: Kirill Tkhai > Signed-off-by: Andrey Ryabinin Acked-by: Kirill Tkhai > --- > kernel/sched/fair.c | 2 ++ > 1 file changed, 2 insertions(+) > > diff --git a/kernel/sched/fair.c b/kernel/sched/fair.c > index e6dc21d5fa03..fc87dee4fd0e 100644 > --- a/kernel/sched/fair.c > +++ b/kernel/sched/fair.c > @@ -7817,6 +7817,7 @@ static int cpulimit_balance_cpu_stop(void *data) > schedstat_inc(sd->clb_count); > > update_rq_clock(rq); > + update_rq_clock(target_rq); > if (do_cpulimit_balance(&env)) > schedstat_inc(sd->clb_pushed); > else > @@ -9177,6 +9178,7 @@ static int load_balance(int this_cpu, struct rq > *this_rq, > env.loop = 0; > local_irq_save(rf.flags); > double_rq_lock(env.dst_rq, busiest); > + rq_repin_lock(env.src_rq, &rf); > update_rq_clock(env.dst_rq); > cur_ld_moved = ld_moved = move_task_groups(&env); > double_rq_unlock(env.dst_rq, busiest); > ___ Devel mailing list Devel@openvz.org https://lists.openvz.org/mailman/listinfo/devel