On Mon, Oct 29, 2018 at 06:32:57PM +0000, Patrick Bellasi wrote:

> +static void uclamp_group_put(unsigned int clamp_id, unsigned int group_id)
>  {
> +     union uclamp_map *uc_maps = &uclamp_maps[clamp_id][0];
> +     union uclamp_map uc_map_old, uc_map_new;
> +     long res;
> +
> +retry:
> +
> +     uc_map_old.data = atomic_long_read(&uc_maps[group_id].adata);
> +     uc_map_new = uc_map_old;
> +     uc_map_new.se_count -= 1;
> +     res = atomic_long_cmpxchg(&uc_maps[group_id].adata,
> +                               uc_map_old.data, uc_map_new.data);
> +     if (res != uc_map_old.data)
> +             goto retry;
> +}

Please write cmpxchg loops in the form:

        atomic_long_t *ptr = &uclamp_maps[clamp_id][group_id].adata;
        union uclamp_map old, new;

        old.data = atomic_long_read(ptr);
        do {
                new.data = old.data;
                new.se_cound--;
        } while (!atomic_long_try_cmpxchg(ptr, &old.data, new.data));


(same for all the others of course)

Reply via email to