On Fri, Feb 09, 2018 at 09:06:21PM +0100, Martin Pieuchot wrote: > i386 and amd64 have been using the MI mutex code for some time now > without problem. Time to remove the old assembly code, ok? >
no objection here. ok mlarkin > Index: arch/amd64/amd64/genassym.cf > =================================================================== > RCS file: /cvs/src/sys/arch/amd64/amd64/genassym.cf,v > retrieving revision 1.32 > diff -u -p -r1.32 genassym.cf > --- arch/amd64/amd64/genassym.cf 22 Jan 2018 10:04:46 -0000 1.32 > +++ arch/amd64/amd64/genassym.cf 9 Feb 2018 17:54:21 -0000 > @@ -139,11 +139,6 @@ struct ioapic_softc > member IOAPIC_SC_REG sc_reg > member IOAPIC_SC_DATA sc_data > > -struct mutex > -member mtx_wantipl > -member mtx_oldipl > -member mtx_owner > - > # pte fields > export PG_V > export PG_KR > Index: arch/amd64/amd64/mutex.S > =================================================================== > RCS file: arch/amd64/amd64/mutex.S > diff -N arch/amd64/amd64/mutex.S > --- arch/amd64/amd64/mutex.S 29 Jun 2017 17:17:28 -0000 1.13 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,170 +0,0 @@ > -/* $OpenBSD: mutex.S,v 1.13 2017/06/29 17:17:28 deraadt Exp $ */ > - > -/* > - * Copyright (c) 2004 Artur Grabowski <a...@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 "assym.h" > - > -#include <machine/param.h> > -#include <machine/asm.h> > -#include <machine/segments.h> > -#include <machine/specialreg.h> > -#include <machine/trap.h> > -#include <machine/frameasm.h> > - > -/* > - * Yeah, we don't really need to implement mtx_init here, but let's keep > - * all the functions in the same place. > - */ > -ENTRY(__mtx_init) > - movl %esi, MTX_WANTIPL(%rdi) > - movl $0, MTX_OLDIPL(%rdi) > - movq $0, MTX_OWNER(%rdi) > - ret > - > -ENTRY(__mtx_enter) > -1: movl MTX_WANTIPL(%rdi), %eax > - movq CPUVAR(SELF), %rcx > - movl CPU_INFO_ILEVEL(%rcx), %edx # oipl = cpl; > - cmpl %eax, %edx # if (cpl < mtx->mtx_wantipl) > - cmovge %edx, %eax > - movl %eax, CPU_INFO_ILEVEL(%rcx) # cpl = mtx->mtx_wantipl; > - /* > - * %edx - the old ipl > - * %rcx - curcpu() > - */ > - xorq %rax, %rax > -#ifdef MULTIPROCESSOR > - lock > -#endif > - cmpxchgq %rcx, MTX_OWNER(%rdi) # test_and_set(mtx->mtx_owner) > - jne 2f > - movl %edx, MTX_OLDIPL(%rdi) > -#ifdef DIAGNOSTIC > - incl CPU_INFO_MUTEX_LEVEL(%rcx) > -#endif > - ret > - > - /* We failed to obtain the lock. splx, spin and retry. */ > -2: pushq %rdi > - movl %edx, %edi > - call _C_LABEL(spllower) > - popq %rdi > -3: > - pause > -#ifdef DIAGNOSTIC > - movq CPUVAR(SELF), %rcx > - cmpq MTX_OWNER(%rdi), %rcx > - je 4f > -#endif > - movq MTX_OWNER(%rdi), %rax > - testq %rax, %rax > - jz 1b > - jmp 3b > -#ifdef DIAGNOSTIC > -4: movq $mtx_lockingself, %rdi > - call _C_LABEL(panic) > - > - .section .rodata > -mtx_lockingself: > - .asciz "mtx_enter: locking against myself" > - .text > -#endif > - > -ENTRY(__mtx_enter_try) > -1: movl MTX_WANTIPL(%rdi), %eax > - movq CPUVAR(SELF), %rcx > - movl CPU_INFO_ILEVEL(%rcx), %edx # oipl = cpl; > - cmpl %eax, %edx # if (cpl < mtx->mtx_wantipl) > - cmovge %edx, %eax > - movl %eax, CPU_INFO_ILEVEL(%rcx) # cpl = mtx->mtx_wantipl; > - /* > - * %edx - the old ipl > - * %rcx - curcpu() > - */ > - xorq %rax, %rax > -#ifdef MULTIPROCESSOR > - lock > -#endif > - cmpxchgq %rcx, MTX_OWNER(%rdi) # test_and_set(mtx->mtx_owner) > - jne 2f > - movl %edx, MTX_OLDIPL(%rdi) > -#ifdef DIAGNOSTIC > - incl CPU_INFO_MUTEX_LEVEL(%rcx) > -#endif > - movq $1, %rax > - ret > - > - /* We failed to obtain the lock. splx and return 0. */ > -2: pushq %rdi > - movl %edx, %edi > - call _C_LABEL(spllower) > - popq %rdi > -#ifdef DIAGNOSTIC > - movq CPUVAR(SELF), %rcx > - cmpq MTX_OWNER(%rdi), %rcx > - je 3f > -#endif > - xorq %rax, %rax > - ret > - > -#ifdef DIAGNOSTIC > -3: movq $mtx_lockingtry, %rdi > - call _C_LABEL(panic) > - > - .section .rodata > -mtx_lockingtry: > - .asciz "mtx_enter_try: locking against myself" > - .text > -#endif > - > - > -ENTRY(__mtx_leave) > - movq %rdi, %rax > -#ifdef DIAGNOSTIC > - movq CPUVAR(SELF), %rcx > - cmpq MTX_OWNER(%rax), %rcx > - jne 2f > - decl CPU_INFO_MUTEX_LEVEL(%rcx) > -#endif > - xorq %rcx, %rcx > - movl MTX_OLDIPL(%rax), %edi > - movl %ecx, MTX_OLDIPL(%rax) > - movq %rcx, MTX_OWNER(%rax) > - cmpl %edi, CPUVAR(ILEVEL) > - je 1f > - call _C_LABEL(spllower) > -1: > - ret > - > -#ifdef DIAGNOSTIC > -2: movq $mtx_leave_held, %rdi > - call _C_LABEL(panic) > - > - .section .rodata > -mtx_leave_held: > - .asciz "mtx_leave: lock not held" > - .text > -#endif > Index: arch/i386/i386/genassym.cf > =================================================================== > RCS file: /cvs/src/sys/arch/i386/i386/genassym.cf,v > retrieving revision 1.41 > diff -u -p -r1.41 genassym.cf > --- arch/i386/i386/genassym.cf 22 Jan 2018 10:04:46 -0000 1.41 > +++ arch/i386/i386/genassym.cf 9 Feb 2018 17:54:29 -0000 > @@ -135,11 +135,6 @@ member IH_COUNT ih_count.ec_count > member ih_next > endif > > -struct mutex > -member mtx_wantipl > -member mtx_oldipl > -member mtx_owner > - > define IP_SRC offsetof(struct ip, ip_src) > define IP_DST offsetof(struct ip, ip_dst) > > Index: arch/i386/i386/mutex.S > =================================================================== > RCS file: arch/i386/i386/mutex.S > diff -N arch/i386/i386/mutex.S > --- arch/i386/i386/mutex.S 29 Jun 2017 17:17:28 -0000 1.12 > +++ /dev/null 1 Jan 1970 00:00:00 -0000 > @@ -1,179 +0,0 @@ > -/* $OpenBSD: mutex.S,v 1.12 2017/06/29 17:17:28 deraadt Exp $ */ > - > -/* > - * Copyright (c) 2004 Artur Grabowski <a...@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 "assym.h" > -/* > - * Yeah, we don't really need to implement mtx_init here, but let's keep > - * all the functions in the same place. > - */ > -ENTRY(__mtx_init) > - pushl %ebp > - movl %esp, %ebp > - movl 8(%esp), %eax > - movl 12(%esp), %edx > - movl %edx, MTX_WANTIPL(%eax) > - xorl %edx, %edx > - movl %edx, MTX_OLDIPL(%eax) > - movl %edx, MTX_LOCK(%eax) > - movl %edx, MTX_OWNER(%eax) > - leave > - ret > - > -#define SOFF 8 > - > -ENTRY(__mtx_enter) > - pushl %ebp > - movl %esp, %ebp > -1: movl SOFF(%ebp), %ecx > - movl MTX_WANTIPL(%ecx), %eax > - movl CPL, %edx # oipl = cpl; > - cmpl %edx, %eax # if (cpl < mtx->mtx_wantipl) > - jle 2f > - movl %eax, CPL # cpl = mtx->mtx_wantipl; > -2: /* > - * %edx now contains the oldipl. > - * %ecx contains the mtx. > - */ > - movl $1, %eax > - xchgl %eax, MTX_LOCK(%ecx) # test_and_set(mtx->mtx_lock) > - testl %eax, %eax # if (already held) > - jnz 3f > - movl CPUVAR(SELF), %eax > -#ifdef DIAGNOSTIC > - incl CPU_INFO_MUTEX_LEVEL(%eax) > -#endif > - movl %eax, MTX_OWNER(%ecx) > - movl %edx, MTX_OLDIPL(%ecx) > - leave > - ret > - > - /* We failed to obtain the lock. splx, spin and retry. */ > -3: pushl %edx > - call _C_LABEL(splx) > - movl %ebp, %esp > - movl SOFF(%ebp), %ecx # %ecx clobbered > -4: > - pause > -#ifdef DIAGNOSTIC > - movl CPUVAR(SELF), %edx > - cmpl MTX_OWNER(%ecx), %edx > - je 5f > -#endif > - movl MTX_LOCK(%ecx), %eax > - testl %eax, %eax > - jz 1b > - jmp 4b > -#ifdef DIAGNOSTIC > -5: pushl $mtx_lockingself > - call _C_LABEL(panic) > - > - .section .rodata > -mtx_lockingself: > - .asciz "mtx_enter: locking against myself" > - .text > -#endif > - > -ENTRY(__mtx_enter_try) > - pushl %ebp > - movl %esp, %ebp > -1: movl SOFF(%ebp), %ecx > - movl MTX_WANTIPL(%ecx), %eax > - movl CPL, %edx # oipl = cpl; > - cmpl %edx, %eax # if (cpl < mtx->mtx_wantipl) > - jle 2f > - movl %eax, CPL # cpl = mtx->mtx_wantipl; > -2: /* > - * %edx now contains the oldipl. > - * %ecx contains the mtx. > - */ > - movl $1, %eax > - xchgl %eax, MTX_LOCK(%ecx) # test_and_set(mtx->mtx_lock) > - testl %eax, %eax # if (already held) > - jnz 3f > - movl CPUVAR(SELF), %eax > -#ifdef DIAGNOSTIC > - incl CPU_INFO_MUTEX_LEVEL(%eax) > -#endif > - movl %eax, MTX_OWNER(%ecx) > - movl %edx, MTX_OLDIPL(%ecx) > - movl $1, %eax > - leave > - ret > - > - /* We failed to obtain the lock. splx and return zero. */ > -3: pushl %edx > - call _C_LABEL(splx) > - movl %ebp, %esp > - movl SOFF(%ebp), %ecx # %ecx clobbered > -#ifdef DIAGNOSTIC > - movl CPUVAR(SELF), %edx > - cmpl MTX_OWNER(%ecx), %edx > - je 4f > -#endif > - xorl %eax, %eax > - leave > - ret > - > -#ifdef DIAGNOSTIC > -4: pushl $mtx_lockingtry > - call _C_LABEL(panic) > - > - .section .rodata > -mtx_lockingtry: > - .asciz "mtx_enter_try: locking against myself" > - .text > -#endif > - > - > -ENTRY(__mtx_leave) > - pushl %ebp > - movl %esp, %ebp > - movl SOFF(%ebp), %ecx > -#ifdef DIAGNOSTIC > - movl CPUVAR(SELF), %eax > - cmpl %eax, MTX_OWNER(%ecx) > - jne 1f > - decl CPU_INFO_MUTEX_LEVEL(%eax) > -#endif > - xorl %eax, %eax > - movl %eax, MTX_OWNER(%ecx) > - pushl MTX_OLDIPL(%ecx) > - movl %eax, MTX_OLDIPL(%ecx) > - movl %eax, MTX_LOCK(%ecx) > - call _C_LABEL(splx) > - leave > - ret > - > -#ifdef DIAGNOSTIC > -1: pushl $mtx_leave_held > - call _C_LABEL(panic) > - > - .section .rodata > -mtx_leave_held: > - .asciz "mtx_leave: lock not held" > - .text > -#endif >