y2038: linux: Provide __sched_rr_get_interval64 implementation

Message ID 20200108162248.24336-1-lukma@denx.de
State New
Headers show
Series
  • y2038: linux: Provide __sched_rr_get_interval64 implementation
Related show

Commit Message

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

-- 
2.20.1

Comments

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