From: Olivier Houchard Date: Fri, 8 Mar 2019 17:47:59 +0000 (+0100) Subject: MEDIUM: freq_ctr: Use the new _HA_ATOMIC_* macros. X-Git-Tag: v2.0-dev2~95 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=d5f9b19196db1caba105c3cc0d1d44fef2d33ad7;p=thirdparty%2Fhaproxy.git MEDIUM: freq_ctr: Use the new _HA_ATOMIC_* macros. Use the new _HA_ATOMIC_* macros and add barriers where needed. --- diff --git a/include/proto/freq_ctr.h b/include/proto/freq_ctr.h index 277bfda5af..953e21b100 100644 --- a/include/proto/freq_ctr.h +++ b/include/proto/freq_ctr.h @@ -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 */ 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; 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; /* 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; /* 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 */ 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) { 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; tot_inc = ctr->curr_ctr; /* 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; /* Note: later we may want to propagate the update to other counters */ }