Skip to content

Commit 48166e6

Browse files
committed
y2038: add 64-bit time_t syscalls to all 32-bit architectures
This adds 21 new system calls on each ABI that has 32-bit time_t today. All of these have the exact same semantics as their existing counterparts, and the new ones all have macro names that end in 'time64' for clarification. This gets us to the point of being able to safely use a C library that has 64-bit time_t in user space. There are still a couple of loose ends to tie up in various areas of the code, but this is the big one, and should be entirely uncontroversial at this point. In particular, there are four system calls (getitimer, setitimer, waitid, and getrusage) that don't have a 64-bit counterpart yet, but these can all be safely implemented in the C library by wrapping around the existing system calls because the 32-bit time_t they pass only counts elapsed time, not time since the epoch. They will be dealt with later. Signed-off-by: Arnd Bergmann <arnd@arndb.de> Acked-by: Heiko Carstens <heiko.carstens@de.ibm.com> Acked-by: Geert Uytterhoeven <geert@linux-m68k.org> Acked-by: Catalin Marinas <catalin.marinas@arm.com>
1 parent d33c577 commit 48166e6

File tree

19 files changed

+374
-2
lines changed

19 files changed

+374
-2
lines changed

arch/alpha/kernel/syscalls/syscall.tbl

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,3 +461,5 @@
461461
530 common getegid sys_getegid
462462
531 common geteuid sys_geteuid
463463
532 common getppid sys_getppid
464+
# all other architectures have common numbers for new syscall, alpha
465+
# is the exception.

arch/arm/tools/syscall.tbl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -416,3 +416,24 @@
416416
399 common io_pgetevents sys_io_pgetevents_time32
417417
400 common migrate_pages sys_migrate_pages
418418
401 common kexec_file_load sys_kexec_file_load
419+
# 402 is unused
420+
403 common clock_gettime64 sys_clock_gettime
421+
404 common clock_settime64 sys_clock_settime
422+
405 common clock_adjtime64 sys_clock_adjtime
423+
406 common clock_getres_time64 sys_clock_getres
424+
407 common clock_nanosleep_time64 sys_clock_nanosleep
425+
408 common timer_gettime64 sys_timer_gettime
426+
409 common timer_settime64 sys_timer_settime
427+
410 common timerfd_gettime64 sys_timerfd_gettime
428+
411 common timerfd_settime64 sys_timerfd_settime
429+
412 common utimensat_time64 sys_utimensat
430+
413 common pselect6_time64 sys_pselect6
431+
414 common ppoll_time64 sys_ppoll
432+
416 common io_pgetevents_time64 sys_io_pgetevents
433+
417 common recvmmsg_time64 sys_recvmmsg
434+
418 common mq_timedsend_time64 sys_mq_timedsend
435+
419 common mq_timedreceive_time64 sys_mq_timedreceive
436+
420 common semtimedop_time64 sys_semtimedop
437+
421 common rt_sigtimedwait_time64 sys_rt_sigtimedwait
438+
422 common futex_time64 sys_futex
439+
423 common sched_rr_get_interval_time64 sys_sched_rr_get_interval

arch/arm64/include/asm/unistd.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -44,7 +44,7 @@
4444
#define __ARM_NR_compat_set_tls (__ARM_NR_COMPAT_BASE + 5)
4545
#define __ARM_NR_COMPAT_END (__ARM_NR_COMPAT_BASE + 0x800)
4646

47-
#define __NR_compat_syscalls 402
47+
#define __NR_compat_syscalls 424
4848
#endif
4949

5050
#define __ARCH_WANT_SYS_CLONE

arch/arm64/include/asm/unistd32.h

Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -825,6 +825,47 @@ __SYSCALL(__NR_io_pgetevents, compat_sys_io_pgetevents)
825825
__SYSCALL(__NR_migrate_pages, compat_sys_migrate_pages)
826826
#define __NR_kexec_file_load 401
827827
__SYSCALL(__NR_kexec_file_load, sys_kexec_file_load)
828+
/* 402 is unused */
829+
#define __NR_clock_gettime64 403
830+
__SYSCALL(__NR_clock_gettime64, sys_clock_gettime)
831+
#define __NR_clock_settime64 404
832+
__SYSCALL(__NR_clock_settime64, sys_clock_settime)
833+
#define __NR_clock_adjtime64 405
834+
__SYSCALL(__NR_clock_adjtime64, sys_clock_adjtime)
835+
#define __NR_clock_getres_time64 406
836+
__SYSCALL(__NR_clock_getres_time64, sys_clock_getres)
837+
#define __NR_clock_nanosleep_time64 407
838+
__SYSCALL(__NR_clock_nanosleep_time64, sys_clock_nanosleep)
839+
#define __NR_timer_gettime64 408
840+
__SYSCALL(__NR_timer_gettime64, sys_timer_gettime)
841+
#define __NR_timer_settime64 409
842+
__SYSCALL(__NR_timer_settime64, sys_timer_settime)
843+
#define __NR_timerfd_gettime64 410
844+
__SYSCALL(__NR_timerfd_gettime64, sys_timerfd_gettime)
845+
#define __NR_timerfd_settime64 411
846+
__SYSCALL(__NR_timerfd_settime64, sys_timerfd_settime)
847+
#define __NR_utimensat_time64 412
848+
__SYSCALL(__NR_utimensat_time64, sys_utimensat)
849+
#define __NR_pselect6_time64 413
850+
__SYSCALL(__NR_pselect6_time64, compat_sys_pselect6_time64)
851+
#define __NR_ppoll_time64 414
852+
__SYSCALL(__NR_ppoll_time64, compat_sys_ppoll_time64)
853+
#define __NR_io_pgetevents_time64 416
854+
__SYSCALL(__NR_io_pgetevents_time64, sys_io_pgetevents)
855+
#define __NR_recvmmsg_time64 417
856+
__SYSCALL(__NR_recvmmsg_time64, compat_sys_recvmmsg_time64)
857+
#define __NR_mq_timedsend_time64 418
858+
__SYSCALL(__NR_mq_timedsend_time64, sys_mq_timedsend)
859+
#define __NR_mq_timedreceive_time64 419
860+
__SYSCALL(__NR_mq_timedreceive_time64, sys_mq_timedreceive)
861+
#define __NR_semtimedop_time64 420
862+
__SYSCALL(__NR_semtimedop_time64, sys_semtimedop)
863+
#define __NR_rt_sigtimedwait_time64 421
864+
__SYSCALL(__NR_rt_sigtimedwait_time64, compat_sys_rt_sigtimedwait_time64)
865+
#define __NR_futex_time64 422
866+
__SYSCALL(__NR_futex_time64, sys_futex)
867+
#define __NR_sched_rr_get_interval_time64 423
868+
__SYSCALL(__NR_sched_rr_get_interval_time64, sys_sched_rr_get_interval)
828869

829870
/*
830871
* Please add new compat syscalls above this comment and update

arch/ia64/kernel/syscalls/syscall.tbl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -343,3 +343,4 @@
343343
331 common pkey_alloc sys_pkey_alloc
344344
332 common pkey_free sys_pkey_free
345345
333 common rseq sys_rseq
346+
# 334 through 423 are reserved to sync up with other architectures

arch/m68k/kernel/syscalls/syscall.tbl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -403,3 +403,23 @@
403403
400 common msgsnd sys_msgsnd
404404
401 common msgrcv sys_msgrcv
405405
402 common msgctl sys_msgctl
406+
403 common clock_gettime64 sys_clock_gettime
407+
404 common clock_settime64 sys_clock_settime
408+
405 common clock_adjtime64 sys_clock_adjtime
409+
406 common clock_getres_time64 sys_clock_getres
410+
407 common clock_nanosleep_time64 sys_clock_nanosleep
411+
408 common timer_gettime64 sys_timer_gettime
412+
409 common timer_settime64 sys_timer_settime
413+
410 common timerfd_gettime64 sys_timerfd_gettime
414+
411 common timerfd_settime64 sys_timerfd_settime
415+
412 common utimensat_time64 sys_utimensat
416+
413 common pselect6_time64 sys_pselect6
417+
414 common ppoll_time64 sys_ppoll
418+
416 common io_pgetevents_time64 sys_io_pgetevents
419+
417 common recvmmsg_time64 sys_recvmmsg
420+
418 common mq_timedsend_time64 sys_mq_timedsend
421+
419 common mq_timedreceive_time64 sys_mq_timedreceive
422+
420 common semtimedop_time64 sys_semtimedop
423+
421 common rt_sigtimedwait_time64 sys_rt_sigtimedwait
424+
422 common futex_time64 sys_futex
425+
423 common sched_rr_get_interval_time64 sys_sched_rr_get_interval

arch/microblaze/kernel/syscalls/syscall.tbl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -408,3 +408,24 @@
408408
398 common statx sys_statx
409409
399 common io_pgetevents sys_io_pgetevents_time32
410410
400 common rseq sys_rseq
411+
# 401 and 402 are unused
412+
403 common clock_gettime64 sys_clock_gettime
413+
404 common clock_settime64 sys_clock_settime
414+
405 common clock_adjtime64 sys_clock_adjtime
415+
406 common clock_getres_time64 sys_clock_getres
416+
407 common clock_nanosleep_time64 sys_clock_nanosleep
417+
408 common timer_gettime64 sys_timer_gettime
418+
409 common timer_settime64 sys_timer_settime
419+
410 common timerfd_gettime64 sys_timerfd_gettime
420+
411 common timerfd_settime64 sys_timerfd_settime
421+
412 common utimensat_time64 sys_utimensat
422+
413 common pselect6_time64 sys_pselect6
423+
414 common ppoll_time64 sys_ppoll
424+
416 common io_pgetevents_time64 sys_io_pgetevents
425+
417 common recvmmsg_time64 sys_recvmmsg
426+
418 common mq_timedsend_time64 sys_mq_timedsend
427+
419 common mq_timedreceive_time64 sys_mq_timedreceive
428+
420 common semtimedop_time64 sys_semtimedop
429+
421 common rt_sigtimedwait_time64 sys_rt_sigtimedwait
430+
422 common futex_time64 sys_futex
431+
423 common sched_rr_get_interval_time64 sys_sched_rr_get_interval

arch/mips/kernel/syscalls/syscall_n32.tbl

Lines changed: 21 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -341,3 +341,24 @@
341341
330 n32 statx sys_statx
342342
331 n32 rseq sys_rseq
343343
332 n32 io_pgetevents compat_sys_io_pgetevents
344+
# 333 through 402 are unassigned to sync up with generic numbers
345+
403 n32 clock_gettime64 sys_clock_gettime
346+
404 n32 clock_settime64 sys_clock_settime
347+
405 n32 clock_adjtime64 sys_clock_adjtime
348+
406 n32 clock_getres_time64 sys_clock_getres
349+
407 n32 clock_nanosleep_time64 sys_clock_nanosleep
350+
408 n32 timer_gettime64 sys_timer_gettime
351+
409 n32 timer_settime64 sys_timer_settime
352+
410 n32 timerfd_gettime64 sys_timerfd_gettime
353+
411 n32 timerfd_settime64 sys_timerfd_settime
354+
412 n32 utimensat_time64 sys_utimensat
355+
413 n32 pselect6_time64 compat_sys_pselect6_time64
356+
414 n32 ppoll_time64 compat_sys_ppoll_time64
357+
416 n32 io_pgetevents_time64 sys_io_pgetevents
358+
417 n32 recvmmsg_time64 compat_sys_recvmmsg_time64
359+
418 n32 mq_timedsend_time64 sys_mq_timedsend
360+
419 n32 mq_timedreceive_time64 sys_mq_timedreceive
361+
420 n32 semtimedop_time64 sys_semtimedop
362+
421 n32 rt_sigtimedwait_time64 compat_sys_rt_sigtimedwait_time64
363+
422 n32 futex_time64 sys_futex
364+
423 n32 sched_rr_get_interval_time64 sys_sched_rr_get_interval

arch/mips/kernel/syscalls/syscall_n64.tbl

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -337,3 +337,4 @@
337337
326 n64 statx sys_statx
338338
327 n64 rseq sys_rseq
339339
328 n64 io_pgetevents sys_io_pgetevents
340+
# 329 through 423 are reserved to sync up with other architectures

arch/mips/kernel/syscalls/syscall_o32.tbl

Lines changed: 20 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -391,3 +391,23 @@
391391
400 o32 msgsnd sys_msgsnd compat_sys_msgsnd
392392
401 o32 msgrcv sys_msgrcv compat_sys_msgrcv
393393
402 o32 msgctl sys_msgctl compat_sys_msgctl
394+
403 o32 clock_gettime64 sys_clock_gettime sys_clock_gettime
395+
404 o32 clock_settime64 sys_clock_settime sys_clock_settime
396+
405 o32 clock_adjtime64 sys_clock_adjtime sys_clock_adjtime
397+
406 o32 clock_getres_time64 sys_clock_getres sys_clock_getres
398+
407 o32 clock_nanosleep_time64 sys_clock_nanosleep sys_clock_nanosleep
399+
408 o32 timer_gettime64 sys_timer_gettime sys_timer_gettime
400+
409 o32 timer_settime64 sys_timer_settime sys_timer_settime
401+
410 o32 timerfd_gettime64 sys_timerfd_gettime sys_timerfd_gettime
402+
411 o32 timerfd_settime64 sys_timerfd_settime sys_timerfd_settime
403+
412 o32 utimensat_time64 sys_utimensat sys_utimensat
404+
413 o32 pselect6_time64 sys_pselect6 compat_sys_pselect6_time64
405+
414 o32 ppoll_time64 sys_ppoll compat_sys_ppoll_time64
406+
416 o32 io_pgetevents_time64 sys_io_pgetevents sys_io_pgetevents
407+
417 o32 recvmmsg_time64 sys_recvmmsg compat_sys_recvmmsg_time64
408+
418 o32 mq_timedsend_time64 sys_mq_timedsend sys_mq_timedsend
409+
419 o32 mq_timedreceive_time64 sys_mq_timedreceive sys_mq_timedreceive
410+
420 o32 semtimedop_time64 sys_semtimedop sys_semtimedop
411+
421 o32 rt_sigtimedwait_time64 sys_rt_sigtimedwait compat_sys_rt_sigtimedwait_time64
412+
422 o32 futex_time64 sys_futex sys_futex
413+
423 o32 sched_rr_get_interval_time64 sys_sched_rr_get_interval sys_sched_rr_get_interval

0 commit comments

Comments
 (0)