On Wed, Dec 20, 2017 at 04:01:10PM +0100, Peter Zijlstra wrote:
> Well, you shouldn't mix atomic and non-atomic ops to the same word,
> that's asking for trouble.
> 
> But why don't you do something like:
> 
> nohz_kick()
> 
>       flags = NOHZ_STAT;
>       if (!only_update)
>               flags |= NOHZ_BALANCE;
> 
>       atomic_long_or(flags, &nohz_cpu(cpu));
> 
> 
> nohz_idle_balance()
> 
>       unsigned long do_flags = 
> atomic_long_fetch_andnot(NOHZ_BALANCE|NOHZ_STAT, &nohz_flags(cpu));
> 
>       if (do_flags & NOHZ_STAT)
>               update_blocked_stuff();
> 
>       if (do_flags & NOHZ_BALANCE)
>               rebalance_domains();
> 
> That way its far more readable.

we could use atomic_t too, there's not that many flags in there, the
only reason its long is because of that bitmap crud.

Reply via email to