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 timerfd syscalls to COMPAT...



details:   https://anonhg.NetBSD.org/src/rev/eb5e4a9cd690
branches:  trunk
changeset: 1023644:eb5e4a9cd690
user:      thorpej <thorpej%NetBSD.org@localhost>
date:      Sun Sep 19 23:51:36 2021 +0000

description:
Add the timerfd syscalls to COMPAT_LINUX and COMPAT_LINUX32.

diffstat:

 sys/compat/linux/arch/alpha/syscalls.master   |   12 +-
 sys/compat/linux/arch/amd64/syscalls.master   |   12 +-
 sys/compat/linux/arch/arm/syscalls.master     |   12 +-
 sys/compat/linux/arch/i386/syscalls.master    |   12 +-
 sys/compat/linux/arch/m68k/syscalls.master    |   12 +-
 sys/compat/linux/arch/mips/syscalls.master    |   12 +-
 sys/compat/linux/arch/powerpc/syscalls.master |   12 +-
 sys/compat/linux/common/linux_ioctl.c         |   55 ++++----
 sys/compat/linux/common/linux_ioctl.h         |    4 +-
 sys/compat/linux/common/linux_sched.h         |    4 +-
 sys/compat/linux/common/linux_time.c          |  153 +++++++++++++++++++++++++-
 sys/compat/linux32/arch/amd64/syscalls.master |   12 +-
 sys/compat/linux32/common/linux32_ioctl.c     |   32 ++++-
 sys/compat/linux32/common/linux32_time.c      |   71 +++++++++++-
 14 files changed, 348 insertions(+), 67 deletions(-)

diffs (truncated from 702 to 300 lines):

diff -r baf9688390ef -r eb5e4a9cd690 sys/compat/linux/arch/alpha/syscalls.master
--- a/sys/compat/linux/arch/alpha/syscalls.master       Sun Sep 19 23:02:22 2021 +0000
+++ b/sys/compat/linux/arch/alpha/syscalls.master       Sun Sep 19 23:51:36 2021 +0000
@@ -1,4 +1,4 @@
-       $NetBSD: syscalls.master,v 1.98 2021/09/19 23:01:49 thorpej Exp $
+       $NetBSD: syscalls.master,v 1.99 2021/09/19 23:51:36 thorpej Exp $
 ;
 ;      @(#)syscalls.master     8.1 (Berkeley) 7/19/93
 
@@ -770,9 +770,13 @@
                            unsigned int flags, struct timespec *timeout); }
 480    STD             { int|linux_sys||fallocate(int fd, int mode, \
                            off_t offset, off_t len); }
-481    UNIMPL          timerfd_create
-482    UNIMPL          timerfd_settime
-483    UNIMPL          timerfd_gettime
+481    STD             { int|linux_sys||timerfd_create(clockid_t clock_id, \
+                           int flags); }
+482    STD             { int|linux_sys||timerfd_settime(int fd, int flags, \
+                           const struct linux_itimerspec *tim, \
+                           struct linux_itimerspec *otim); }
+483    STD             { int|linux_sys||timerfd_gettime(int fd, \
+                           struct linux_itimerspec *tim); }
 484    UNIMPL          signalfd4
 485    UNIMPL          eventfd2
 486    UNIMPL          epoll_create1
diff -r baf9688390ef -r eb5e4a9cd690 sys/compat/linux/arch/amd64/syscalls.master
--- a/sys/compat/linux/arch/amd64/syscalls.master       Sun Sep 19 23:02:22 2021 +0000
+++ b/sys/compat/linux/arch/amd64/syscalls.master       Sun Sep 19 23:51:36 2021 +0000
@@ -1,4 +1,4 @@
-       $NetBSD: syscalls.master,v 1.63 2021/09/19 23:01:49 thorpej Exp $
+       $NetBSD: syscalls.master,v 1.64 2021/09/19 23:51:36 thorpej Exp $
 
 ;      @(#)syscalls.master     8.1 (Berkeley) 7/19/93
 
@@ -519,12 +519,16 @@
                            struct linux_timespec *times, int flag); }
 281    UNIMPL          epoll_pwait
 282    UNIMPL          signalfd
-283    UNIMPL          timerfd_create
+283    STD             { int|linux_sys||timerfd_create(clockid_t clock_id, \
+                           int flags); }
 284    UNIMPL          eventfd
 285    STD             { int|linux_sys||fallocate(int fd, int mode, \
                            off_t offset, off_t len); }
-286    UNIMPL          timerfd_settime
-287    UNIMPL          timerfd_gettime
+286    STD             { int|linux_sys||timerfd_settime(int fd, int flags, \
+                           const struct linux_itimerspec *tim, \
+                           struct linux_itimerspec *otim); }
+287    STD             { int|linux_sys||timerfd_gettime(int fd, \
+                           struct linux_itimerspec *tim); }
 288    STD             { int|linux_sys||accept4(int s, \
                            struct osockaddr *name, \
                            int *anamelen, int flags); }
diff -r baf9688390ef -r eb5e4a9cd690 sys/compat/linux/arch/arm/syscalls.master
--- a/sys/compat/linux/arch/arm/syscalls.master Sun Sep 19 23:02:22 2021 +0000
+++ b/sys/compat/linux/arch/arm/syscalls.master Sun Sep 19 23:51:36 2021 +0000
@@ -1,4 +1,4 @@
-       $NetBSD: syscalls.master,v 1.70 2021/09/19 23:01:49 thorpej Exp $
+       $NetBSD: syscalls.master,v 1.71 2021/09/19 23:51:36 thorpej Exp $
 
 ; Derived from sys/compat/linux/arch/*/syscalls.master
 ; and from Linux 2.4.12 arch/arm/kernel/calls.S
@@ -562,12 +562,16 @@
 348    STD             { int|linux_sys||utimensat(int fd, const char *path, \
                            struct linux_timespec *times, int flag); }
 349    UNIMPL          signalfd
-350    UNIMPL          timerfd_create
+350    STD             { int|linux_sys||timerfd_create(clockid_t clock_id, \
+                           int flags); }
 351    UNIMPL          eventfd
 352    STD             { int|linux_sys||fallocate(int fd, int mode, \
                            off_t offset, off_t len); }
-353    UNIMPL          timerfd_settime
-354    UNIMPL          timerfd_gettime
+353    STD             { int|linux_sys||timerfd_settime(int fd, int flags, \
+                           const struct linux_itimerspec *tim, \
+                           struct linux_itimerspec *otim); }
+354    STD             { int|linux_sys||timerfd_gettime(int fd, \
+                           struct linux_itimerspec *tim); }
 355    UNIMPL          signalfd4
 356    UNIMPL          eventfd2
 357    UNIMPL          epoll_create1
diff -r baf9688390ef -r eb5e4a9cd690 sys/compat/linux/arch/i386/syscalls.master
--- a/sys/compat/linux/arch/i386/syscalls.master        Sun Sep 19 23:02:22 2021 +0000
+++ b/sys/compat/linux/arch/i386/syscalls.master        Sun Sep 19 23:51:36 2021 +0000
@@ -1,4 +1,4 @@
-       $NetBSD: syscalls.master,v 1.125 2021/09/19 23:01:50 thorpej Exp $
+       $NetBSD: syscalls.master,v 1.126 2021/09/19 23:51:36 thorpej Exp $
 
 ;      @(#)syscalls.master     8.1 (Berkeley) 7/19/93
 
@@ -529,12 +529,16 @@
 320    STD             { int|linux_sys||utimensat(int fd, const char *path, \
                            struct linux_timespec *times, int flag); }
 321    UNIMPL          signalfd
-322    UNIMPL          timerfd_create
+322    STD             { int|linux_sys||timerfd_create(clockid_t clock_id, \
+                           int flags); }
 323    UNIMPL          eventfd
 324    STD             { int|linux_sys||fallocate(int fd, int mode, \
                            off_t offset, off_t len); }
-325    UNIMPL          timerfd_settime
-326    UNIMPL          timerfd_gettime
+325    STD             { int|linux_sys||timerfd_settime(int fd, int flags, \
+                           const struct linux_itimerspec *tim, \
+                           struct linux_itimerspec *otim); }
+326    STD             { int|linux_sys||timerfd_gettime(int fd, \
+                           struct linux_itimerspec *tim); }
 327    UNIMPL          signalfd4
 328    UNIMPL          eventfd2
 329    UNIMPL          epoll_create1
diff -r baf9688390ef -r eb5e4a9cd690 sys/compat/linux/arch/m68k/syscalls.master
--- a/sys/compat/linux/arch/m68k/syscalls.master        Sun Sep 19 23:02:22 2021 +0000
+++ b/sys/compat/linux/arch/m68k/syscalls.master        Sun Sep 19 23:51:36 2021 +0000
@@ -1,4 +1,4 @@
-       $NetBSD: syscalls.master,v 1.96 2021/09/19 23:01:50 thorpej Exp $
+       $NetBSD: syscalls.master,v 1.97 2021/09/19 23:51:36 thorpej Exp $
 
 ;      @(#)syscalls.master     8.1 (Berkeley) 7/19/93
 
@@ -547,12 +547,16 @@
 316    STD             { int|linux_sys||utimensat(int fd, const char *path, \
                            struct linux_timespec *times, int flag); }
 317    UNIMPL          signalfd
-318    UNIMPL          timerfd_create
+318    STD             { int|linux_sys||timerfd_create(clockid_t clock_id, \
+                           int flags); }
 319    UNIMPL          eventfd
 320    STD             { int|linux_sys||fallocate(int fd, int mode, \
                            off_t offset, off_t len); }
-321    UNIMPL          timerfd_settime
-322    UNIMPL          timerfd_gettime
+321    STD             { int|linux_sys||timerfd_settime(int fd, int flags, \
+                           const struct linux_itimerspec *tim, \
+                           struct linux_itimerspec *otim); }
+322    STD             { int|linux_sys||timerfd_gettime(int fd, \
+                           struct linux_itimerspec *tim); }
 323    UNIMPL          signalfd4
 324    UNIMPL          eventfd2
 325    UNIMPL          epoll_create1
diff -r baf9688390ef -r eb5e4a9cd690 sys/compat/linux/arch/mips/syscalls.master
--- a/sys/compat/linux/arch/mips/syscalls.master        Sun Sep 19 23:02:22 2021 +0000
+++ b/sys/compat/linux/arch/mips/syscalls.master        Sun Sep 19 23:51:36 2021 +0000
@@ -1,4 +1,4 @@
-       $NetBSD: syscalls.master,v 1.69 2021/09/19 23:01:50 thorpej Exp $  
+       $NetBSD: syscalls.master,v 1.70 2021/09/19 23:51:37 thorpej Exp $  
 
 ;      @(#)syscalls.master     8.1 (Berkeley) 7/19/93
 
@@ -539,9 +539,13 @@
 319    UNIMPL          eventfd
 320    STD             { int|linux_sys||fallocate(int fd, int mode, \
                            off_t offset, off_t len); }
-321    UNIMPL          timerfd_create
-322    UNIMPL          timerfd_gettime
-323    UNIMPL          timerfd_settime
+321    STD             { int|linux_sys||timerfd_create(clockid_t clock_id, \
+                           int flags); }
+322    STD             { int|linux_sys||timerfd_gettime(int fd, \
+                           struct linux_itimerspec *tim); }
+323    STD             { int|linux_sys||timerfd_settime(int fd, int flags, \
+                           const struct linux_itimerspec *tim, \
+                           struct linux_itimerspec *otim); }
 324    UNIMPL          signalfd4
 325    UNIMPL          eventfd2
 326    UNIMPL          epoll_create1
diff -r baf9688390ef -r eb5e4a9cd690 sys/compat/linux/arch/powerpc/syscalls.master
--- a/sys/compat/linux/arch/powerpc/syscalls.master     Sun Sep 19 23:02:22 2021 +0000
+++ b/sys/compat/linux/arch/powerpc/syscalls.master     Sun Sep 19 23:51:36 2021 +0000
@@ -1,4 +1,4 @@
-       $NetBSD: syscalls.master,v 1.75 2021/09/19 23:01:50 thorpej Exp $  
+       $NetBSD: syscalls.master,v 1.76 2021/09/19 23:51:37 thorpej Exp $  
 
 ;      @(#)syscalls.master     8.1 (Berkeley) 7/19/93
 
@@ -533,14 +533,18 @@
 304    STD             { int|linux_sys||utimensat(int fd, const char *path, \
                            struct linux_timespec *times, int flag); }
 305    UNIMPL          signalfd
-306    UNIMPL          timerfd_create
+306    STD             { int|linux_sys||timerfd_create(clockid_t clock_id, \
+                           int flags); }
 307    UNIMPL          eventfd
 308    UNIMPL          sync_file_range2
 309    STD             { int|linux_sys||fallocate(int fd, int mode, \
                            off_t offset, off_t len); }
 310    UNIMPL          subpage_prot
-311    UNIMPL          timerfd_settime
-312    UNIMPL          timerfd_gettime
+311    STD             { int|linux_sys||timerfd_settime(int fd, int flags, \
+                           const struct linux_itimerspec *tim, \
+                           struct linux_itimerspec *otim); }
+312    STD             { int|linux_sys||timerfd_gettime(int fd, \
+                           struct linux_itimerspec *tim); }
 313    UNIMPL          signalfd4
 314    UNIMPL          eventfd2
 315    UNIMPL          epoll_create1
diff -r baf9688390ef -r eb5e4a9cd690 sys/compat/linux/common/linux_ioctl.c
--- a/sys/compat/linux/common/linux_ioctl.c     Sun Sep 19 23:02:22 2021 +0000
+++ b/sys/compat/linux/common/linux_ioctl.c     Sun Sep 19 23:51:36 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: linux_ioctl.c,v 1.58 2014/03/23 06:03:38 dholland Exp $        */
+/*     $NetBSD: linux_ioctl.c,v 1.59 2021/09/19 23:51:37 thorpej Exp $ */
 
 /*-
  * Copyright (c) 1995, 1998, 2008 The NetBSD Foundation, Inc.
@@ -30,7 +30,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_ioctl.c,v 1.58 2014/03/23 06:03:38 dholland Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_ioctl.c,v 1.59 2021/09/19 23:51:37 thorpej Exp $");
 
 #if defined(_KERNEL_OPT)
 #include "sequencer.h"
@@ -144,46 +144,49 @@
                error = linux_ioctl_mtio(l, uap, retval);
                break;
        case 'T':
-       {
-#if NSEQUENCER > 0
-/* XXX XAX 2x check this. */
+           {
                /*
-                * Both termios and the MIDI sequencer use 'T' to identify
-                * the ioctl, so we have to differentiate them in another
-                * way.  We do it by indexing in the cdevsw with the major
-                * device number and check if that is the sequencer entry.
+                * Termios, the MIDI sequencer, and timerfd use 'T' to
+                * identify the ioctl, so we have to differentiate them
+                * in another way.
+                *
+                * XXX XAX 2x check this.
                 */
-               bool is_sequencer = false;
                struct file *fp;
-               struct vnode *vp;
-               struct vattr va;
-               extern const struct cdevsw sequencer_cdevsw;
 
                if ((fp = fd_getfile(SCARG(uap, fd))) == NULL)
                        return EBADF;
+
+               if (fp->f_type == DTYPE_TIMERFD) {
+                       error = linux_ioctl_timerfd(l, uap, retval);
+                       fd_putfile(SCARG(uap, fd));
+                       break;
+               }
+#if NSEQUENCER > 0
+               struct vnode *vp;
+
                if (fp->f_type == DTYPE_VNODE &&
                    (vp = (struct vnode *)fp->f_data) != NULL &&
                    vp->v_type == VCHR) {
+                       struct vattr va;
+                       extern const struct cdevsw sequencer_cdevsw;
+
                        vn_lock(vp, LK_SHARED | LK_RETRY);
                        error = VOP_GETATTR(vp, &va, l->l_cred);
                        VOP_UNLOCK(vp);
                        if (error == 0 &&
-                           cdevsw_lookup(va.va_rdev) == &sequencer_cdevsw)
-                               is_sequencer = true;
-               }
-               if (is_sequencer) {
-                       error = oss_ioctl_sequencer(l, (const void *)LINUX_TO_OSS(uap),
-                                                  retval);
+                           cdevsw_lookup(va.va_rdev) == &sequencer_cdevsw) {
+                               error = oss_ioctl_sequencer(l,
+                                   (const void *)LINUX_TO_OSS(uap), retval);
+                               fd_putfile(SCARG(uap, fd));
+                               break;
+                       }
                }
-               else {
-                       error = linux_ioctl_termios(l, uap, retval);
-               }
+#endif /* NSEQUENCER > 0 */
+               error = linux_ioctl_termios(l, uap, retval);
                fd_putfile(SCARG(uap, fd));
-#else
-               error = linux_ioctl_termios(l, uap, retval);
-#endif
-       }
                break;
+           }
        case '"':
                error = linux_ioctl_sg(l, uap, retval);
                break;
diff -r baf9688390ef -r eb5e4a9cd690 sys/compat/linux/common/linux_ioctl.h
--- a/sys/compat/linux/common/linux_ioctl.h     Sun Sep 19 23:02:22 2021 +0000
+++ b/sys/compat/linux/common/linux_ioctl.h     Sun Sep 19 23:51:36 2021 +0000
@@ -1,4 +1,4 @@
-/*     $NetBSD: linux_ioctl.h,v 1.27 2013/06/08 12:50:32 stacktic Exp $        */
+/*     $NetBSD: linux_ioctl.h,v 1.28 2021/09/19 23:51:37 thorpej Exp $ */
 
 /*-
  * Copyright (c) 1995, 1998 The NetBSD Foundation, Inc.



Home | Main Index | Thread Index | Old Index