This is the mail archive of the libc-alpha@sourceware.org mailing list for the glibc project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

Re: [PATCH] y2038: linux: Provide __sched_rr_get_interval64 implementation


Dear All,

> Dear All,
> 
> > This patch replaces auto generated wrapper (as described in
> > sysdeps/unix/sysv/linux/syscalls.list) for sched_rr_get_interval
> > with one which adds extra support for reading 64 bit time values on
> > machines with __TIMESIZE != 64.
> > There is no functional change for architectures already supporting
> > 64 bit time ABI.
> > 
> > The sched_rr_get_interval declaration in ./include/sched.h is not
> > followed by corresponding libc_hidden_proto(), so it has been
> > assumed that newly introduced syscall wrapper doesn't require
> > libc_hidden_def() (which has been added by template used with auto
> > generation script).
> > 
> > Moreover, the code for building sched_rr_gi.c file is already placed
> > in ./posix/Makefiles, so there was no need to add it elsewhere.
> > 
> > Performed tests and validation are the same as for timer_gettime()
> > conversion (sysdeps/unix/sysv/linux/timer_gettime.c).
> > ---
> >  include/time.h                        |  7 +++
> >  sysdeps/unix/sysv/linux/sched_rr_gi.c | 73
> > +++++++++++++++++++++++++++ sysdeps/unix/sysv/linux/syscalls.list |
> > 1 - 3 files changed, 80 insertions(+), 1 deletion(-)
> >  create mode 100644 sysdeps/unix/sysv/linux/sched_rr_gi.c
> > 
> > diff --git a/include/time.h b/include/time.h
> > index f23bfea737..558923274a 100644
> > --- a/include/time.h
> > +++ b/include/time.h
> > @@ -203,6 +203,13 @@ libc_hidden_proto (__timer_settime64);
> >  libc_hidden_proto (__timerfd_settime64);
> >  #endif
> >  
> > +#if __TIMESIZE == 64
> > +# define __sched_rr_get_interval64 __sched_rr_get_interval
> > +#else
> > +extern int __sched_rr_get_interval64 (pid_t pid, struct
> > __timespec64 *tp); +libc_hidden_proto (__sched_rr_get_interval64);
> > +#endif
> > +
> >  /* Compute the `struct tm' representation of T,
> >     offset OFFSET seconds east of UTC,
> >     and store year, yday, mon, mday, wday, hour, min, sec into *TP.
> > diff --git a/sysdeps/unix/sysv/linux/sched_rr_gi.c
> > b/sysdeps/unix/sysv/linux/sched_rr_gi.c new file mode 100644
> > index 0000000000..3d7b484591
> > --- /dev/null
> > +++ b/sysdeps/unix/sysv/linux/sched_rr_gi.c
> > @@ -0,0 +1,73 @@
> > +/* sched_rr_get_interval -- get the scheduler's SCHED_RR policy
> > time interval.
> > +   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 <https://www.gnu.org/licenses/>.  */
> > +
> > +#include <errno.h>
> > +#include <stdlib.h>
> > +#include <time.h>
> > +#include <sysdep.h>
> > +#include <kernel-features.h>
> > +
> > +int
> > +__sched_rr_get_interval64 (pid_t pid, struct __timespec64 *tp)
> > +{
> > +#ifdef __ASSUME_TIME64_SYSCALLS
> > +# ifndef __NR_sched_rr_get_interval_time64
> > +#  define __NR_sched_rr_get_interval_time64
> > __NR_sched_rr_get_interval +# endif
> > +  return INLINE_SYSCALL_CALL (sched_rr_get_interval_time64, pid,
> > tp); +#else
> > +# ifdef __NR_sched_rr_get_interval_time64
> > +  int ret = INLINE_SYSCALL_CALL (sched_rr_get_interval_time64, pid,
> > tp);
> > +  if (ret == 0 || errno != ENOSYS)
> > +    return ret;
> > +# endif
> > +  struct timespec tp32;
> > +  int retval = INLINE_SYSCALL_CALL (sched_rr_get_interval, pid,
> > &tp32);
> > +  if (retval == 0)
> > +    *tp = valid_timespec_to_timespec64 (tp32);
> > +
> > +  return retval;
> > +#endif
> > +}
> > +
> > +#if __TIMESIZE != 64
> > +libc_hidden_def (__sched_rr_get_interval64)
> > +
> > +int
> > +__sched_rr_get_interval (pid_t pid, struct timespec *tp)
> > +{
> > +  int ret;
> > +  struct __timespec64 tp64;
> > +
> > +  ret = __sched_rr_get_interval64 (pid, &tp64);
> > +
> > +  if (ret == 0)
> > +    {
> > +      if (! in_time_t_range (tp64.tv_sec))
> > +        {
> > +          __set_errno (EOVERFLOW);
> > +          return -1;
> > +        }
> > +
> > +      *tp = valid_timespec64_to_timespec (tp64);
> > +    }
> > +
> > +  return ret;
> > +}
> > +#endif
> > +strong_alias (__sched_rr_get_interval, sched_rr_get_interval)
> > diff --git a/sysdeps/unix/sysv/linux/syscalls.list
> > b/sysdeps/unix/sysv/linux/syscalls.list index 1fa546f231..5d65ed23e0
> > 100644 --- a/sysdeps/unix/sysv/linux/syscalls.list
> > +++ b/sysdeps/unix/sysv/linux/syscalls.list
> > @@ -51,7 +51,6 @@ sched_getp	-	sched_getparam
> > i:ip	__sched_getparam	sched_getparam sched_gets
> > -	sched_getscheduler	i:i
> > __sched_getscheduler	sched_getscheduler sched_primax
> > -	sched_get_priority_max	i:i
> > __sched_get_priority_max	sched_get_priority_max
> > sched_primin	-	sched_get_priority_min	i:i
> > __sched_get_priority_min	sched_get_priority_min
> > -sched_rr_gi	-	sched_rr_get_interval	i:ip
> > __sched_rr_get_interval	sched_rr_get_interval
> > sched_setp	-	sched_setparam	i:ip
> > __sched_setparam	sched_setparam sched_sets	-
> > sched_setscheduler	i:iip	__sched_setscheduler
> > sched_setscheduler sched_yield	-	sched_yield
> > i:	__sched_yield	sched_yield  
> 
> Gentle ping for review.

Gentle ping for review of this patch.

> 
> 
> 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




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

Attachment: pgpTzRxICARjd.pgp
Description: OpenPGP digital signature


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]