summaryrefslogtreecommitdiff
path: root/sys
diff options
context:
space:
mode:
authorVisa Hankala <visa@cvs.openbsd.org>2017-04-16 14:28:08 +0000
committerVisa Hankala <visa@cvs.openbsd.org>2017-04-16 14:28:08 +0000
commitc0f49ca59c2f30be3746038928791a80ab410a8d (patch)
tree022233bc52469fc8bc3d508933d1d0ad85eeefc0 /sys
parentce4805b5f46006e6586d912a0e0f42343900b477 (diff)
Replace fetch_and_add() with atomic_inc_int_nv() from <sys/atomic.h>
to make the code more similar to sparc64's. OK mpi@, guenther@, kettenis@
Diffstat (limited to 'sys')
-rw-r--r--sys/arch/amd64/amd64/lock_machdep.c19
-rw-r--r--sys/arch/i386/i386/lock_machdep.c19
2 files changed, 8 insertions, 30 deletions
diff --git a/sys/arch/amd64/amd64/lock_machdep.c b/sys/arch/amd64/amd64/lock_machdep.c
index 7588e24ef62..f02efe0bb04 100644
--- a/sys/arch/amd64/amd64/lock_machdep.c
+++ b/sys/arch/amd64/amd64/lock_machdep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: lock_machdep.c,v 1.11 2017/03/07 14:41:57 visa Exp $ */
+/* $OpenBSD: lock_machdep.c,v 1.12 2017/04/16 14:28:07 visa Exp $ */
/*
* Copyright (c) 2007 Artur Grabowski <art@openbsd.org>
@@ -19,8 +19,8 @@
#include <sys/param.h>
#include <sys/systm.h>
+#include <sys/atomic.h>
-#include <machine/atomic.h>
#include <machine/lock.h>
#include <machine/cpufunc.h>
@@ -31,7 +31,7 @@ __mp_lock_init(struct __mp_lock *mpl)
{
memset(mpl->mpl_cpus, 0, sizeof(mpl->mpl_cpus));
mpl->mpl_users = 0;
- mpl->mpl_ticket = 0;
+ mpl->mpl_ticket = 1;
}
#if defined(MP_LOCKDEBUG)
@@ -64,17 +64,6 @@ __mp_lock_spin(struct __mp_lock *mpl, u_int me)
#endif
}
-static inline u_int
-fetch_and_add(u_int *var, u_int value)
-{
- asm volatile("lock; xaddl %%eax, %2;"
- : "=a" (value)
- : "a" (value), "m" (*var)
- : "memory");
-
- return (value);
-}
-
void
__mp_lock(struct __mp_lock *mpl)
{
@@ -83,7 +72,7 @@ __mp_lock(struct __mp_lock *mpl)
disable_intr();
if (cpu->mplc_depth++ == 0)
- cpu->mplc_ticket = fetch_and_add(&mpl->mpl_users, 1);
+ cpu->mplc_ticket = atomic_inc_int_nv(&mpl->mpl_users);
write_rflags(rf);
__mp_lock_spin(mpl, cpu->mplc_ticket);
diff --git a/sys/arch/i386/i386/lock_machdep.c b/sys/arch/i386/i386/lock_machdep.c
index 17d402658e2..9ab26924484 100644
--- a/sys/arch/i386/i386/lock_machdep.c
+++ b/sys/arch/i386/i386/lock_machdep.c
@@ -1,4 +1,4 @@
-/* $OpenBSD: lock_machdep.c,v 1.20 2017/03/07 14:41:57 visa Exp $ */
+/* $OpenBSD: lock_machdep.c,v 1.21 2017/04/16 14:28:07 visa Exp $ */
/* $NetBSD: lock_machdep.c,v 1.1.2.3 2000/05/03 14:40:30 sommerfeld Exp $ */
/*-
@@ -37,8 +37,8 @@
#include <sys/param.h>
#include <sys/systm.h>
+#include <sys/atomic.h>
-#include <machine/atomic.h>
#include <machine/lock.h>
#include <machine/cpufunc.h>
@@ -50,7 +50,7 @@ __mp_lock_init(struct __mp_lock *mpl)
{
memset(mpl->mpl_cpus, 0, sizeof(mpl->mpl_cpus));
mpl->mpl_users = 0;
- mpl->mpl_ticket = 0;
+ mpl->mpl_ticket = 1;
}
#if defined(MP_LOCKDEBUG)
@@ -62,17 +62,6 @@ __mp_lock_init(struct __mp_lock *mpl)
extern int __mp_lock_spinout;
#endif
-static inline u_int
-fetch_and_add(u_int *var, u_int value)
-{
- asm volatile("lock; xaddl %%eax, %2;"
- : "=a" (value)
- : "a" (value), "m" (*var)
- : "memory");
-
- return (value);
-}
-
static __inline void
__mp_lock_spin(struct __mp_lock *mpl, u_int me)
{
@@ -102,7 +91,7 @@ __mp_lock(struct __mp_lock *mpl)
disable_intr();
if (cpu->mplc_depth++ == 0)
- cpu->mplc_ticket = fetch_and_add(&mpl->mpl_users, 1);
+ cpu->mplc_ticket = atomic_inc_int_nv(&mpl->mpl_users);
write_eflags(ef);
__mp_lock_spin(mpl, cpu->mplc_ticket);