From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-out.m-online.net (mail-out.m-online.net [IPv6:2001:a60:0:28:0:1:25:1]) by sourceware.org (Postfix) with ESMTPS id 69F6C385780B for ; Tue, 24 Nov 2020 21:50:05 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.3.2 sourceware.org 69F6C385780B Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=denx.de Authentication-Results: sourceware.org; spf=none smtp.mailfrom=lukma@denx.de Received: from frontend01.mail.m-online.net (unknown [192.168.8.182]) by mail-out.m-online.net (Postfix) with ESMTP id 4Cgd3c4gqRz1rtyS; Tue, 24 Nov 2020 22:50:04 +0100 (CET) Received: from localhost (dynscan1.mnet-online.de [192.168.6.70]) by mail.m-online.net (Postfix) with ESMTP id 4Cgd3c4WC2z1tF6G; Tue, 24 Nov 2020 22:50:04 +0100 (CET) X-Virus-Scanned: amavisd-new at mnet-online.de Received: from mail.mnet-online.de ([192.168.8.182]) by localhost (dynscan1.mail.m-online.net [192.168.6.70]) (amavisd-new, port 10024) with ESMTP id oPd9q9PUlctN; Tue, 24 Nov 2020 22:50:02 +0100 (CET) X-Auth-Info: eUQ6vuS0kYFBl9aFqLnVTp/yWS24/5ba+K+YrcZP0yI= Received: from jawa (89-64-5-98.dynamic.chello.pl [89.64.5.98]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.mnet-online.de (Postfix) with ESMTPSA; Tue, 24 Nov 2020 22:50:02 +0100 (CET) Date: Tue, 24 Nov 2020 22:49:47 +0100 From: Lukasz Majewski To: Adhemerval Zanella via Libc-alpha Cc: Adhemerval Zanella , Michael Kerrisk Subject: Re: [PATCH v2 12/13] nptl: Return EINVAL for pthread_mutex_clocklock/PI with CLOCK_MONOTONIC [BZ #26801] Message-ID: <20201124224947.6a54e427@jawa> In-Reply-To: <20201123195256.3336217-12-adhemerval.zanella@linaro.org> References: <20201123195256.3336217-1-adhemerval.zanella@linaro.org> <20201123195256.3336217-12-adhemerval.zanella@linaro.org> Organization: denx.de X-Mailer: Claws Mail 3.17.4 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; boundary="Sig_/hym59d0T/NGCcGLbngNginK"; protocol="application/pgp-signature" X-Spam-Status: No, score=-11.1 required=5.0 tests=BAYES_00, GIT_PATCH_0, KAM_DMARC_STATUS, KAM_LAZY_DOMAIN_SECURITY, KAM_SHORT, RCVD_IN_BARRACUDACENTRAL, RCVD_IN_DNSWL_LOW, SPF_HELO_NONE, SPF_NONE, TXREP autolearn=ham autolearn_force=no version=3.4.2 X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on server2.sourceware.org X-BeenThere: libc-alpha@sourceware.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: Libc-alpha mailing list List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Tue, 24 Nov 2020 21:50:07 -0000 --Sig_/hym59d0T/NGCcGLbngNginK Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable On Mon, 23 Nov 2020 16:52:55 -0300 Adhemerval Zanella via Libc-alpha wrote: > Changes from previous version: >=20 > - Replace ENOTSUP by EINVAL >=20 > -- >=20 > Linux futex FUTEX_LOCK_PI operation only supports CLOCK_REALTIME, > so pthread_mutex_clocklock operation with priority aware mutexes > may fail depending of the input timeout. >=20 > Also, it is not possible to convert a CLOCK_MONOTONIC to a > CLOCK_REALTIME due the possible wall clock time change which might > invalid the requested timeout. >=20 > Checked on x86_64-linux-gnu and i686-linux-gnu. > --- > nptl/Makefile | 2 +- > nptl/pthread_mutex_timedlock.c | 7 ++++ > nptl/tst-mutexpi10.c | 68 > ++++++++++++++++++++++++++++++++++ sysdeps/pthread/tst-mutex5.c | > 2 + sysdeps/pthread/tst-mutex9.c | 2 + > 5 files changed, 80 insertions(+), 1 deletion(-) > create mode 100644 nptl/tst-mutexpi10.c >=20 > diff --git a/nptl/Makefile b/nptl/Makefile > index 968768d33b..a48426a396 100644 > --- a/nptl/Makefile > +++ b/nptl/Makefile > @@ -265,7 +265,7 @@ tests =3D tst-attr2 tst-attr3 tst-default-attr \ > tst-mutex5a tst-mutex7a \ > tst-mutexpi1 tst-mutexpi2 tst-mutexpi3 tst-mutexpi4 \ > tst-mutexpi5 tst-mutexpi5a tst-mutexpi6 tst-mutexpi7 > tst-mutexpi7a \ > - tst-mutexpi9 \ > + tst-mutexpi9 tst-mutexpi10 \ > tst-cond22 tst-cond26 \ > tst-robustpi1 tst-robustpi2 tst-robustpi3 tst-robustpi4 > tst-robustpi5 \ tst-robustpi6 tst-robustpi7 tst-robustpi9 \ > diff --git a/nptl/pthread_mutex_timedlock.c > b/nptl/pthread_mutex_timedlock.c index b42862193a..aaaafa21ce 100644 > --- a/nptl/pthread_mutex_timedlock.c > +++ b/nptl/pthread_mutex_timedlock.c > @@ -313,6 +313,13 @@ __pthread_mutex_clocklock_common > (pthread_mutex_t *mutex, case PTHREAD_MUTEX_PI_ROBUST_NORMAL_NP: > case PTHREAD_MUTEX_PI_ROBUST_ADAPTIVE_NP: > { > + /* Currently futex FUTEX_LOCK_PI operation only provides > support for > + CLOCK_REALTIME and trying to emulate by converting a > + CLOCK_MONOTONIC to CLOCK_REALTIME will take in account > possible > + changes to the wall clock. */ > + if (__glibc_unlikely (clockid !=3D CLOCK_REALTIME)) > + return EINVAL; > + > int kind, robust; > { > /* See concurrency notes regarding __kind in struct > __pthread_mutex_s diff --git a/nptl/tst-mutexpi10.c > b/nptl/tst-mutexpi10.c new file mode 100644 > index 0000000000..84ba1dfa97 > --- /dev/null > +++ b/nptl/tst-mutexpi10.c > @@ -0,0 +1,68 @@ > +/* Check if pthread_mutex_clocklock with PRIO_INHERIT fails with > clock > + different than CLOCK_REALTIME. > + Copyright (C) 2015-2020 Free Software Foundation, Inc. Minor -> 2020 only > + This file is part of the GNU C Library. > + > + The GNU C Library is free software; you can redistribute it and/or > + modify it under the terms of the GNU Lesser General Public > + License as published by the Free Software Foundation; either > + version 2.1 of the License, or (at your option) any later version. > + > + The GNU C Library is distributed in the hope that it will be > useful, > + but WITHOUT ANY WARRANTY; without even the implied warranty of > + MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU > + Lesser General Public License for more details. > + > + You should have received a copy of the GNU Lesser General Public > + License along with the GNU C Library; if not, see > + . */ > + > +#include > +#include > +#include > + > +#include > +#include > +#include > + > +static int > +do_test (void) > +{ > + const int types[] =3D { > + PTHREAD_MUTEX_NORMAL, > + PTHREAD_MUTEX_ERRORCHECK, > + PTHREAD_MUTEX_RECURSIVE, > + PTHREAD_MUTEX_ADAPTIVE_NP > + }; > + const int robust[] =3D { > + PTHREAD_MUTEX_STALLED, > + PTHREAD_MUTEX_ROBUST > + }; > + > + > + for (int t =3D 0; t < array_length (types); t++) > + for (int r =3D 0; r < array_length (robust); r++) > + { > + pthread_mutexattr_t attr; > + > + xpthread_mutexattr_init (&attr); > + xpthread_mutexattr_setprotocol (&attr, PTHREAD_PRIO_INHERIT); > + xpthread_mutexattr_settype (&attr, types[t]); > + xpthread_mutexattr_setrobust (&attr, robust[r]); > + > + pthread_mutex_t mtx; > + xpthread_mutex_init (&mtx, &attr); > + > + struct timespec tmo =3D timespec_add (xclock_now > (CLOCK_MONOTONIC), > + make_timespec (0, > 100000000)); + > + TEST_COMPARE (pthread_mutex_clocklock (&mtx, > CLOCK_MONOTONIC, &tmo), > + EINVAL); > + > + xpthread_mutex_destroy (&mtx); > + } > + > + return 0; > +} > + > +#include > diff --git a/sysdeps/pthread/tst-mutex5.c > b/sysdeps/pthread/tst-mutex5.c index 14490768c3..bfe1a79fa4 100644 > --- a/sysdeps/pthread/tst-mutex5.c > +++ b/sysdeps/pthread/tst-mutex5.c > @@ -112,7 +112,9 @@ static int do_test (void) > { > do_test_clock (CLOCK_USE_TIMEDLOCK, "timedlock"); > do_test_clock (CLOCK_REALTIME, "clocklock(realtime)"); > +#ifndef ENABLE_PI > do_test_clock (CLOCK_MONOTONIC, "clocklock(monotonic)"); > +#endif > return 0; > } > =20 > diff --git a/sysdeps/pthread/tst-mutex9.c > b/sysdeps/pthread/tst-mutex9.c index 2d7927b7c2..bfc01f8c75 100644 > --- a/sysdeps/pthread/tst-mutex9.c > +++ b/sysdeps/pthread/tst-mutex9.c > @@ -133,7 +133,9 @@ do_test (void) > { > do_test_clock (CLOCK_USE_TIMEDLOCK); > do_test_clock (CLOCK_REALTIME); > +#ifndef ENABLE_PI > do_test_clock (CLOCK_MONOTONIC); > +#endif > return 0; > } > =20 Reviewed-by: Lukasz Majewski Best regards, Lukasz Majewski -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany Phone: (+49)-8142-66989-59 Fax: (+49)-8142-66989-80 Email: lukma@denx.de --Sig_/hym59d0T/NGCcGLbngNginK Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQEzBAEBCgAdFiEEgAyFJ+N6uu6+XupJAR8vZIA0zr0FAl+9f/sACgkQAR8vZIA0 zr2nIQgAtsyeZ4UehWBGnHBS51BFjzE0AVoF72AVC0mS0cI3oASyuRF5IpLPqty7 X2wlSET8Z9WeJSw6uu0etox1+Wnu9hEdKtNuHRnPE3JP0kfrcvGhGTsSfiolzEVt 5pFGiZbueO9ywEHBiEccDdPTdfHLeX3ccypjQqMobj4NY57l/V60u75BztpiIrYl FeK1qJXfteVE3Elc3a+8wzzHsXcs3iJab3ithR4dJUP2wyItXOO327U3VFbsXqst 5QSz5pZ7OJ24MFLY9HigPs9QTRwPYxSlWqLzV51JfIgoYc61Rh9TFWtNH4+T+0qs C9I+3TyVUM9yCKg2ArCcVvpXyq4V0g== =+IVq -----END PGP SIGNATURE----- --Sig_/hym59d0T/NGCcGLbngNginK--