This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH 4/4] x86: Remove arch-specific low level lock implementation


On Fri, Feb 22, 2019 at 11:27 AM Adhemerval Zanella
<adhemerval.zanella@linaro.org> wrote:
>
> This patch removes the arch-specific x86 assembly implementation for
> low level locking and consolidate both 64 bits and 32 bits in a
> single implementation.
>
> Different than other architectures, x86 lll_trylock, lll_lock, and
> lll_unlock implements a single-thread optimization to avoid atomic
> operation, using cmpxchgl instead.  This patch implements by using
> the new single-thread.h definitions in a generic way, although using
> the previous semantic.
>
> The lll_cond_trylock, lll_cond_lock, and lll_timedlock just use
> atomic operations plus calls to lll_lock_wait*.
>
> For __lll_lock_wait_private and __lll_lock_wait the generic implemtation
> there is no indication that assembly implementation is required
> performance-wise.
>
> Checked on x86_64-linux-gnu and i686-linux-gnu.
>
>         * sysdeps/nptl/lowlevellock.h (__lll_trylock): New macro.
>         (lll_trylock): Call __lll_trylock.
>         * sysdeps/unix/sysv/linux/i386/libc-lowlevellock.S: Remove file.
>         * sysdeps/unix/sysv/linux/i386/lll_timedlock_wait.c: Likewise.
>         * sysdeps/unix/sysv/linux/i386/lowlevellock.S: Likewise.
>         * sysdeps/unix/sysv/linux/i386/lowlevellock.h: Likewise.
>         * sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S: Likewise.
>         * sysdeps/unix/sysv/linux/x86_64/lll_timedlock_wait.c: Likewise.
>         * sysdeps/unix/sysv/linux/x86_64/lowlevellock.S: Likewise.
>         * sysdeps/unix/sysv/linux/x86_64/lowlevellock.h: Likewise.
>         * sysdeps/unix/sysv/linux/x86/lowlevellock.h: New file.
>         * sysdeps/unix/sysv/linux/x86_64/cancellation.S: Include
>         lowlevellock-futex.h.
> ---
>  sysdeps/nptl/lowlevellock.h                   |   4 +-
>  .../unix/sysv/linux/i386/libc-lowlevellock.S  |  19 -
>  .../unix/sysv/linux/i386/lll_timedlock_wait.c |   1 -
>  sysdeps/unix/sysv/linux/i386/lowlevellock.S   | 368 ------------------
>  sysdeps/unix/sysv/linux/i386/lowlevellock.h   | 240 ------------
>  sysdeps/unix/sysv/linux/x86/lowlevellock.h    | 110 ++++++
>  sysdeps/unix/sysv/linux/x86_64/cancellation.S |   2 +-
>  .../sysv/linux/x86_64/libc-lowlevellock.S     |  19 -
>  .../sysv/linux/x86_64/lll_timedlock_wait.c    |   1 -
>  sysdeps/unix/sysv/linux/x86_64/lowlevellock.S | 348 -----------------
>  sysdeps/unix/sysv/linux/x86_64/lowlevellock.h | 243 ------------
>  11 files changed, 114 insertions(+), 1241 deletions(-)
>  delete mode 100644 sysdeps/unix/sysv/linux/i386/libc-lowlevellock.S
>  delete mode 100644 sysdeps/unix/sysv/linux/i386/lll_timedlock_wait.c
>  delete mode 100644 sysdeps/unix/sysv/linux/i386/lowlevellock.S
>  delete mode 100644 sysdeps/unix/sysv/linux/i386/lowlevellock.h
>  create mode 100644 sysdeps/unix/sysv/linux/x86/lowlevellock.h
>  delete mode 100644 sysdeps/unix/sysv/linux/x86_64/libc-lowlevellock.S
>  delete mode 100644 sysdeps/unix/sysv/linux/x86_64/lll_timedlock_wait.c
>  delete mode 100644 sysdeps/unix/sysv/linux/x86_64/lowlevellock.S
>  delete mode 100644 sysdeps/unix/sysv/linux/x86_64/lowlevellock.h
>

LGTM.

Thanks.

-- 
H.J.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]