diff options
author | Martin Pieuchot <mpi@cvs.openbsd.org> | 2018-01-25 15:19:34 +0000 |
---|---|---|
committer | Martin Pieuchot <mpi@cvs.openbsd.org> | 2018-01-25 15:19:34 +0000 |
commit | 2f7a5774269ab3788a8c5681eb7d4cad0f3146b2 (patch) | |
tree | f5a979e9e2f1dac4fa2fc99b711d771df5ab5087 | |
parent | 31bc2dab4dc02662892b9d26ac52fa30dba788e9 (diff) |
Remove mutex implementations that now live in MI code.
-rw-r--r-- | sys/arch/alpha/alpha/mutex.c | 151 | ||||
-rw-r--r-- | sys/arch/amd64/amd64/mutex.c | 151 | ||||
-rw-r--r-- | sys/arch/arm64/arm64/arm64_mutex.c | 151 | ||||
-rw-r--r-- | sys/arch/i386/i386/mutex.c | 151 | ||||
-rw-r--r-- | sys/arch/mips64/mips64/mutex.c | 151 | ||||
-rw-r--r-- | sys/arch/powerpc/powerpc/mutex.c | 151 |
6 files changed, 0 insertions, 906 deletions
diff --git a/sys/arch/alpha/alpha/mutex.c b/sys/arch/alpha/alpha/mutex.c deleted file mode 100644 index ed31e18f0c6..00000000000 --- a/sys/arch/alpha/alpha/mutex.c +++ /dev/null @@ -1,151 +0,0 @@ -/* $OpenBSD: mutex.c,v 1.20 2017/12/20 11:22:29 mpi Exp $ */ - -/* - * Copyright (c) 2004 Artur Grabowski <art@openbsd.org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/param.h> -#include <sys/mutex.h> -#include <sys/systm.h> -#include <sys/atomic.h> - -#include <machine/intr.h> - -#include <ddb/db_output.h> - -void -__mtx_init(struct mutex *mtx, int wantipl) -{ - mtx->mtx_owner = NULL; - mtx->mtx_wantipl = wantipl; - mtx->mtx_oldipl = IPL_NONE; -} - -#ifdef MULTIPROCESSOR -#ifdef MP_LOCKDEBUG -#ifndef DDB -#error "MP_LOCKDEBUG requires DDB" -#endif - -/* CPU-dependent timing, needs this to be settable from ddb. */ -extern int __mp_lock_spinout; -#endif - -void -__mtx_enter(struct mutex *mtx) -{ -#ifdef MP_LOCKDEBUG - int nticks = __mp_lock_spinout; -#endif - - while (__mtx_enter_try(mtx) == 0) { - CPU_BUSY_CYCLE(); - -#ifdef MP_LOCKDEBUG - if (--nticks == 0) { - db_printf("%s: %p lock spun out", __func__, mtx); - db_enter(); - nticks = __mp_lock_spinout; - } -#endif - } -} - -int -__mtx_enter_try(struct mutex *mtx) -{ - struct cpu_info *owner, *ci = curcpu(); - int s; - - if (mtx->mtx_wantipl != IPL_NONE) - s = splraise(mtx->mtx_wantipl); - - owner = atomic_cas_ptr(&mtx->mtx_owner, NULL, ci); -#ifdef DIAGNOSTIC - if (__predict_false(owner == ci)) - panic("mtx %p: locking against myself", mtx); -#endif - if (owner == NULL) { - membar_enter_after_atomic(); - if (mtx->mtx_wantipl != IPL_NONE) - mtx->mtx_oldipl = s; -#ifdef DIAGNOSTIC - ci->ci_mutex_level++; -#endif - return (1); - } - - if (mtx->mtx_wantipl != IPL_NONE) - splx(s); - - return (0); -} -#else -void -__mtx_enter(struct mutex *mtx) -{ - struct cpu_info *ci = curcpu(); - -#ifdef DIAGNOSTIC - if (__predict_false(mtx->mtx_owner == ci)) - panic("mtx %p: locking against myself", mtx); -#endif - - if (mtx->mtx_wantipl != IPL_NONE) - mtx->mtx_oldipl = splraise(mtx->mtx_wantipl); - - mtx->mtx_owner = ci; - -#ifdef DIAGNOSTIC - ci->ci_mutex_level++; -#endif -} - -int -__mtx_enter_try(struct mutex *mtx) -{ - __mtx_enter(mtx); - return (1); -} -#endif - -void -__mtx_leave(struct mutex *mtx) -{ - int s; - - MUTEX_ASSERT_LOCKED(mtx); - -#ifdef DIAGNOSTIC - curcpu()->ci_mutex_level--; -#endif - - s = mtx->mtx_oldipl; -#ifdef MULTIPROCESSOR - membar_exit_before_atomic(); -#endif - mtx->mtx_owner = NULL; - if (mtx->mtx_wantipl != IPL_NONE) - splx(s); -} diff --git a/sys/arch/amd64/amd64/mutex.c b/sys/arch/amd64/amd64/mutex.c deleted file mode 100644 index 9d42071a7aa..00000000000 --- a/sys/arch/amd64/amd64/mutex.c +++ /dev/null @@ -1,151 +0,0 @@ -/* $OpenBSD: mutex.c,v 1.1 2017/12/20 11:08:44 mpi Exp $ */ - -/* - * Copyright (c) 2004 Artur Grabowski <art@openbsd.org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/param.h> -#include <sys/mutex.h> -#include <sys/systm.h> -#include <sys/atomic.h> - -#include <machine/intr.h> - -#include <ddb/db_output.h> - -void -__mtx_init(struct mutex *mtx, int wantipl) -{ - mtx->mtx_owner = NULL; - mtx->mtx_wantipl = wantipl; - mtx->mtx_oldipl = IPL_NONE; -} - -#ifdef MULTIPROCESSOR -#ifdef MP_LOCKDEBUG -#ifndef DDB -#error "MP_LOCKDEBUG requires DDB" -#endif - -/* CPU-dependent timing, needs this to be settable from ddb. */ -extern int __mp_lock_spinout; -#endif - -void -__mtx_enter(struct mutex *mtx) -{ -#ifdef MP_LOCKDEBUG - int nticks = __mp_lock_spinout; -#endif - - while (__mtx_enter_try(mtx) == 0) { - CPU_BUSY_CYCLE(); - -#ifdef MP_LOCKDEBUG - if (--nticks == 0) { - db_printf("%s: %p lock spun out", __func__, mtx); - db_enter(); - nticks = __mp_lock_spinout; - } -#endif - } -} - -int -__mtx_enter_try(struct mutex *mtx) -{ - struct cpu_info *owner, *ci = curcpu(); - int s; - - if (mtx->mtx_wantipl != IPL_NONE) - s = splraise(mtx->mtx_wantipl); - - owner = atomic_cas_ptr(&mtx->mtx_owner, NULL, ci); -#ifdef DIAGNOSTIC - if (__predict_false(owner == ci)) - panic("mtx %p: locking against myself", mtx); -#endif - if (owner == NULL) { - membar_enter_after_atomic(); - if (mtx->mtx_wantipl != IPL_NONE) - mtx->mtx_oldipl = s; -#ifdef DIAGNOSTIC - ci->ci_mutex_level++; -#endif - return (1); - } - - if (mtx->mtx_wantipl != IPL_NONE) - splx(s); - - return (0); -} -#else -void -__mtx_enter(struct mutex *mtx) -{ - struct cpu_info *ci = curcpu(); - -#ifdef DIAGNOSTIC - if (__predict_false(mtx->mtx_owner == ci)) - panic("mtx %p: locking against myself", mtx); -#endif - - if (mtx->mtx_wantipl != IPL_NONE) - mtx->mtx_oldipl = splraise(mtx->mtx_wantipl); - - mtx->mtx_owner = ci; - -#ifdef DIAGNOSTIC - ci->ci_mutex_level++; -#endif -} - -int -__mtx_enter_try(struct mutex *mtx) -{ - __mtx_enter(mtx); - return (1); -} -#endif - -void -__mtx_leave(struct mutex *mtx) -{ - int s; - - MUTEX_ASSERT_LOCKED(mtx); - -#ifdef DIAGNOSTIC - curcpu()->ci_mutex_level--; -#endif - - s = mtx->mtx_oldipl; -#ifdef MULTIPROCESSOR - membar_exit_before_atomic(); -#endif - mtx->mtx_owner = NULL; - if (mtx->mtx_wantipl != IPL_NONE) - splx(s); -} diff --git a/sys/arch/arm64/arm64/arm64_mutex.c b/sys/arch/arm64/arm64/arm64_mutex.c deleted file mode 100644 index 1fbadf1dfcd..00000000000 --- a/sys/arch/arm64/arm64/arm64_mutex.c +++ /dev/null @@ -1,151 +0,0 @@ -/* $OpenBSD: arm64_mutex.c,v 1.3 2017/12/20 11:22:29 mpi Exp $ */ - -/* - * Copyright (c) 2004 Artur Grabowski <art@openbsd.org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/param.h> -#include <sys/mutex.h> -#include <sys/systm.h> -#include <sys/atomic.h> - -#include <machine/intr.h> - -#include <ddb/db_output.h> - -void -__mtx_init(struct mutex *mtx, int wantipl) -{ - mtx->mtx_owner = NULL; - mtx->mtx_wantipl = wantipl; - mtx->mtx_oldipl = IPL_NONE; -} - -#ifdef MULTIPROCESSOR -#ifdef MP_LOCKDEBUG -#ifndef DDB -#error "MP_LOCKDEBUG requires DDB" -#endif - -/* CPU-dependent timing, needs this to be settable from ddb. */ -extern int __mp_lock_spinout; -#endif - -void -__mtx_enter(struct mutex *mtx) -{ -#ifdef MP_LOCKDEBUG - int nticks = __mp_lock_spinout; -#endif - - while (__mtx_enter_try(mtx) == 0) { - CPU_BUSY_CYCLE(); - -#ifdef MP_LOCKDEBUG - if (--nticks == 0) { - db_printf("%s: %p lock spun out", __func__, mtx); - db_enter(); - nticks = __mp_lock_spinout; - } -#endif - } -} - -int -__mtx_enter_try(struct mutex *mtx) -{ - struct cpu_info *owner, *ci = curcpu(); - int s; - - if (mtx->mtx_wantipl != IPL_NONE) - s = splraise(mtx->mtx_wantipl); - - owner = atomic_cas_ptr(&mtx->mtx_owner, NULL, ci); -#ifdef DIAGNOSTIC - if (__predict_false(owner == ci)) - panic("mtx %p: locking against myself", mtx); -#endif - if (owner == NULL) { - membar_enter_after_atomic(); - if (mtx->mtx_wantipl != IPL_NONE) - mtx->mtx_oldipl = s; -#ifdef DIAGNOSTIC - ci->ci_mutex_level++; -#endif - return (1); - } - - if (mtx->mtx_wantipl != IPL_NONE) - splx(s); - - return (0); -} -#else -void -__mtx_enter(struct mutex *mtx) -{ - struct cpu_info *ci = curcpu(); - -#ifdef DIAGNOSTIC - if (__predict_false(mtx->mtx_owner == ci)) - panic("mtx %p: locking against myself", mtx); -#endif - - if (mtx->mtx_wantipl != IPL_NONE) - mtx->mtx_oldipl = splraise(mtx->mtx_wantipl); - - mtx->mtx_owner = ci; - -#ifdef DIAGNOSTIC - ci->ci_mutex_level++; -#endif -} - -int -__mtx_enter_try(struct mutex *mtx) -{ - __mtx_enter(mtx); - return (1); -} -#endif - -void -__mtx_leave(struct mutex *mtx) -{ - int s; - - MUTEX_ASSERT_LOCKED(mtx); - -#ifdef DIAGNOSTIC - curcpu()->ci_mutex_level--; -#endif - - s = mtx->mtx_oldipl; -#ifdef MULTIPROCESSOR - membar_exit_before_atomic(); -#endif - mtx->mtx_owner = NULL; - if (mtx->mtx_wantipl != IPL_NONE) - splx(s); -} diff --git a/sys/arch/i386/i386/mutex.c b/sys/arch/i386/i386/mutex.c deleted file mode 100644 index 9d42071a7aa..00000000000 --- a/sys/arch/i386/i386/mutex.c +++ /dev/null @@ -1,151 +0,0 @@ -/* $OpenBSD: mutex.c,v 1.1 2017/12/20 11:08:44 mpi Exp $ */ - -/* - * Copyright (c) 2004 Artur Grabowski <art@openbsd.org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/param.h> -#include <sys/mutex.h> -#include <sys/systm.h> -#include <sys/atomic.h> - -#include <machine/intr.h> - -#include <ddb/db_output.h> - -void -__mtx_init(struct mutex *mtx, int wantipl) -{ - mtx->mtx_owner = NULL; - mtx->mtx_wantipl = wantipl; - mtx->mtx_oldipl = IPL_NONE; -} - -#ifdef MULTIPROCESSOR -#ifdef MP_LOCKDEBUG -#ifndef DDB -#error "MP_LOCKDEBUG requires DDB" -#endif - -/* CPU-dependent timing, needs this to be settable from ddb. */ -extern int __mp_lock_spinout; -#endif - -void -__mtx_enter(struct mutex *mtx) -{ -#ifdef MP_LOCKDEBUG - int nticks = __mp_lock_spinout; -#endif - - while (__mtx_enter_try(mtx) == 0) { - CPU_BUSY_CYCLE(); - -#ifdef MP_LOCKDEBUG - if (--nticks == 0) { - db_printf("%s: %p lock spun out", __func__, mtx); - db_enter(); - nticks = __mp_lock_spinout; - } -#endif - } -} - -int -__mtx_enter_try(struct mutex *mtx) -{ - struct cpu_info *owner, *ci = curcpu(); - int s; - - if (mtx->mtx_wantipl != IPL_NONE) - s = splraise(mtx->mtx_wantipl); - - owner = atomic_cas_ptr(&mtx->mtx_owner, NULL, ci); -#ifdef DIAGNOSTIC - if (__predict_false(owner == ci)) - panic("mtx %p: locking against myself", mtx); -#endif - if (owner == NULL) { - membar_enter_after_atomic(); - if (mtx->mtx_wantipl != IPL_NONE) - mtx->mtx_oldipl = s; -#ifdef DIAGNOSTIC - ci->ci_mutex_level++; -#endif - return (1); - } - - if (mtx->mtx_wantipl != IPL_NONE) - splx(s); - - return (0); -} -#else -void -__mtx_enter(struct mutex *mtx) -{ - struct cpu_info *ci = curcpu(); - -#ifdef DIAGNOSTIC - if (__predict_false(mtx->mtx_owner == ci)) - panic("mtx %p: locking against myself", mtx); -#endif - - if (mtx->mtx_wantipl != IPL_NONE) - mtx->mtx_oldipl = splraise(mtx->mtx_wantipl); - - mtx->mtx_owner = ci; - -#ifdef DIAGNOSTIC - ci->ci_mutex_level++; -#endif -} - -int -__mtx_enter_try(struct mutex *mtx) -{ - __mtx_enter(mtx); - return (1); -} -#endif - -void -__mtx_leave(struct mutex *mtx) -{ - int s; - - MUTEX_ASSERT_LOCKED(mtx); - -#ifdef DIAGNOSTIC - curcpu()->ci_mutex_level--; -#endif - - s = mtx->mtx_oldipl; -#ifdef MULTIPROCESSOR - membar_exit_before_atomic(); -#endif - mtx->mtx_owner = NULL; - if (mtx->mtx_wantipl != IPL_NONE) - splx(s); -} diff --git a/sys/arch/mips64/mips64/mutex.c b/sys/arch/mips64/mips64/mutex.c deleted file mode 100644 index 14b8341b4fd..00000000000 --- a/sys/arch/mips64/mips64/mutex.c +++ /dev/null @@ -1,151 +0,0 @@ -/* $OpenBSD: mutex.c,v 1.8 2017/12/20 11:22:29 mpi Exp $ */ - -/* - * Copyright (c) 2004 Artur Grabowski <art@openbsd.org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/param.h> -#include <sys/mutex.h> -#include <sys/systm.h> -#include <sys/atomic.h> - -#include <machine/intr.h> - -#include <ddb/db_output.h> - -void -__mtx_init(struct mutex *mtx, int wantipl) -{ - mtx->mtx_owner = NULL; - mtx->mtx_wantipl = wantipl; - mtx->mtx_oldipl = IPL_NONE; -} - -#ifdef MULTIPROCESSOR -#ifdef MP_LOCKDEBUG -#ifndef DDB -#error "MP_LOCKDEBUG requires DDB" -#endif - -/* CPU-dependent timing, needs this to be settable from ddb. */ -extern int __mp_lock_spinout; -#endif - -void -__mtx_enter(struct mutex *mtx) -{ -#ifdef MP_LOCKDEBUG - int nticks = __mp_lock_spinout; -#endif - - while (__mtx_enter_try(mtx) == 0) { - CPU_BUSY_CYCLE(); - -#ifdef MP_LOCKDEBUG - if (--nticks == 0) { - db_printf("%s: %p lock spun out", __func__, mtx); - db_enter(); - nticks = __mp_lock_spinout; - } -#endif - } -} - -int -__mtx_enter_try(struct mutex *mtx) -{ - struct cpu_info *owner, *ci = curcpu(); - int s; - - if (mtx->mtx_wantipl != IPL_NONE) - s = splraise(mtx->mtx_wantipl); - - owner = atomic_cas_ptr(&mtx->mtx_owner, NULL, ci); -#ifdef DIAGNOSTIC - if (__predict_false(owner == ci)) - panic("mtx %p: locking against myself", mtx); -#endif - if (owner == NULL) { - membar_enter_after_atomic(); - if (mtx->mtx_wantipl != IPL_NONE) - mtx->mtx_oldipl = s; -#ifdef DIAGNOSTIC - ci->ci_mutex_level++; -#endif - return (1); - } - - if (mtx->mtx_wantipl != IPL_NONE) - splx(s); - - return (0); -} -#else -void -__mtx_enter(struct mutex *mtx) -{ - struct cpu_info *ci = curcpu(); - -#ifdef DIAGNOSTIC - if (__predict_false(mtx->mtx_owner == ci)) - panic("mtx %p: locking against myself", mtx); -#endif - - if (mtx->mtx_wantipl != IPL_NONE) - mtx->mtx_oldipl = splraise(mtx->mtx_wantipl); - - mtx->mtx_owner = ci; - -#ifdef DIAGNOSTIC - ci->ci_mutex_level++; -#endif -} - -int -__mtx_enter_try(struct mutex *mtx) -{ - __mtx_enter(mtx); - return (1); -} -#endif - -void -__mtx_leave(struct mutex *mtx) -{ - int s; - - MUTEX_ASSERT_LOCKED(mtx); - -#ifdef DIAGNOSTIC - curcpu()->ci_mutex_level--; -#endif - - s = mtx->mtx_oldipl; -#ifdef MULTIPROCESSOR - membar_exit_before_atomic(); -#endif - mtx->mtx_owner = NULL; - if (mtx->mtx_wantipl != IPL_NONE) - splx(s); -} diff --git a/sys/arch/powerpc/powerpc/mutex.c b/sys/arch/powerpc/powerpc/mutex.c deleted file mode 100644 index 14b8341b4fd..00000000000 --- a/sys/arch/powerpc/powerpc/mutex.c +++ /dev/null @@ -1,151 +0,0 @@ -/* $OpenBSD: mutex.c,v 1.8 2017/12/20 11:22:29 mpi Exp $ */ - -/* - * Copyright (c) 2004 Artur Grabowski <art@openbsd.org> - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * 1. Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * 2. The name of the author may not be used to endorse or promote products - * derived from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESS OR IMPLIED WARRANTIES, - * INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY - * AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL - * THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, - * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, - * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; - * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, - * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR - * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF - * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. - */ - -#include <sys/param.h> -#include <sys/mutex.h> -#include <sys/systm.h> -#include <sys/atomic.h> - -#include <machine/intr.h> - -#include <ddb/db_output.h> - -void -__mtx_init(struct mutex *mtx, int wantipl) -{ - mtx->mtx_owner = NULL; - mtx->mtx_wantipl = wantipl; - mtx->mtx_oldipl = IPL_NONE; -} - -#ifdef MULTIPROCESSOR -#ifdef MP_LOCKDEBUG -#ifndef DDB -#error "MP_LOCKDEBUG requires DDB" -#endif - -/* CPU-dependent timing, needs this to be settable from ddb. */ -extern int __mp_lock_spinout; -#endif - -void -__mtx_enter(struct mutex *mtx) -{ -#ifdef MP_LOCKDEBUG - int nticks = __mp_lock_spinout; -#endif - - while (__mtx_enter_try(mtx) == 0) { - CPU_BUSY_CYCLE(); - -#ifdef MP_LOCKDEBUG - if (--nticks == 0) { - db_printf("%s: %p lock spun out", __func__, mtx); - db_enter(); - nticks = __mp_lock_spinout; - } -#endif - } -} - -int -__mtx_enter_try(struct mutex *mtx) -{ - struct cpu_info *owner, *ci = curcpu(); - int s; - - if (mtx->mtx_wantipl != IPL_NONE) - s = splraise(mtx->mtx_wantipl); - - owner = atomic_cas_ptr(&mtx->mtx_owner, NULL, ci); -#ifdef DIAGNOSTIC - if (__predict_false(owner == ci)) - panic("mtx %p: locking against myself", mtx); -#endif - if (owner == NULL) { - membar_enter_after_atomic(); - if (mtx->mtx_wantipl != IPL_NONE) - mtx->mtx_oldipl = s; -#ifdef DIAGNOSTIC - ci->ci_mutex_level++; -#endif - return (1); - } - - if (mtx->mtx_wantipl != IPL_NONE) - splx(s); - - return (0); -} -#else -void -__mtx_enter(struct mutex *mtx) -{ - struct cpu_info *ci = curcpu(); - -#ifdef DIAGNOSTIC - if (__predict_false(mtx->mtx_owner == ci)) - panic("mtx %p: locking against myself", mtx); -#endif - - if (mtx->mtx_wantipl != IPL_NONE) - mtx->mtx_oldipl = splraise(mtx->mtx_wantipl); - - mtx->mtx_owner = ci; - -#ifdef DIAGNOSTIC - ci->ci_mutex_level++; -#endif -} - -int -__mtx_enter_try(struct mutex *mtx) -{ - __mtx_enter(mtx); - return (1); -} -#endif - -void -__mtx_leave(struct mutex *mtx) -{ - int s; - - MUTEX_ASSERT_LOCKED(mtx); - -#ifdef DIAGNOSTIC - curcpu()->ci_mutex_level--; -#endif - - s = mtx->mtx_oldipl; -#ifdef MULTIPROCESSOR - membar_exit_before_atomic(); -#endif - mtx->mtx_owner = NULL; - if (mtx->mtx_wantipl != IPL_NONE) - splx(s); -} |