mirror of
https://git.haproxy.org/git/haproxy.git/
synced 2025-09-22 22:31:28 +02:00
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:
parent
d360879fb5
commit
d5f9b19196
@ -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 */
|
||||||
}
|
}
|
||||||
|
Loading…
x
Reference in New Issue
Block a user