From e15712876215565688b40db0123502e2c56bbeee Mon Sep 17 00:00:00 2001 From: Bill Paul Date: Wed, 7 Jan 2004 07:29:27 +0000 Subject: Use atomic ops for the interlocked increment and decrement routines in subr_ndis and subr_ntoskrnl. This is faster and avoids potential LOR whinage from witness (an LOR couldn't happen with the old code since the interlocked inc/dec routines could not sleep with a lock held, but this will keep witness happy and it's more efficient anyway. I think.) --- sys/compat/ndis/subr_ndis.c | 9 +++------ sys/compat/ndis/subr_ntoskrnl.c | 11 +++-------- 2 files changed, 6 insertions(+), 14 deletions(-) diff --git a/sys/compat/ndis/subr_ndis.c b/sys/compat/ndis/subr_ndis.c index b272bc5fc72b..ad769f601acc 100644 --- a/sys/compat/ndis/subr_ndis.c +++ b/sys/compat/ndis/subr_ndis.c @@ -72,6 +72,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -1780,9 +1781,7 @@ __stdcall static uint32_t ndis_interlock_inc(addend) uint32_t *addend; { - mtx_lock(&ndis_interlock); - (*addend)++; - mtx_unlock(&ndis_interlock); + atomic_add_long((u_long *)addend, 1); return(*addend); } @@ -1790,9 +1789,7 @@ __stdcall static uint32_t ndis_interlock_dec(addend) uint32_t *addend; { - mtx_lock(&ndis_interlock); - (*addend)--; - mtx_unlock(&ndis_interlock); + atomic_subtract_long((u_long *)addend, 1); return(*addend); } diff --git a/sys/compat/ndis/subr_ntoskrnl.c b/sys/compat/ndis/subr_ntoskrnl.c index 5278bc2752da..72f1f11904f3 100644 --- a/sys/compat/ndis/subr_ntoskrnl.c +++ b/sys/compat/ndis/subr_ntoskrnl.c @@ -44,6 +44,7 @@ __FBSDID("$FreeBSD$"); #include #include +#include #include #include #include @@ -578,10 +579,7 @@ ntoskrnl_interlock_inc(/*addend*/ void) __asm__ __volatile__ ("" : "=c" (addend)); - mtx_lock(&ntoskrnl_interlock); - (*addend)++; - mtx_unlock(&ntoskrnl_interlock); - + atomic_add_long((volatile u_long *)addend, 1); return(*addend); } @@ -592,10 +590,7 @@ ntoskrnl_interlock_dec(/*addend*/ void) __asm__ __volatile__ ("" : "=c" (addend)); - mtx_lock(&ntoskrnl_interlock); - (*addend)--; - mtx_unlock(&ntoskrnl_interlock); - + atomic_subtract_long((volatile u_long *)addend, 1); return(*addend); } -- cgit v1.3