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
> 

Reply via email to