From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on dcvr.yhbt.net X-Spam-Level: X-Spam-ASN: AS31976 209.132.180.0/23 X-Spam-Status: No, score=-3.9 required=3.0 tests=AWL,BAYES_00,DKIM_SIGNED, DKIM_VALID,DKIM_VALID_EF,HEADER_FROM_DIFFERENT_DOMAINS, MAILING_LIST_MULTI,RCVD_IN_DNSWL_MED,RCVD_IN_MSPIKE_H3, RCVD_IN_MSPIKE_WL,SPF_HELO_PASS,SPF_PASS shortcircuit=no autolearn=ham autolearn_force=no version=3.4.2 Received: from sourceware.org (server1.sourceware.org [209.132.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by dcvr.yhbt.net (Postfix) with ESMTPS id E25491F463 for ; Tue, 7 Jan 2020 09:28:11 +0000 (UTC) DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:date:from:to:cc:subject:message-id:in-reply-to :references:mime-version:content-type; q=dns; s=default; b=QNBCR /87zpBuMMkcodok4xfrkwOlquJuSWloXZr4sd6Y2J42AL79nhGbTBl2uLIvlz7rO JxRxIOmzHt2TV4IRVf1TSz4S40OxL1f1/z5E9kYkfTodjRDlKQjl5InnEyxolJyq qPuwldrVY7r1fMKT/ryHcqt1GlXSUXxmQzCcOM= DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id :list-unsubscribe:list-subscribe:list-archive:list-post :list-help:sender:date:from:to:cc:subject:message-id:in-reply-to :references:mime-version:content-type; s=default; bh=tHyGGWFbyqL FedWtPC4AMSwk0Dw=; b=G0W4xJ/uHXPoYhl1OeKzCo7tcb554b3mz4hWlh83Ati BRVJu/cxWko42Z0UPhvZbavgA5zE6AoNBv8O+oUp89wMTFIxmWSBaNIukzmEdQn3 2yBLMz/xBcQqctsTiU6k1P/e+HcposIE2QkMDA0QXhL2Z4Z167qHCdtAndJESZck = Received: (qmail 10358 invoked by alias); 7 Jan 2020 09:28:09 -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 Received: (qmail 10349 invoked by uid 89); 7 Jan 2020 09:28:09 -0000 Authentication-Results: sourceware.org; auth=none X-HELO: mail-out.m-online.net Date: Tue, 7 Jan 2020 10:27:52 +0100 From: Lukasz Majewski To: Adhemerval Zanella Cc: Joseph Myers , Paul Eggert , Andreas Schwab , Alistair Francis , Alistair Francis , GNU C Library , Siddhesh Poyarekar , Florian Weimer , Florian Weimer , Zack Weinberg , Carlos O'Donell Subject: Re: [PATCH v4 1/2] y2038: linux: Provide __timerfd_gettime64 implementation Message-ID: <20200107102752.396f7f6f@jawa> In-Reply-To: References: <20200106121742.1628-1-lukma@denx.de> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; boundary="Sig_/4m9Sv8=+RH7+UZmO7SV2T6Z"; protocol="application/pgp-signature" --Sig_/4m9Sv8=+RH7+UZmO7SV2T6Z Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Hi Adhemerval, > On 06/01/2020 09:17, Lukasz Majewski wrote: > > This patch replaces auto generated wrapper (as described in > > sysdeps/unix/sysv/linux/syscalls.list) for timerfd_gettime with one > > which adds extra support for reading 64 bit time values on machines > > with __TIMESIZE !=3D 64. > > There is no functional change for architectures already supporting > > 64 bit time ABI. > >=20 > > This patch is conceptually identical to timer_gettime conversion > > already done in sysdeps/unix/sysv/linux/timer_gettime.c. > > Please refer to corresponding commit message for detailed > > description of introduced functions and the testing procedure. > >=20 > > --- > > Changes for v4: > > - Update date from 2019 to 2020 > >=20 > > Changes for v3: > > - Add missing libc_hidden_def() > >=20 > > Changes for v2: > > - Remove "Contributed by" from the file header > > - Remove early check for (fd < 0) in __timerfd_gettime64 as the fd > > correctness check is already done in Linux kernel > > - Add single descriptive comment line to provide concise explanation > > of the code =20 >=20 > LGTM when 2.32 opens, thanks. Ok. Now we do have the "freeze" (fixing period) for 2.31. >=20 > Reviewed-by: Adhemerval Zanella >=20 > > --- > > include/time.h | 3 + > > sysdeps/unix/sysv/linux/Makefile | 3 +- > > sysdeps/unix/sysv/linux/syscalls.list | 1 - > > sysdeps/unix/sysv/linux/timerfd_gettime.c | 68 > > +++++++++++++++++++++++ 4 files changed, 73 insertions(+), 2 > > deletions(-) create mode 100644 > > sysdeps/unix/sysv/linux/timerfd_gettime.c > >=20 > > diff --git a/include/time.h b/include/time.h > > index e5e8246eac..eb5082b4d7 100644 > > --- a/include/time.h > > +++ b/include/time.h > > @@ -181,9 +181,12 @@ libc_hidden_proto (__futimens64); > > =20 > > #if __TIMESIZE =3D=3D 64 > > # define __timer_gettime64 __timer_gettime > > +# define __timerfd_gettime64 __timerfd_gettime > > #else > > extern int __timer_gettime64 (timer_t timerid, struct > > __itimerspec64 *value); +extern int __timerfd_gettime64 (int fd, > > struct __itimerspec64 *value); libc_hidden_proto > > (__timer_gettime64); +libc_hidden_proto (__timerfd_gettime64); > > #endif > > =20 > > #if __TIMESIZE =3D=3D 64 =20 >=20 > Ok. >=20 > > diff --git a/sysdeps/unix/sysv/linux/Makefile > > b/sysdeps/unix/sysv/linux/Makefile index f12b7b1a2d..74923740b9 > > 100644 --- a/sysdeps/unix/sysv/linux/Makefile > > +++ b/sysdeps/unix/sysv/linux/Makefile > > @@ -60,7 +60,8 @@ sysdep_routines +=3D adjtimex clone umount umount2 > > readahead \ setfsuid setfsgid epoll_pwait signalfd \ > > eventfd eventfd_read eventfd_write prlimit \ > > personality epoll_wait tee vmsplice splice \ > > - open_by_handle_at mlock2 pkey_mprotect pkey_set > > pkey_get > > + open_by_handle_at mlock2 pkey_mprotect pkey_set > > pkey_get \ > > + timerfd_gettime > > =20 > > CFLAGS-gethostid.c =3D -fexceptions > > CFLAGS-tee.c =3D -fexceptions -fasynchronous-unwind-tables =20 >=20 > Ok. >=20 > > diff --git a/sysdeps/unix/sysv/linux/syscalls.list > > b/sysdeps/unix/sysv/linux/syscalls.list index > > 5f1352ad43..adb9055ce2 100644 --- > > a/sysdeps/unix/sysv/linux/syscalls.list +++ > > b/sysdeps/unix/sysv/linux/syscalls.list @@ -94,7 +94,6 @@ > > mq_setattr - mq_getsetattr i:ipp > > mq_setattr timerfd_create EXTRA timerfd_create > > i:ii timerfd_create timerfd_settime EXTRA > > timerfd_settime i:iipp timerfd_settime > > -timerfd_gettime EXTRA timerfd_gettime > > i:ip timerfd_gettime fanotify_init EXTRA > > fanotify_init i:ii fanotify_init=20 >=20 > Ok. >=20 > > diff --git a/sysdeps/unix/sysv/linux/timerfd_gettime.c > > b/sysdeps/unix/sysv/linux/timerfd_gettime.c new file mode 100644 > > index 0000000000..7d09eeb11a > > --- /dev/null > > +++ b/sysdeps/unix/sysv/linux/timerfd_gettime.c > > @@ -0,0 +1,68 @@ > > +/* timerfd_gettime -- get the timer setting referred to by file > > descriptor. > > + Copyright (C) 2020 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; see the file COPYING.LIB. > > If > > + not, see . */ > > + > > +#include > > +#include > > +#include > > +#include > > +#include > > + > > +int > > +__timerfd_gettime64 (int fd, struct __itimerspec64 *value) > > +{ > > +#ifdef __ASSUME_TIME64_SYSCALLS > > +# ifndef __NR_timerfd_gettime64 > > +# define __NR_timerfd_gettime64 __NR_timerfd_gettime > > +# endif > > + return INLINE_SYSCALL_CALL (timerfd_gettime64, fd, value); > > +#else > > +# ifdef __NR_timerfd_gettime64 > > + int ret =3D INLINE_SYSCALL_CALL (timerfd_gettime64, fd, value); > > + if (ret =3D=3D 0 || errno !=3D ENOSYS) > > + return ret; > > +# endif =20 >=20 > Ok.=20 >=20 > As a side note, now that arch-syscall patch is upstream should we > assume that for !__ASSUME_TIME64_SYSCALLS the __NR_timerfd_gettime64 > should be defined (meaning that Linux supports time64 for all 32-bit > architectures)? Only Linux version >=3D 5.1 supports 64 bit time on archs with __WORDSIZE =3D 32. I do guess (but I may be wrong here) that the arch-syscall is supposed to reflect the exact syscalls provided by kernel headers used for building (to help with validation of Y2038 patches). >=20 > > + struct itimerspec its32; > > + int retval =3D INLINE_SYSCALL_CALL (timerfd_gettime, fd, &its32); > > + if (retval =3D=3D 0) > > + { > > + value->it_interval =3D valid_timespec_to_timespec64 > > (its32.it_interval); > > + value->it_value =3D valid_timespec_to_timespec64 > > (its32.it_value); > > + } > > + > > + return retval; > > +#endif > > +} =20 >=20 >=20 > Ok. >=20 > > + > > +#if __TIMESIZE !=3D 64 > > +libc_hidden_def (__timerfd_gettime64) =20 >=20 > Ok. >=20 > As a side note, we should fix it on clock_{get,set}time to add the > missing libc_hidden_def. The clock_gettime already has libc_hidden_def. The difference is that we use some compatibility code (after moving clock_gettime from librt to libc) instead of strong_alias (as it mimics the behavior from auto generated syscall wrapper). >=20 > > + > > +int > > +__timerfd_gettime (int fd, struct itimerspec *value) > > +{ > > + struct __itimerspec64 its64; > > + int retval =3D __timerfd_gettime64 (fd, &its64); > > + if (retval =3D=3D 0) > > + { > > + value->it_interval =3D valid_timespec64_to_timespec > > (its64.it_interval); > > + value->it_value =3D valid_timespec64_to_timespec > > (its64.it_value); > > + } > > + > > + return retval; > > +} > > +#endif > > +strong_alias (__timerfd_gettime, timerfd_gettime) > > =20 >=20 > Ok. Thanks for the review. 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_/4m9Sv8=+RH7+UZmO7SV2T6Z Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQEzBAEBCgAdFiEEgAyFJ+N6uu6+XupJAR8vZIA0zr0FAl4UTxkACgkQAR8vZIA0 zr1NCwf+Lmlx9hk6yoKYjXdFBcEVafSoXN7t+J/T0Gm6LhW5tP9HRNGM2g1rXwBc W9mD2Rfq3FDXi2n/ejIv6YU+uskHW6V4ajTSAqb5asOYoQtZQ/vD45AFXgsxQhyZ RqWaU2jS+Bli9qNP1tn9aqOkJ4ozmm7iLAh/oxPSs/geBRRRcMasMBfLKdRnu1EK FErRl9/HWKYbYF0KK+m+/icnmWb6i8TXD1rjlCs2R4OYtbfdKk3PXkH3BbfQIpdM HVIBu8zEZs1fyTqJMtENHAXinlRfF27/EXzzu7d8TdwI/LrDAjBRrGbx/zVh9x2Z yhfjI9/pnLKZ7qlgkFYscuIlNsXchA== =V8Ty -----END PGP SIGNATURE----- --Sig_/4m9Sv8=+RH7+UZmO7SV2T6Z--