MEDIUM: freq_ctr: Use the new _HA_ATOMIC_* macros.

Use the new _HA_ATOMIC_* macros and add barriers where needed.
This commit is contained in:
Olivier Houchard 2019-03-08 18:47:59 +01:00 committed by Olivier Houchard
parent d360879fb5
commit d5f9b19196

View File

@ -42,7 +42,8 @@ static inline unsigned int update_freq_ctr(struct freq_ctr *ctr, unsigned int in
/* remove the bit, used for the lock */ /* remove the bit, used for the lock */
curr_sec = ctr->curr_sec & 0x7fffffff; curr_sec = ctr->curr_sec & 0x7fffffff;
} }
while (!HA_ATOMIC_CAS(&ctr->curr_sec, &curr_sec, curr_sec | 0x80000000)); while (!_HA_ATOMIC_CAS(&ctr->curr_sec, &curr_sec, curr_sec | 0x80000000));
__ha_barrier_atomic_store();
elapsed = (now.tv_sec & 0x7fffffff)- curr_sec; elapsed = (now.tv_sec & 0x7fffffff)- curr_sec;
if (unlikely(elapsed > 0)) { if (unlikely(elapsed > 0)) {
@ -59,7 +60,7 @@ static inline unsigned int update_freq_ctr(struct freq_ctr *ctr, unsigned int in
tot_inc = ctr->curr_ctr; tot_inc = ctr->curr_ctr;
/* release the lock and update the time in case of rotate. */ /* release the lock and update the time in case of rotate. */
HA_ATOMIC_STORE(&ctr->curr_sec, curr_sec & 0x7fffffff); _HA_ATOMIC_STORE(&ctr->curr_sec, curr_sec & 0x7fffffff);
return tot_inc; return tot_inc;
/* Note: later we may want to propagate the update to other counters */ /* Note: later we may want to propagate the update to other counters */
} }
@ -79,7 +80,8 @@ static inline unsigned int update_freq_ctr_period(struct freq_ctr_period *ctr,
/* remove the bit, used for the lock */ /* remove the bit, used for the lock */
curr_tick = (ctr->curr_tick >> 1) << 1; curr_tick = (ctr->curr_tick >> 1) << 1;
} }
while (!HA_ATOMIC_CAS(&ctr->curr_tick, &curr_tick, curr_tick | 0x1)); while (!_HA_ATOMIC_CAS(&ctr->curr_tick, &curr_tick, curr_tick | 0x1));
__ha_barrier_atomic_store();
if (now_ms - curr_tick >= period) { if (now_ms - curr_tick >= period) {
ctr->prev_ctr = ctr->curr_ctr; ctr->prev_ctr = ctr->curr_ctr;
@ -95,7 +97,7 @@ static inline unsigned int update_freq_ctr_period(struct freq_ctr_period *ctr,
ctr->curr_ctr += inc; ctr->curr_ctr += inc;
tot_inc = ctr->curr_ctr; tot_inc = ctr->curr_ctr;
/* release the lock and update the time in case of rotate. */ /* release the lock and update the time in case of rotate. */
HA_ATOMIC_STORE(&ctr->curr_tick, (curr_tick >> 1) << 1); _HA_ATOMIC_STORE(&ctr->curr_tick, (curr_tick >> 1) << 1);
return tot_inc; return tot_inc;
/* Note: later we may want to propagate the update to other counters */ /* Note: later we may want to propagate the update to other counters */
} }