| Date | Wed, 7 Nov 2018 14:16:32 +0100 | | From | Peter Zijlstra <> | | Subject | Re: [PATCH v5 03/15] sched/core: uclamp: map TASK's clamp values into CPU's clamp groups |
| |
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)
|