From: mpi Date: Thu, 25 Jan 2018 15:19:33 +0000 (+0000) Subject: Remove mutex implementations that now live in MI code. X-Git-Url: http://artulab.com/gitweb/?a=commitdiff_plain;h=6034170565a4a7ff603c29ea46ff60820ebd80a7;p=openbsd Remove mutex implementations that now live in MI code. --- 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 - * 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 -#include -#include -#include - -#include - -#include - -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 - * 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 -#include -#include -#include - -#include - -#include - -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 - * 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 -#include -#include -#include - -#include - -#include - -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 - * 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 -#include -#include -#include - -#include - -#include - -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 - * 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 -#include -#include -#include - -#include - -#include - -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 - * 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 -#include -#include -#include - -#include - -#include - -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); -}