Source-Changes-HG archive

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index][Old Index]

[src/trunk]: src/sys/compat/linux32/common Add the POSIX timer syscalls (time...



details:   https://anonhg.NetBSD.org/src/rev/561b90a6d7ff
branches:  trunk
changeset: 1023642:561b90a6d7ff
user:      thorpej <thorpej%NetBSD.org@localhost>
date:      Sun Sep 19 23:01:49 2021 +0000

description:
Add the POSIX timer syscalls (timer_create(), timer_settime(), timer_gettime(),
timer_getoverrun(), and timer_delete()) to COMPAT_LINUX and COMPAT_LINUX32.

diffstat:

 sys/compat/linux/arch/alpha/syscalls.master   |   16 +-
 sys/compat/linux/arch/amd64/syscalls.master   |   16 +-
 sys/compat/linux/arch/arm/syscalls.master     |   16 +-
 sys/compat/linux/arch/i386/syscalls.master    |   16 +-
 sys/compat/linux/arch/m68k/syscalls.master    |   16 +-
 sys/compat/linux/arch/mips/syscalls.master    |   16 +-
 sys/compat/linux/arch/powerpc/syscalls.master |   16 +-
 sys/compat/linux/common/linux_sched.h         |   33 ++++-
 sys/compat/linux/common/linux_time.c          |  175 ++++++++++++++++++++++++-
 sys/compat/linux32/arch/amd64/syscalls.master |   16 +-
 sys/compat/linux32/common/linux32_sched.h     |   19 ++-
 sys/compat/linux32/common/linux32_time.c      |  122 +++++++++++++++++-
 12 files changed, 402 insertions(+), 75 deletions(-)

diffs (truncated from 740 to 300 lines):

diff -r 14aaa3943d3a -r 561b90a6d7ff sys/compat/linux/arch/alpha/syscalls.master
--- a/sys/compat/linux/arch/alpha/syscalls.master       Sun Sep 19 22:32:45 2021 +0000
+++ b/sys/compat/linux/arch/alpha/syscalls.master       Sun Sep 19 23:01:49 2021 +0000
@@ -1,4 +1,4 @@
-       $NetBSD: syscalls.master,v 1.97 2020/04/26 18:53:32 thorpej Exp $
+       $NetBSD: syscalls.master,v 1.98 2021/09/19 23:01:49 thorpej Exp $
 ;
 ;      @(#)syscalls.master     8.1 (Berkeley) 7/19/93
 
@@ -663,11 +663,15 @@
 412    UNIMPL          restart_syscall
 413    STD             { int|linux_sys||fadvise64(int fd, off_t offset, \
                            size_t len, int advice); }
-414    UNIMPL          timer_create
-415    UNIMPL          timer_settime
-416    UNIMPL          timer_gettime
-417    UNIMPL          timer_getoverrun
-418    UNIMPL          timer_delete
+414    STD             { int|linux_sys||timer_create(clockid_t clockid, \
+                           struct linux_sigevent *evp, timer_t *timerid); }
+415    STD             { int|linux_sys||timer_settime(timer_t timerid, \
+                           int flags, const struct linux_itimerspec *tim, \
+                           struct linux_itimerspec *otim); }
+416    STD             { int|linux_sys||timer_gettime(timer_t timerid, \
+                           struct linux_itimerspec *tim); }
+417    NOARGS          { int|sys||timer_getoverrun(timer_t timerid); }
+418    NOARGS          { int|sys||timer_delete(timer_t timerid); }
 419    STD             { int|linux_sys||clock_settime(clockid_t which, \
                            struct linux_timespec *tp); }
 420    STD             { int|linux_sys||clock_gettime(clockid_t which, \
diff -r 14aaa3943d3a -r 561b90a6d7ff sys/compat/linux/arch/amd64/syscalls.master
--- a/sys/compat/linux/arch/amd64/syscalls.master       Sun Sep 19 22:32:45 2021 +0000
+++ b/sys/compat/linux/arch/amd64/syscalls.master       Sun Sep 19 23:01:49 2021 +0000
@@ -1,4 +1,4 @@
-       $NetBSD: syscalls.master,v 1.62 2020/04/26 18:53:32 thorpej Exp $
+       $NetBSD: syscalls.master,v 1.63 2021/09/19 23:01:49 thorpej Exp $
 
 ;      @(#)syscalls.master     8.1 (Berkeley) 7/19/93
 
@@ -423,11 +423,15 @@
 220    UNIMPL          semtimedop
 221    STD             { int|linux_sys||fadvise64(int fd, off_t offset, \
                            size_t len, int advice); }
-222    UNIMPL          timer_create
-223    UNIMPL          timer_settime
-224    UNIMPL          timer_gettime
-225    UNIMPL          timer_getoverrun
-226    UNIMPL          timer_delete
+222    STD             { int|linux_sys||timer_create(clockid_t clockid, \
+                           struct linux_sigevent *evp, timer_t *timerid); }
+223    STD             { int|linux_sys||timer_settime(timer_t timerid, \
+                           int flags, const struct linux_itimerspec *tim, \
+                           struct linux_itimerspec *otim); }
+224    STD             { int|linux_sys||timer_gettime(timer_t timerid, \
+                           struct linux_itimerspec *tim); }
+225    NOARGS          { int|sys||timer_getoverrun(timer_t timerid); }
+226    NOARGS          { int|sys||timer_delete(timer_t timerid); }
 227    STD             { int|linux_sys||clock_settime(clockid_t which, \
                            struct linux_timespec *tp); }
 228    STD             { int|linux_sys||clock_gettime(clockid_t which, \
diff -r 14aaa3943d3a -r 561b90a6d7ff sys/compat/linux/arch/arm/syscalls.master
--- a/sys/compat/linux/arch/arm/syscalls.master Sun Sep 19 22:32:45 2021 +0000
+++ b/sys/compat/linux/arch/arm/syscalls.master Sun Sep 19 23:01:49 2021 +0000
@@ -1,4 +1,4 @@
-       $NetBSD: syscalls.master,v 1.69 2020/04/26 18:53:32 thorpej Exp $
+       $NetBSD: syscalls.master,v 1.70 2021/09/19 23:01:49 thorpej Exp $
 
 ; Derived from sys/compat/linux/arch/*/syscalls.master
 ; and from Linux 2.4.12 arch/arm/kernel/calls.S
@@ -431,11 +431,15 @@
 254    UNIMPL          set_thread_area
 255    UNIMPL          get_thread_area
 256    STD             { int|linux_sys||set_tid_address(int *tid); }
-257    UNIMPL          timer_create
-258    UNIMPL          timer_settime
-259    UNIMPL          timer_gettime
-260    UNIMPL          timer_getoverrun
-261    UNIMPL          timer_delete
+257    STD             { int|linux_sys||timer_create(clockid_t clockid, \
+                           struct linux_sigevent *evp, timer_t *timerid); }
+258    STD             { int|linux_sys||timer_settime(timer_t timerid, \
+                           int flags, const struct linux_itimerspec *tim, \
+                           struct linux_itimerspec *otim); }
+259    STD             { int|linux_sys||timer_gettime(timer_t timerid, \
+                           struct linux_itimerspec *tim); }
+260    NOARGS          { int|sys||timer_getoverrun(timer_t timerid); }
+261    NOARGS          { int|sys||timer_delete(timer_t timerid); }
 262    STD             { int|linux_sys||clock_settime(clockid_t which, \
                            struct linux_timespec *tp); }
 263    STD             { int|linux_sys||clock_gettime(clockid_t which, \
diff -r 14aaa3943d3a -r 561b90a6d7ff sys/compat/linux/arch/i386/syscalls.master
--- a/sys/compat/linux/arch/i386/syscalls.master        Sun Sep 19 22:32:45 2021 +0000
+++ b/sys/compat/linux/arch/i386/syscalls.master        Sun Sep 19 23:01:49 2021 +0000
@@ -1,4 +1,4 @@
-       $NetBSD: syscalls.master,v 1.124 2020/04/26 18:53:32 thorpej Exp $
+       $NetBSD: syscalls.master,v 1.125 2021/09/19 23:01:50 thorpej Exp $
 
 ;      @(#)syscalls.master     8.1 (Berkeley) 7/19/93
 
@@ -433,11 +433,15 @@
 256    UNIMPL          epoll_wait
 257    UNIMPL          remap_file_pages
 258    STD             { int|linux_sys||set_tid_address(int *tid); }
-259    UNIMPL          timer_create
-260    UNIMPL          timer_settime
-261    UNIMPL          timer_gettime
-262    UNIMPL          timer_getoverrun
-263    UNIMPL          timer_delete
+259    STD             { int|linux_sys||timer_create(clockid_t clockid, \
+                           struct linux_sigevent *evp, timer_t *timerid); }
+260    STD             { int|linux_sys||timer_settime(timer_t timerid, \
+                           int flags, const struct linux_itimerspec *tim, \
+                           struct linux_itimerspec *otim); }
+261    STD             { int|linux_sys||timer_gettime(timer_t timerid, \
+                           struct linux_itimerspec *tim); }
+262    NOARGS          { int|sys||timer_getoverrun(timer_t timerid); }
+263    NOARGS          { int|sys||timer_delete(timer_t timerid); }
 264    STD             { int|linux_sys||clock_settime(clockid_t which, \
                            struct linux_timespec *tp); }
 265    STD             { int|linux_sys||clock_gettime(clockid_t which, \
diff -r 14aaa3943d3a -r 561b90a6d7ff sys/compat/linux/arch/m68k/syscalls.master
--- a/sys/compat/linux/arch/m68k/syscalls.master        Sun Sep 19 22:32:45 2021 +0000
+++ b/sys/compat/linux/arch/m68k/syscalls.master        Sun Sep 19 23:01:49 2021 +0000
@@ -1,4 +1,4 @@
-       $NetBSD: syscalls.master,v 1.95 2020/04/26 18:53:32 thorpej Exp $
+       $NetBSD: syscalls.master,v 1.96 2021/09/19 23:01:50 thorpej Exp $
 
 ;      @(#)syscalls.master     8.1 (Berkeley) 7/19/93
 
@@ -443,11 +443,15 @@
 251    UNIMPL          epoll_wait
 252    UNIMPL          remap_file_pages
 253    STD             { int|linux_sys||set_tid_address(int *tid); }
-254    UNIMPL          timer_create
-255    UNIMPL          timer_settime
-256    UNIMPL          timer_gettime
-257    UNIMPL          timer_getoverrun
-258    UNIMPL          timer_ delete
+254    STD             { int|linux_sys||timer_create(clockid_t clockid, \
+                           struct linux_sigevent *evp, timer_t *timerid); }
+255    STD             { int|linux_sys||timer_settime(timer_t timerid, \
+                           int flags, const struct linux_itimerspec *tim, \
+                           struct linux_itimerspec *otim); }
+256    STD             { int|linux_sys||timer_gettime(timer_t timerid, \
+                           struct linux_itimerspec *tim); }
+257    NOARGS          { int|sys||timer_getoverrun(timer_t timerid); }
+258    NOARGS          { int|sys||timer_delete(timer_t timerid); }
 259    STD             { int|linux_sys||clock_settime(clockid_t which, \
                            struct linux_timespec *tp); }
 260    STD             { int|linux_sys||clock_gettime(clockid_t which, \
diff -r 14aaa3943d3a -r 561b90a6d7ff sys/compat/linux/arch/mips/syscalls.master
--- a/sys/compat/linux/arch/mips/syscalls.master        Sun Sep 19 22:32:45 2021 +0000
+++ b/sys/compat/linux/arch/mips/syscalls.master        Sun Sep 19 23:01:49 2021 +0000
@@ -1,4 +1,4 @@
-       $NetBSD: syscalls.master,v 1.68 2020/04/26 18:53:32 thorpej Exp $  
+       $NetBSD: syscalls.master,v 1.69 2021/09/19 23:01:50 thorpej Exp $  
 
 ;      @(#)syscalls.master     8.1 (Berkeley) 7/19/93
 
@@ -439,11 +439,15 @@
                            size_t sz, struct linux_statfs64 *sp); }
 256    STD             { int|linux_sys||fstatfs64(int fd, \
                            size_t sz, struct linux_statfs64 *sp); }
-257    UNIMPL          timer_create
-258    UNIMPL          timer_settime
-259    UNIMPL          timer_gettime
-260    UNIMPL          timer_getoverrun
-261    UNIMPL          timer_delete
+257    STD             { int|linux_sys||timer_create(clockid_t clockid, \
+                           struct linux_sigevent *evp, timer_t *timerid); }
+258    STD             { int|linux_sys||timer_settime(timer_t timerid, \
+                           int flags, const struct linux_itimerspec *tim, \
+                           struct linux_itimerspec *otim); }
+259    STD             { int|linux_sys||timer_gettime(timer_t timerid, \
+                           struct linux_itimerspec *tim); }
+260    NOARGS          { int|sys||timer_getoverrun(timer_t timerid); }
+261    NOARGS          { int|sys||timer_delete(timer_t timerid); }
 262    STD             { int|linux_sys||clock_settime(clockid_t which, \
                            struct linux_timespec *tp); }
 263    STD             { int|linux_sys||clock_gettime(clockid_t which, \
diff -r 14aaa3943d3a -r 561b90a6d7ff sys/compat/linux/arch/powerpc/syscalls.master
--- a/sys/compat/linux/arch/powerpc/syscalls.master     Sun Sep 19 22:32:45 2021 +0000
+++ b/sys/compat/linux/arch/powerpc/syscalls.master     Sun Sep 19 23:01:49 2021 +0000
@@ -1,4 +1,4 @@
-       $NetBSD: syscalls.master,v 1.74 2020/04/26 18:53:32 thorpej Exp $  
+       $NetBSD: syscalls.master,v 1.75 2021/09/19 23:01:50 thorpej Exp $  
 
 ;      @(#)syscalls.master     8.1 (Berkeley) 7/19/93
 
@@ -429,11 +429,15 @@
 237    UNIMPL          epoll_ctl
 238    UNIMPL          epoll_wait
 239    UNIMPL          remap_file_pages
-240    UNIMPL          timer_create
-241    UNIMPL          timer_settime
-242    UNIMPL          timer_gettime
-243    UNIMPL          timer_getoverrun
-244    UNIMPL          timer_delete
+240    STD             { int|linux_sys||timer_create(clockid_t clockid, \
+                           struct linux_sigevent *evp, timer_t *timerid); }
+241    STD             { int|linux_sys||timer_settime(timer_t timerid, \
+                           int flags, const struct linux_itimerspec *tim, \
+                           struct linux_itimerspec *otim); }
+242    STD             { int|linux_sys||timer_gettime(timer_t timerid, \
+                           struct linux_itimerspec *tim); }
+243    NOARGS          { int|sys||timer_getoverrun(timer_t timerid); }
+244    NOARGS          { int|sys||timer_delete(timer_t timerid); }
 245    STD             { int|linux_sys||clock_settime(clockid_t which, \
                            struct linux_timespec *tp); }
 246    STD             { int|linux_sys||clock_gettime(clockid_t which, \
diff -r 14aaa3943d3a -r 561b90a6d7ff sys/compat/linux/common/linux_sched.h
--- a/sys/compat/linux/common/linux_sched.h     Sun Sep 19 22:32:45 2021 +0000
+++ b/sys/compat/linux/common/linux_sched.h     Sun Sep 19 23:01:49 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: linux_sched.h,v 1.8 2011/11/18 04:07:44 christos Exp $ */
+/*     $NetBSD: linux_sched.h,v 1.9 2021/09/19 23:01:50 thorpej Exp $  */
 
 /*-
  * Copyright (c) 1999 The NetBSD Foundation, Inc.
@@ -74,15 +74,36 @@
        long            tv_nsec;        /* nanoseconds */
 };
 
+struct linux_itimerspec {
+       struct linux_timespec it_interval;
+       struct linux_timespec it_value;
+};
+
 #define LINUX_CLOCK_REALTIME           0
 #define LINUX_CLOCK_MONOTONIC          1
 #define LINUX_CLOCK_PROCESS_CPUTIME_ID 2
 #define LINUX_CLOCK_THREAD_CPUTIME_ID  3
-#define LINUX_CLOCK_REALTIME_HR                4
-#define LINUX_CLOCK_MONOTONIC_HR       5
+#define LINUX_CLOCK_MONOTONIC_RAW      4
+#define        LINUX_CLOCK_REALTIME_COARSE     5
+#define        LINUX_CLOCK_MONOTONIC_COARSE    6
+#define        LINUX_CLOCK_BOOTTIME            7
+#define        LINUX_CLOCK_BOOTTIME_ALARM      8
+#define        LINUX_CLOCK_REALTIME_ALARM      9
+
+#define LINUX_TIMER_ABSTIME            0x01
+
+int    linux_to_native_clockid(clockid_t *, clockid_t);
 
-int linux_to_native_clockid(clockid_t *, clockid_t);
-void native_to_linux_timespec(struct linux_timespec *, struct timespec *);
-void linux_to_native_timespec(struct timespec *, struct linux_timespec *);
+void   native_to_linux_timespec(struct linux_timespec *,
+           const struct timespec *);
+void   linux_to_native_timespec(struct timespec *,
+           const struct linux_timespec *);
+
+void   native_to_linux_itimerspec(struct linux_itimerspec *,
+           const struct itimerspec *);
+void   linux_to_native_itimerspec(struct itimerspec *,
+           const struct linux_itimerspec *);
+
+int    linux_to_native_timer_create_clockid(clockid_t *, clockid_t);
 
 #endif /* _LINUX_SCHED_H */
diff -r 14aaa3943d3a -r 561b90a6d7ff sys/compat/linux/common/linux_time.c
--- a/sys/compat/linux/common/linux_time.c      Sun Sep 19 22:32:45 2021 +0000
+++ b/sys/compat/linux/common/linux_time.c      Sun Sep 19 23:01:49 2021 +0000
@@ -1,11 +1,11 @@
-/*     $NetBSD: linux_time.c,v 1.40 2021/09/07 11:43:04 riastradh Exp $ */
+/*     $NetBSD: linux_time.c,v 1.41 2021/09/19 23:01:50 thorpej Exp $ */
 
 /*-
- * Copyright (c) 2001 The NetBSD Foundation, Inc.
+ * Copyright (c) 2001, 2020 The NetBSD Foundation, Inc.
  * All rights reserved.
  *
  * This code is derived from software contributed to The NetBSD Foundation
- * by Emmanuel Dreyfus.
+ * by Emmanuel Dreyfus, and by Jason R. Thorpe.
  *
  * Redistribution and use in source and binary forms, with or without
  * modification, are permitted provided that the following conditions
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_time.c,v 1.40 2021/09/07 11:43:04 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_time.c,v 1.41 2021/09/19 23:01:50 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/ucred.h>
@@ -47,6 +47,7 @@
 
 #include <compat/linux/common/linux_types.h>
 #include <compat/linux/common/linux_signal.h>
+#include <compat/linux/common/linux_sigevent.h>
 #include <compat/linux/common/linux_machdep.h>
 #include <compat/linux/common/linux_sched.h>
 #include <compat/linux/common/linux_ipc.h>
@@ -56,6 +57,8 @@
 
 #include <compat/common/compat_util.h>
 



Home | Main Index | Thread Index | Old Index