[Devel] [PATCH vz8 v2] kernel/sched/fair.c: Add more missing update_rq_clock() calls
Kirill Tkhai
ktkhai at virtuozzo.com
Tue Sep 29 18:33:28 MSK 2020
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 <ktkhai at virtuozzo.com>
> Signed-off-by: Andrey Ryabinin <aryabinin at virtuozzo.com>
Acked-by: Kirill Tkhai <ktkhai at virtuozzo.com>
> ---
> 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);
>
More information about the Devel
mailing list