Re: [PATCH v2 1/2] sched: force update of blocked load of idle cpus

From: Peter Zijlstra
Date: Wed Dec 20 2017 - 09:03:23 EST


On Fri, Dec 01, 2017 at 06:01:56PM +0000, Brendan Jackman wrote:
> @@ -8955,8 +8964,20 @@ static void nohz_balancer_kick(void)
> if (ilb_cpu >= nr_cpu_ids)
> return;
>
> - if (test_and_set_bit(NOHZ_BALANCE_KICK, nohz_flags(ilb_cpu)))
> + if (test_and_set_bit(NOHZ_BALANCE_KICK, nohz_flags(ilb_cpu))) {
> + if (!only_update) {
> + /*
> + * There's a pending/ongoing nohz kick/balance. If it's
> + * just for stats, convert it to a proper load balance.
> + */
> + clear_bit(NOHZ_STATS_KICK, nohz_flags(ilb_cpu));
> + }
> return;
> + }
> +
> + if (only_update)
> + set_bit(NOHZ_STATS_KICK, nohz_flags(ilb_cpu));
> +
> /*
> * Use smp_send_reschedule() instead of resched_cpu().
> * This way we generate a sched IPI on the target cpu which

This looks racy.. if its not we don't need atomic ops, if it is but is
still fine it needs a comment.