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.