i386 and amd64 have been using the MI mutex code for some time now
without problem.  Time to remove the old assembly code, ok?

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

Reply via email to