On Thu, Feb 22, 2018 at 05:01:50PM +0000, Patrick Bellasi wrote:
> +struct util_est {
> +     unsigned int                    enqueued;
> +     unsigned int                    ewma;
> +#define UTIL_EST_WEIGHT_SHIFT                2
> +};

> +     ue = READ_ONCE(p->se.avg.util_est);

> +     WRITE_ONCE(p->se.avg.util_est, ue);

That is actually quite dodgy... and relies on the fact that we have the
8 byte case in __write_once_size() and __read_once_size()
unconditionally. It then further relies on the compiler DTRT for 32bit
platforms, which is generating 2 32bit loads/stores.

The advantage is of course that it will use single u64 loads/stores
where available.

Reply via email to