From: Simon Wilkinson Date: Tue, 28 Sep 2010 23:15:37 +0000 (+0100) Subject: rx: Use atomics for rxi_AllocSize and rxi_AllocCnt X-Git-Tag: upstream/1.8.0_pre1^2~4746 X-Git-Url: https://git.michaelhowe.org/gitweb/?a=commitdiff_plain;h=1676c7e54f238e72910263f83987b271067efe21;p=packages%2Fo%2Fopenafs.git rx: Use atomics for rxi_AllocSize and rxi_AllocCnt More atomics for RX statistics counters. Less lock contention. Change-Id: I55202d2d54323448f7bc191aab03ace976fac962 Reviewed-on: http://gerrit.openafs.org/2861 Reviewed-by: Jeffrey Altman Tested-by: Jeffrey Altman --- diff --git a/src/rx/rx.c b/src/rx/rx.c index 66f88d937..68ca46d44 100644 --- a/src/rx/rx.c +++ b/src/rx/rx.c @@ -2436,14 +2436,18 @@ rxi_FreeCall(struct rx_call *call) } } -afs_int32 rxi_Alloccnt = 0, rxi_Allocsize = 0; +rx_atomic_t rxi_Allocsize = RX_ATOMIC_INIT(0); +rx_atomic_t rxi_Alloccnt = RX_ATOMIC_INIT(0); + void * rxi_Alloc(size_t size) { char *p; - if (rx_stats_active) - rx_MutexAdd1Increment2(rxi_Allocsize, (afs_int32)size, rxi_Alloccnt, rx_stats_mutex); + if (rx_stats_active) { + rx_atomic_add(&rxi_Allocsize, (int) size); + rx_atomic_inc(&rxi_Alloccnt); + } p = (char *) #if defined(KERNEL) && !defined(UKERNEL) && defined(AFS_FBSD80_ENV) @@ -2460,8 +2464,10 @@ p = (char *) void rxi_Free(void *addr, size_t size) { - if (rx_stats_active) - rx_MutexAdd1Decrement2(rxi_Allocsize, -(afs_int32)size, rxi_Alloccnt, rx_stats_mutex); + if (rx_stats_active) { + rx_atomic_sub(&rxi_Allocsize, (int) size); + rx_atomic_dec(&rxi_Alloccnt); + } osi_Free(addr, size); }