From patchwork Tue Jun 25 00:09:01 2019 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Alistair Francis X-Patchwork-Id: 33375 Received: (qmail 19076 invoked by alias); 25 Jun 2019 00:11:34 -0000 Mailing-List: contact libc-alpha-help@sourceware.org; run by ezmlm Precedence: bulk List-Id: List-Unsubscribe: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: libc-alpha-owner@sourceware.org Delivered-To: mailing list libc-alpha@sourceware.org Received: (qmail 19014 invoked by uid 89); 25 Jun 2019 00:11:34 -0000 Authentication-Results: sourceware.org; auth=none X-Spam-SWARE-Status: No, score=-26.4 required=5.0 tests=AWL, BAYES_00, GIT_PATCH_0, GIT_PATCH_1, GIT_PATCH_2, GIT_PATCH_3 autolearn=ham version=3.3.1 spammy= X-HELO: esa6.hgst.iphmx.com DKIM-Signature: v=1; a=rsa-sha256; c=simple/simple; d=wdc.com; i=@wdc.com; q=dns/txt; s=dkim.wdc.com; t=1561421493; x=1592957493; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=Hi7cDXYUAM2AFHCBRp097zDjNC125EhTGPADC3iS0r0=; b=L5vp6Tc7g+GsYPxCvw2bv9NcAP5ma33bd/esoA0VQyGChX53OIb/NTBb DUzgiu5Hael/fuJlCxlnXvMnY9X1cxuILq1o390hWEs2FFVIqMGK2hnQC zPpW8gXp61cEOynhP1MnTfdZsWNk0Ixab2CYAg9L2xSIEe3syxQkOHJf0 gMlLttr4CjpjG+tFG7kWFuF1m3KrGY2ZgJHHxOQRCTsAJNE1fU+9VroNW XS1vOq+3nlkGY8mtobzc/1/wts8PThdGK06MKdK427JUHKYRaSJUHg8Jy wzMe4ykn7sy3pvbnupNmUD8ZA4NbdEr26wCx+gzwWTtRsOhsxsIuekwMn Q==; IronPort-SDR: 7eKAv0dfv+u8F6JO+BphLfEb5Gr4+/H5sZPe/ukWqd3/PA0srTqOczFstiRcbqesuWMgQHdSGg mIZn7YCt+tjEJhQSYb211lBWwqrJgEDWf9EXhymv+KP03QteCmblZ6iDbXU/EuD712PwsM79Gy TdgnDbeV0UaVBjLuSW5ZZz04dgIKMvhuD1Zv/UEM5eTVLqbDH78Y61KPEaruuQ0u5ZBK9eB5im 3siFXjVIuDibB3dAI3++kZ78UHUUPC5lVN15Q0VYjexhdTkDztfTLzNsjTAvCnp32iVQ2udKMj mv7+6GKjlWc1EfCyGFSG5k2t IronPort-SDR: 0DvivWsFbufqvUXXN8OOxa0klR0dxcu5hXQGseCxMQ0M8gknMM2xQvBHyvHPpxRQuF9MUkk7e6 1WlyVFGkxDVOhOgWxCY0bOSuB4Sg+iy18I8PqpgVySdMUaQhi/lL8fzm6Pziwa02JFzQWQr8wD VdOlG6sGv7YI2FgtUt1MlaBzDlsttjwpFtDa2pGMA7eg6z5jSDtG+V9pM/JjqRdCN+Qu0QTA1f 5DzTSUqlfd+ChQT5XADVzLXABBgEBgx6ShqPgR1sgbRrIXwi4pA8h/BHPeBUvduKGDHNCllBWB KJs= From: Alistair Francis To: libc-alpha@sourceware.org Cc: arnd@arndb.de, adhemerval.zanella@linaro.org, fweimer@redhat.com, palmer@sifive.com, macro@wdc.com, zongbox@gmail.com, zong@andestech.com, alistair.francis@wdc.com, alistair23@gmail.com Subject: [RFC v2 06/20] sysdeps/futex: Use futex_time64 if avaliable Date: Mon, 24 Jun 2019 17:09:01 -0700 Message-Id: <1e92bb4f2cc06e8f3adfbd9de653c8e93c0d288a.1561421042.git.alistair.francis@wdc.com> In-Reply-To: References: MIME-Version: 1.0 The futex syscall isn't avaliable on newer 32-bit architectures (such as RV32) so if futex_time64 is avaliable lets use that instead. Signed-off-by: Alistair Francis --- ChangeLog | 1 + sysdeps/unix/sysv/linux/lowlevellock-futex.h | 28 ++++++++++++++------ 2 files changed, 21 insertions(+), 8 deletions(-) diff --git a/ChangeLog b/ChangeLog index b90c5ab60c..a700783ef3 100644 --- a/ChangeLog +++ b/ChangeLog @@ -3,6 +3,7 @@ * nptl/thrd_sleep.c: Use clock_nanosleep_time64 instead of nanosleep. * sysdeps/unix/sysv/linux/nanosleep.c: Likewise. * sysdeps/unix/sysv/linux/nanosleep_nocancel.c: Likewise. + * sysdeps/unix/sysv/linux/lowlevellock-futex.h: Use __NR_futex_time64 if we don't have __NR_futex. 2019-06-20 Dmitry V. Levin Florian Weimer diff --git a/sysdeps/unix/sysv/linux/lowlevellock-futex.h b/sysdeps/unix/sysv/linux/lowlevellock-futex.h index 030a14b8dc..e310542bfa 100644 --- a/sysdeps/unix/sysv/linux/lowlevellock-futex.h +++ b/sysdeps/unix/sysv/linux/lowlevellock-futex.h @@ -65,14 +65,26 @@ (((fl) | FUTEX_PRIVATE_FLAG) ^ (private)) #endif -#define lll_futex_syscall(nargs, futexp, op, ...) \ - ({ \ - INTERNAL_SYSCALL_DECL (__err); \ - long int __ret = INTERNAL_SYSCALL (futex, __err, nargs, futexp, op, \ - __VA_ARGS__); \ - (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (__ret, __err)) \ - ? -INTERNAL_SYSCALL_ERRNO (__ret, __err) : 0); \ - }) +/* __NR_futex isn't defined on all archs (RV32) so use __NR_futex_time64 */ +#ifdef __NR_futex_time64 +# define lll_futex_syscall(nargs, futexp, op, ...) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ + long int __ret = INTERNAL_SYSCALL (futex_time64, __err, nargs, futexp, op, \ + __VA_ARGS__); \ + (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (__ret, __err)) \ + ? -INTERNAL_SYSCALL_ERRNO (__ret, __err) : 0); \ + }) +#else +# define lll_futex_syscall(nargs, futexp, op, ...) \ + ({ \ + INTERNAL_SYSCALL_DECL (__err); \ + long int __ret = INTERNAL_SYSCALL (futex, __err, nargs, futexp, op, \ + __VA_ARGS__); \ + (__glibc_unlikely (INTERNAL_SYSCALL_ERROR_P (__ret, __err)) \ + ? -INTERNAL_SYSCALL_ERRNO (__ret, __err) : 0); \ + }) +#endif #define lll_futex_wait(futexp, val, private) \ lll_futex_timed_wait (futexp, val, NULL, private)