From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) by sourceware.org (Postfix) with ESMTPS id 7CB40388A809 for ; Mon, 21 Jun 2021 07:44:19 +0000 (GMT) DMARC-Filter: OpenDMARC Filter v1.4.1 sourceware.org 7CB40388A809 Authentication-Results: sourceware.org; dmarc=none (p=none dis=none) header.from=denx.de Authentication-Results: sourceware.org; spf=pass smtp.mailfrom=denx.de Received: from ktm (85-222-111-42.dynamic.chello.pl [85.222.111.42]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)) (No client certificate requested) (Authenticated sender: lukma@denx.de) by phobos.denx.de (Postfix) with ESMTPSA id 6E4DD828BC; Mon, 21 Jun 2021 09:44:18 +0200 (CEST) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=denx.de; s=phobos-20191101; t=1624261458; bh=g0DSMsXKS6GVblnx7iVcsdD+gl+OQ39k8vlJA6PZ8Vo=; h=Date:From:To:Cc:Subject:In-Reply-To:References:From; b=aAoS+K/FZiNMZv9jczCXfiIJHIfDCYaIedqdbstnA2hjlK8Ud9hu4fLnLLVtvoK5G ysB9BLEt5PI3Tpi1ID7eBg0Ok+GC87FJnIMcg8/5c+r50OZiMcqNoq033FKVAVYTZV lMhmJAck/VQvwqAPkdd3rQnAx3k5iuADzytbRe7/ar6f++2lTO+rGfgYwDaEcg8mjm heOypVSHCqk1MhHqo8hL32pYeiyBUev53Y3VljhFiopaLwLRCD082n85+c4l+TWWpX mK/wqOd2cyYE6PkzZ0N/MaQPEL9XUWSvioHFZ4iOstOf6aSwhylMw9UjwU37ftm5Jk d0HwPriKXytWg== Date: Mon, 21 Jun 2021 09:44:17 +0200 From: Lukasz Majewski To: Adhemerval Zanella Cc: libc-alpha@sourceware.org, Carlos O'Donell Subject: Re: [PATCH 13/18] linux: Only use 64-bit syscall if required for mq_timedreceive Message-ID: <20210621094417.7a3a926e@ktm> In-Reply-To: <20210617115104.1359598-14-adhemerval.zanella@linaro.org> References: <20210617115104.1359598-1-adhemerval.zanella@linaro.org> <20210617115104.1359598-14-adhemerval.zanella@linaro.org> Organization: denx.de X-Mailer: Claws Mail 3.17.8 (GTK+ 2.24.32; x86_64-pc-linux-gnu) MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; boundary="Sig_/zFd_+D6acjyvIpN6ngr2wlh"; protocol="application/pgp-signature" X-Virus-Scanned: clamav-milter 0.103.2 at phobos.denx.de X-Virus-Status: Clean X-Spam-Status: No, score=-11.7 required=5.0 tests=BAYES_00, DKIM_SIGNED, DKIM_VALID, DKIM_VALID_AU, DKIM_VALID_EF, GIT_PATCH_0, KAM_SHORT, RCVD_IN_BARRACUDACENTRAL, SPF_HELO_NONE, SPF_PASS, 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: Mon, 21 Jun 2021 07:44:21 -0000 --Sig_/zFd_+D6acjyvIpN6ngr2wlh Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable On Thu, 17 Jun 2021 08:50:59 -0300 Adhemerval Zanella wrote: > For !__ASSUME_TIME64_SYSCALLS there is no need to issue a 64-bit > syscall if the provided timeout fits in a 32-bit one. The 64-bit > usage should be rare since the timeout is a relative one. >=20 > Checked on i686-linux-gnu on a 4.15 kernel and on a 5.11 kernel > (with and without --enable-kernel=3D5.1) and on x86_64-linux-gnu. > --- > rt/Makefile | 4 +- > rt/tst-mqueue10-time64.c | 1 + > rt/tst-mqueue10.c | 62 > +++++++++++++++++++++++ sysdeps/unix/sysv/linux/mq_timedreceive.c | > 35 +++++++------ 4 files changed, 85 insertions(+), 17 deletions(-) > create mode 100644 rt/tst-mqueue10-time64.c > create mode 100644 rt/tst-mqueue10.c >=20 > diff --git a/rt/Makefile b/rt/Makefile > index 797f2da51e..3382c7a1d2 100644 > --- a/rt/Makefile > +++ b/rt/Makefile > @@ -48,7 +48,8 @@ tests :=3D tst-shm tst-timer tst-timer2 \ > tst-mqueue5 tst-mqueue6 tst-mqueue7 tst-mqueue8 tst-mqueue9 > \ tst-timer3 tst-timer4 tst-timer5 \ > tst-cpuclock2 tst-cputimer1 tst-cputimer2 tst-cputimer3 \ > - tst-shm-cancel > + tst-shm-cancel \ > + tst-mqueue10 > tests-internal :=3D tst-timer-sigmask > =20 > tests-time64 :=3D \ > @@ -58,6 +59,7 @@ tests-time64 :=3D \ > tst-mqueue2-time64 \ > tst-mqueue4-time64 \ > tst-mqueue8-time64 \ > + tst-mqueue10-time64 \ > tst-timer4-time64 > =20 > extra-libs :=3D librt > diff --git a/rt/tst-mqueue10-time64.c b/rt/tst-mqueue10-time64.c > new file mode 100644 > index 0000000000..2c8a4ae372 > --- /dev/null > +++ b/rt/tst-mqueue10-time64.c > @@ -0,0 +1 @@ > +#include "tst-mqueue10.c" > diff --git a/rt/tst-mqueue10.c b/rt/tst-mqueue10.c > new file mode 100644 > index 0000000000..7fb53a1cae > --- /dev/null > +++ b/rt/tst-mqueue10.c > @@ -0,0 +1,62 @@ > +/* Check for large timeout with mq_timedsend and mq_timedreceive. > + Copyright (C) 2021 Free Software Foundation, Inc. > + 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 > +#include > +#include > + > +static char name[sizeof "/tst-mqueue2-" + INT_BUFSIZE_BOUND (pid_t)]; > + > +static void > +do_cleanup (void) > +{ > + mq_unlink (name); > +} > +#define CLEANUP_HANDLER do_cleanup > + > +static int > +do_test (void) > +{ > + snprintf (name, sizeof (name), "/tst-mqueue2-%u", getpid ()); > + > + char msg[8] =3D { 0x55 }; > + > + struct mq_attr attr =3D { .mq_maxmsg =3D 1, .mq_msgsize =3D sizeof (ms= g) > }; > + mqd_t q =3D mq_open (name, O_CREAT | O_EXCL | O_RDWR, 0600, &attr); > + TEST_VERIFY_EXIT (q !=3D (mqd_t) -1); > + > + struct timespec ts =3D { TYPE_MAXIMUM (time_t), 0 }; > + > + { > + timer_t timer =3D support_create_timer (0, 100000000, false, NULL); > + TEST_COMPARE (mq_timedreceive (q, msg, sizeof (msg), NULL, &ts), > -1); > + TEST_VERIFY (errno =3D=3D EINTR || errno =3D=3D EOVERFLOW); > + support_delete_timer (timer); > + } > + > + mq_unlink (name); > + > + return 0; > +} > + > +#include > diff --git a/sysdeps/unix/sysv/linux/mq_timedreceive.c > b/sysdeps/unix/sysv/linux/mq_timedreceive.c index > eb948ccc18..8776977daf 100644 --- > a/sysdeps/unix/sysv/linux/mq_timedreceive.c +++ > b/sysdeps/unix/sysv/linux/mq_timedreceive.c @@ -29,30 +29,33 @@ > __mq_timedreceive_time64 (mqd_t mqdes, char *__restrict msg_ptr, > size_t msg_len, #ifndef __NR_mq_timedreceive_time64 # define > __NR_mq_timedreceive_time64 __NR_mq_timedreceive #endif > - int ret =3D SYSCALL_CANCEL (mq_timedreceive_time64, mqdes, msg_ptr, > msg_len, > - msg_prio, abs_timeout); > =20 > -#ifndef __ASSUME_TIME64_SYSCALLS > - if (ret =3D=3D 0 || errno !=3D ENOSYS) > - return ret; > +#ifdef __ASSUME_TIME64_SYSCALLS > + return SYSCALL_CANCEL (mq_timedreceive_time64, mqdes, msg_ptr, > msg_len, > + msg_prio, abs_timeout); > +#else > + bool is32bit =3D abs_timeout !=3D NULL > + ? in_time_t_range (abs_timeout->tv_sec) : true; > + if (!is32bit) > + { > + int r =3D SYSCALL_CANCEL (mq_timedreceive_time64, mqdes, > msg_ptr, msg_len, > + msg_prio, abs_timeout); > + if (r =3D=3D 0 || errno !=3D ENOSYS) > + return r; > + __set_errno (EOVERFLOW); > + return -1; > + } > =20 > - struct timespec ts32; > + struct timespec ts32, *pts32 =3D NULL; > if (abs_timeout !=3D NULL) > { > - if (! in_time_t_range (abs_timeout->tv_sec)) > - { > - __set_errno (EOVERFLOW); > - return -1; > - } > - > ts32 =3D valid_timespec64_to_timespec (*abs_timeout); > + pts32 =3D &ts32; > } > =20 > - ret =3D SYSCALL_CANCEL (mq_timedreceive, mqdes, msg_ptr, msg_len, > msg_prio, > - abs_timeout !=3D NULL ? &ts32 : NULL); > + return SYSCALL_CANCEL (mq_timedreceive, mqdes, msg_ptr, msg_len, > msg_prio, > + pts32); > #endif > - > - return ret; > } > =20 > #if __TIMESIZE !=3D 64 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_/zFd_+D6acjyvIpN6ngr2wlh Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQEzBAEBCgAdFiEEgAyFJ+N6uu6+XupJAR8vZIA0zr0FAmDQQ1EACgkQAR8vZIA0 zr0AoQgAxh2gX0uSlPskc1ojQlaeY6hb0hEopOdmOBcDlCdOp7GOCOpMRqF1FVAV OuAWNKdgQhDCYyVEyjytqALZedf4YkR9kKTUTEvDRqaNOaskil0GNWQeWRYzixEt YMbHu8Z+lZt0Tvtuu7Y+C+YzjYFwdjOHdm00aKT16DaXQ1ZtuB4OI676Z/sZg2xD vT/X3On5D3WsqPgMG6zlBuuJo6vbxacx+5gG4xP4a+ug/NPveBFooIr0Oymhadee pxFuu3+5UJhoeCNSw0Y3jk1gloDXC+uzQ105H4z/fHkIBn6Stn1Y/Y04pXwoITaw z+O7HMGTvDPdbQ5FtEeunOlnSMix5w== =AjEx -----END PGP SIGNATURE----- --Sig_/zFd_+D6acjyvIpN6ngr2wlh--