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 508FD1F463 for ; Thu, 2 Jan 2020 11:12:19 +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=BTxEd cvJ+JV4UbZ0+cuvM8PJgV62WW1/GdDN0KokcCBgyoDC7+halKI/O7jlodtX+Z9lX Z/hUoNe1CmBRcULNNUMjU+K9FEakOoblsBPT/jCo+8mWe8Cd74n/bNGJUulsUH/c HKuS9Iz9KjgZBqzjN63X8aYnicEw/MDyDc3nhU= 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=FyTXFxBa7Aj rhgUCSk8/cFWFCdU=; b=rt9dSd8CywupnlfcngPPgn4TkWdxF/2ahH3alWk+7gR D/v512PQT2VULI+ROm6zz9JVNy37AjUY+qbTF3GVgoBRX+4Aua3uj0GjnI0l4kfU 09h5vaNIkxHEVcjhaODUUnqJl7RGdkpw5nePcNWYGF77HlUF5SOhVhbyDLnOvGDI = Received: (qmail 19643 invoked by alias); 2 Jan 2020 11:11:56 -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 19567 invoked by uid 89); 2 Jan 2020 11:11:55 -0000 Authentication-Results: sourceware.org; auth=none X-HELO: mail-out.m-online.net Date: Thu, 2 Jan 2020 12:11:46 +0100 From: Lukasz Majewski To: Joseph Myers , Paul Eggert , Adhemerval Zanella , Andreas Schwab Cc: Alistair Francis , Alistair Francis , GNU C Library , Siddhesh Poyarekar , Florian Weimer , Florian Weimer , Zack Weinberg , Carlos O'Donell Subject: Re: [PATCH v3 2/2] y2038: linux: Provide __timerfd_settime64 implementation Message-ID: <20200102121146.0b867ed5@jawa> In-Reply-To: <20191217155858.28706-2-lukma@denx.de> References: <20191217155858.28706-1-lukma@denx.de> <20191217155858.28706-2-lukma@denx.de> MIME-Version: 1.0 Content-Type: multipart/signed; micalg=pgp-sha512; boundary="Sig_/S2PlQG4X/Ylk1vaLrjM/fAi"; protocol="application/pgp-signature" --Sig_/S2PlQG4X/Ylk1vaLrjM/fAi Content-Type: text/plain; charset=US-ASCII Content-Transfer-Encoding: quoted-printable Dear Community, > This patch replaces auto generated wrapper (as described in > sysdeps/unix/sysv/linux/syscalls.list) for timerfd_settime with one > which adds extra support for reading and writing from Linux kernel 64 > bit time values on machines with __TIMESIZE !=3D 64. > There is no functional change for archs already supporting 64 bit > time ABI. >=20 > This patch is conceptually identical to timer_settime conversion > already done in sysdeps/unix/sysv/linux/timer_settime.c. > Please refer to corresponding commit message for detailed description > of introduced functions and the testing procedure. >=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_settime64 as the fd > correctness check is already done in Linux kernel > - Add single descriptive comment line to provide concise explanation > of the code > --- > include/time.h | 5 ++ > sysdeps/unix/sysv/linux/Makefile | 2 +- > sysdeps/unix/sysv/linux/syscalls.list | 1 - > sysdeps/unix/sysv/linux/timerfd_settime.c | 87 > +++++++++++++++++++++++ 4 files changed, 93 insertions(+), 2 > deletions(-) create mode 100644 > sysdeps/unix/sysv/linux/timerfd_settime.c >=20 > diff --git a/include/time.h b/include/time.h > index eb5082b4d7..f23bfea737 100644 > --- a/include/time.h > +++ b/include/time.h > @@ -191,11 +191,16 @@ libc_hidden_proto (__timerfd_gettime64); > =20 > #if __TIMESIZE =3D=3D 64 > # define __timer_settime64 __timer_settime > +# define __timerfd_settime64 __timerfd_settime > #else > extern int __timer_settime64 (timer_t timerid, int flags, > const struct __itimerspec64 *value, > struct __itimerspec64 *ovalue); > +extern int __timerfd_settime64 (int fd, int flags, > + const struct __itimerspec64 *value, > + struct __itimerspec64 *ovalue); > libc_hidden_proto (__timer_settime64); > +libc_hidden_proto (__timerfd_settime64); > #endif > =20 > /* Compute the `struct tm' representation of T, > diff --git a/sysdeps/unix/sysv/linux/Makefile > b/sysdeps/unix/sysv/linux/Makefile index e599fcec23..70cf06bf36 100644 > --- a/sysdeps/unix/sysv/linux/Makefile > +++ b/sysdeps/unix/sysv/linux/Makefile > @@ -19,7 +19,7 @@ sysdep_routines +=3D adjtimex clone umount umount2 > readahead \ eventfd eventfd_read eventfd_write prlimit \ > personality epoll_wait tee vmsplice splice \ > open_by_handle_at mlock2 pkey_mprotect pkey_set > pkey_get \ > - timerfd_gettime > + timerfd_gettime timerfd_settime > =20 > CFLAGS-gethostid.c =3D -fexceptions > CFLAGS-tee.c =3D -fexceptions -fasynchronous-unwind-tables > diff --git a/sysdeps/unix/sysv/linux/syscalls.list > b/sysdeps/unix/sysv/linux/syscalls.list index 385007c662..16c673fc1a > 100644 --- a/sysdeps/unix/sysv/linux/syscalls.list > +++ b/sysdeps/unix/sysv/linux/syscalls.list > @@ -94,7 +94,6 @@ fremovexattr - fremovexattr > i:is fremovexattr mq_setattr - > mq_getsetattr i:ipp mq_setattr=20 > timerfd_create EXTRA timerfd_create i:ii > timerfd_create -timerfd_settime EXTRA > timerfd_settime i:iipp timerfd_settime=20 > fanotify_init EXTRA fanotify_init i:ii > fanotify_init=20 > diff --git a/sysdeps/unix/sysv/linux/timerfd_settime.c > b/sysdeps/unix/sysv/linux/timerfd_settime.c new file mode 100644 > index 0000000000..5ebd2bd1a7 > --- /dev/null > +++ b/sysdeps/unix/sysv/linux/timerfd_settime.c > @@ -0,0 +1,87 @@ > +/* timerfd_settime -- start or stop the timer referred to by file > descriptor. > + Copyright (C) 2019 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_settime64 (int fd, int flags, const struct __itimerspec64 > *value, > + struct __itimerspec64 *ovalue) > +{ > +#ifdef __ASSUME_TIME64_SYSCALLS > +# ifndef __NR_timerfd_settime64 > +# define __NR_timerfd_settime64 __NR_timerfd_settime > +# endif > + return INLINE_SYSCALL_CALL (timerfd_settime64, fd, flags, value, > ovalue); +#else > +# ifdef __NR_timerfd_settime64 > + int ret =3D INLINE_SYSCALL_CALL (timerfd_settime64, fd, flags, > value, ovalue); > + if (ret =3D=3D 0 || errno !=3D ENOSYS) > + return ret; > +# endif > + struct itimerspec its32, oits32; > + > + if (! in_time_t_range ((value->it_value).tv_sec) > + || ! in_time_t_range ((value->it_interval).tv_sec)) > + { > + __set_errno (EOVERFLOW); > + return -1; > + } > + > + its32.it_interval =3D valid_timespec64_to_timespec > (value->it_interval); > + its32.it_value =3D valid_timespec64_to_timespec (value->it_value); > + > + int retval =3D INLINE_SYSCALL_CALL (timerfd_settime, fd, flags, > + &its32, ovalue ? &oits32 : NULL); > + if (retval =3D=3D 0 && ovalue) > + { > + ovalue->it_interval =3D valid_timespec_to_timespec64 > (oits32.it_interval); > + ovalue->it_value =3D valid_timespec_to_timespec64 > (oits32.it_value); > + } > + > + return retval; > +#endif > +} > + > +#if __TIMESIZE !=3D 64 > +libc_hidden_def (__timerfd_settime64) > + > +int > +__timerfd_settime (int fd, int flags, const struct itimerspec *value, > + struct itimerspec *ovalue) > +{ > + struct __itimerspec64 its64, oits64; > + int retval; > + > + its64.it_interval =3D valid_timespec_to_timespec64 > (value->it_interval); > + its64.it_value =3D valid_timespec_to_timespec64 (value->it_value); > + > + retval =3D __timerfd_settime64 (fd, flags, &its64, ovalue ? &oits64 > : NULL); > + if (retval =3D=3D 0 && ovalue) > + { > + ovalue->it_interval =3D valid_timespec64_to_timespec > (oits64.it_interval); > + ovalue->it_value =3D valid_timespec64_to_timespec > (oits64.it_value); > + } > + > + return retval; > +} > +#endif > +strong_alias (__timerfd_settime, timerfd_settime) Are there any more comments regarding this patch? (Yes, I will need to update the year from 2019 to 2020, but this is rather a cosmetic change). 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_/S2PlQG4X/Ylk1vaLrjM/fAi Content-Type: application/pgp-signature Content-Description: OpenPGP digital signature -----BEGIN PGP SIGNATURE----- iQEzBAEBCgAdFiEEgAyFJ+N6uu6+XupJAR8vZIA0zr0FAl4Nz/IACgkQAR8vZIA0 zr2rOQgA2CZRHTaKhDlxgsp6DeJ8Bx00l9bECOwdMt+ZIXnbb+w9QI7/UFAbTB1l OB+hsxLeJ/NQyOrIa7BIYc23bxen3iu+BA3A5I9FZo6BJNOTYrv+KKUOfCXLLVLI 1oi/3rR8vhwpyfsDRykUT6yimGZoq9S/DmWfQvjDKfHi7RGBVJ8X9sJ2ot+EmmWx 6+JMf6deNsnO0GxGmIumCtOf+zZGCmodZyZRFddZPxv0RJUtn1euYRZqLVnpDFR3 C44BS4g7EvyfghpmiuWw8ftOWu4/I54UbHeCIJswK7EHbEVDpSVXr3saBsFSEeyE wXOKPNAgXhkYaBCUoNwfBRm6+mUHLQ== =KYJt -----END PGP SIGNATURE----- --Sig_/S2PlQG4X/Ylk1vaLrjM/fAi--