y2038: linux: Provide __sched_rr_get_interval64 implementation

Message ID 20200108162248.24336-1-lukma@denx.de
State Committed
Commit b112f53e9d0fc85fc68aadd6442b00491d19830b
Headers

Commit Message

Lukasz Majewski Jan. 8, 2020, 4:22 p.m. UTC
  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
  

Comments

Lukasz Majewski Jan. 24, 2020, 4:38 p.m. UTC | #1
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.


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
  
Lukasz Majewski Jan. 30, 2020, 10:05 p.m. UTC | #2
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
  
Adhemerval Zanella Jan. 31, 2020, 9:09 p.m. UTC | #3
On 08/01/2020 13:22, Lukasz Majewski wrote:
> 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).

LGTM, thanks.

Reviewed-by: Adhemerval Zanella <adhemerval.zanella@linaro.org>

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

Ok.

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

Ok.

> +#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
> +}

Ok.

> +
> +#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)

Ok.

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

Ok.
  

Patch

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