This is the mail archive of the
libc-alpha@sourceware.org
mailing list for the glibc project.
Re: [PATCH 4/4] x86: Remove arch-specific low level lock implementation
- From: "H.J. Lu" <hjl dot tools at gmail dot com>
- To: Adhemerval Zanella <adhemerval dot zanella at linaro dot org>
- Cc: GNU C Library <libc-alpha at sourceware dot org>
- Date: Tue, 9 Apr 2019 06:03:03 -0700
- Subject: Re: [PATCH 4/4] x86: Remove arch-specific low level lock implementation
- References: <20190222192703.18177-1-adhemerval.zanella@linaro.org> <20190222192703.18177-4-adhemerval.zanella@linaro.org>
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.