Module Name:    src
Committed By:   thorpej
Date:           Mon Sep 20 00:09:02 UTC 2021

Modified Files:
        src/sys/compat/linux/arch/alpha: syscalls.master
        src/sys/compat/linux/arch/amd64: syscalls.master
        src/sys/compat/linux/arch/arm: syscalls.master
        src/sys/compat/linux/arch/i386: syscalls.master
        src/sys/compat/linux/arch/m68k: syscalls.master
        src/sys/compat/linux/arch/mips: syscalls.master
        src/sys/compat/linux/arch/powerpc: syscalls.master
        src/sys/compat/linux/common: linux_misc.c
        src/sys/compat/linux32/arch/amd64: syscalls.master
        src/sys/compat/linux32/common: linux32_misc.c

Log Message:
Add the eventfd system calls to COMPAT_LINUX and COMPAT_LINUX32.


To generate a diff of this commit:
cvs rdiff -u -r1.99 -r1.100 src/sys/compat/linux/arch/alpha/syscalls.master
cvs rdiff -u -r1.64 -r1.65 src/sys/compat/linux/arch/amd64/syscalls.master
cvs rdiff -u -r1.71 -r1.72 src/sys/compat/linux/arch/arm/syscalls.master
cvs rdiff -u -r1.126 -r1.127 src/sys/compat/linux/arch/i386/syscalls.master
cvs rdiff -u -r1.97 -r1.98 src/sys/compat/linux/arch/m68k/syscalls.master
cvs rdiff -u -r1.70 -r1.71 src/sys/compat/linux/arch/mips/syscalls.master
cvs rdiff -u -r1.76 -r1.77 src/sys/compat/linux/arch/powerpc/syscalls.master
cvs rdiff -u -r1.252 -r1.253 src/sys/compat/linux/common/linux_misc.c
cvs rdiff -u -r1.73 -r1.74 src/sys/compat/linux32/arch/amd64/syscalls.master
cvs rdiff -u -r1.31 -r1.32 src/sys/compat/linux32/common/linux32_misc.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/sys/compat/linux/arch/alpha/syscalls.master
diff -u src/sys/compat/linux/arch/alpha/syscalls.master:1.99 src/sys/compat/linux/arch/alpha/syscalls.master:1.100
--- src/sys/compat/linux/arch/alpha/syscalls.master:1.99	Sun Sep 19 23:51:36 2021
+++ src/sys/compat/linux/arch/alpha/syscalls.master	Mon Sep 20 00:09:01 2021
@@ -1,4 +1,4 @@
-	$NetBSD: syscalls.master,v 1.99 2021/09/19 23:51:36 thorpej Exp $
+	$NetBSD: syscalls.master,v 1.100 2021/09/20 00:09:01 thorpej Exp $
 ;
 ;	@(#)syscalls.master	8.1 (Berkeley) 7/19/93
 
@@ -764,7 +764,7 @@
 			    struct linux_timespec *times, int flag); }
 476	UNIMPL		signalfd
 477	UNIMPL		timerfd
-478	UNIMPL		eventfd
+478	STD		{ int|linux_sys||eventfd(unsigned int initval); }
 479	STD		{ int|linux_sys||recvmmsg(int s, \
 			    struct linux_mmsghdr *msgvec, unsigned int vlen, \
 			    unsigned int flags, struct timespec *timeout); }
@@ -778,7 +778,8 @@
 483	STD		{ int|linux_sys||timerfd_gettime(int fd, \
 			    struct linux_itimerspec *tim); }
 484	UNIMPL		signalfd4
-485	UNIMPL		eventfd2
+485	STD		{ int|linux_sys||eventfd2(unsigned int initval, \
+			    int flags); }
 486	UNIMPL		epoll_create1
 487	STD		{ int|linux_sys||dup3(int from, int to, int flags); }
 488	STD		{ int|linux_sys||pipe2(int *pfds, int flags); }

Index: src/sys/compat/linux/arch/amd64/syscalls.master
diff -u src/sys/compat/linux/arch/amd64/syscalls.master:1.64 src/sys/compat/linux/arch/amd64/syscalls.master:1.65
--- src/sys/compat/linux/arch/amd64/syscalls.master:1.64	Sun Sep 19 23:51:36 2021
+++ src/sys/compat/linux/arch/amd64/syscalls.master	Mon Sep 20 00:09:01 2021
@@ -1,4 +1,4 @@
-	$NetBSD: syscalls.master,v 1.64 2021/09/19 23:51:36 thorpej Exp $
+	$NetBSD: syscalls.master,v 1.65 2021/09/20 00:09:01 thorpej Exp $
 
 ;	@(#)syscalls.master	8.1 (Berkeley) 7/19/93
 
@@ -521,7 +521,7 @@
 282	UNIMPL		signalfd
 283	STD		{ int|linux_sys||timerfd_create(clockid_t clock_id, \
 			    int flags); }
-284	UNIMPL		eventfd
+284	STD		{ int|linux_sys||eventfd(unsigned int initval); }
 285	STD		{ int|linux_sys||fallocate(int fd, int mode, \
 			    off_t offset, off_t len); }
 286	STD		{ int|linux_sys||timerfd_settime(int fd, int flags, \
@@ -533,7 +533,8 @@
 			    struct osockaddr *name, \
 			    int *anamelen, int flags); }
 289	UNIMPL		signalfd4
-290	UNIMPL		eventfd2
+290	STD		{ int|linux_sys||eventfd2(unsigned int initval, \
+			    int flags); }
 291	UNIMPL		epoll_create1
 292	STD		{ int|linux_sys||dup3(int from, int to, int flags); }
 293	STD		{ int|linux_sys||pipe2(int *pfds, int flags); }

Index: src/sys/compat/linux/arch/arm/syscalls.master
diff -u src/sys/compat/linux/arch/arm/syscalls.master:1.71 src/sys/compat/linux/arch/arm/syscalls.master:1.72
--- src/sys/compat/linux/arch/arm/syscalls.master:1.71	Sun Sep 19 23:51:36 2021
+++ src/sys/compat/linux/arch/arm/syscalls.master	Mon Sep 20 00:09:01 2021
@@ -1,4 +1,4 @@
-	$NetBSD: syscalls.master,v 1.71 2021/09/19 23:51:36 thorpej Exp $
+	$NetBSD: syscalls.master,v 1.72 2021/09/20 00:09:01 thorpej Exp $
 
 ; Derived from sys/compat/linux/arch/*/syscalls.master
 ; and from Linux 2.4.12 arch/arm/kernel/calls.S
@@ -564,7 +564,7 @@
 349	UNIMPL		signalfd
 350	STD		{ int|linux_sys||timerfd_create(clockid_t clock_id, \
 			    int flags); }
-351	UNIMPL		eventfd
+351	STD		{ int|linux_sys||eventfd(unsigned int initval); }
 352	STD		{ int|linux_sys||fallocate(int fd, int mode, \
 			    off_t offset, off_t len); }
 353	STD		{ int|linux_sys||timerfd_settime(int fd, int flags, \
@@ -573,7 +573,8 @@
 354	STD		{ int|linux_sys||timerfd_gettime(int fd, \
 			    struct linux_itimerspec *tim); }
 355	UNIMPL		signalfd4
-356	UNIMPL		eventfd2
+356	STD		{ int|linux_sys||eventfd2(unsigned int initval, \
+			    int flags); }
 357	UNIMPL		epoll_create1
 358	STD		{ int|linux_sys||dup3(int from, int to, int flags); }
 359	STD		{ int|linux_sys||pipe2(int *pfds, int flags); }

Index: src/sys/compat/linux/arch/i386/syscalls.master
diff -u src/sys/compat/linux/arch/i386/syscalls.master:1.126 src/sys/compat/linux/arch/i386/syscalls.master:1.127
--- src/sys/compat/linux/arch/i386/syscalls.master:1.126	Sun Sep 19 23:51:36 2021
+++ src/sys/compat/linux/arch/i386/syscalls.master	Mon Sep 20 00:09:01 2021
@@ -1,4 +1,4 @@
-	$NetBSD: syscalls.master,v 1.126 2021/09/19 23:51:36 thorpej Exp $
+	$NetBSD: syscalls.master,v 1.127 2021/09/20 00:09:01 thorpej Exp $
 
 ;	@(#)syscalls.master	8.1 (Berkeley) 7/19/93
 
@@ -531,7 +531,7 @@
 321	UNIMPL		signalfd
 322	STD		{ int|linux_sys||timerfd_create(clockid_t clock_id, \
 			    int flags); }
-323	UNIMPL		eventfd
+323	STD		{ int|linux_sys||eventfd(unsigned int initval); }
 324	STD		{ int|linux_sys||fallocate(int fd, int mode, \
 			    off_t offset, off_t len); }
 325	STD		{ int|linux_sys||timerfd_settime(int fd, int flags, \
@@ -540,7 +540,8 @@
 326	STD		{ int|linux_sys||timerfd_gettime(int fd, \
 			    struct linux_itimerspec *tim); }
 327	UNIMPL		signalfd4
-328	UNIMPL		eventfd2
+328	STD		{ int|linux_sys||eventfd2(unsigned int initval, \
+			    int flags); }
 329	UNIMPL		epoll_create1
 330     STD             { int|linux_sys||dup3(int from, int to, int flags); }
 331     STD             { int|linux_sys||pipe2( int *pfds, int flags); }

Index: src/sys/compat/linux/arch/m68k/syscalls.master
diff -u src/sys/compat/linux/arch/m68k/syscalls.master:1.97 src/sys/compat/linux/arch/m68k/syscalls.master:1.98
--- src/sys/compat/linux/arch/m68k/syscalls.master:1.97	Sun Sep 19 23:51:36 2021
+++ src/sys/compat/linux/arch/m68k/syscalls.master	Mon Sep 20 00:09:01 2021
@@ -1,4 +1,4 @@
-	$NetBSD: syscalls.master,v 1.97 2021/09/19 23:51:36 thorpej Exp $
+	$NetBSD: syscalls.master,v 1.98 2021/09/20 00:09:01 thorpej Exp $
 
 ;	@(#)syscalls.master	8.1 (Berkeley) 7/19/93
 
@@ -549,7 +549,7 @@
 317	UNIMPL		signalfd
 318	STD		{ int|linux_sys||timerfd_create(clockid_t clock_id, \
 			    int flags); }
-319	UNIMPL		eventfd
+319	STD		{ int|linux_sys||eventfd(unsigned int initval); }
 320	STD		{ int|linux_sys||fallocate(int fd, int mode, \
 			    off_t offset, off_t len); }
 321	STD		{ int|linux_sys||timerfd_settime(int fd, int flags, \
@@ -558,7 +558,8 @@
 322	STD		{ int|linux_sys||timerfd_gettime(int fd, \
 			    struct linux_itimerspec *tim); }
 323	UNIMPL		signalfd4
-324	UNIMPL		eventfd2
+324	STD		{ int|linux_sys||eventfd2(unsigned int initval, \
+			    int flags); }
 325	UNIMPL		epoll_create1
 326	STD		{ int|linux_sys||dup3(int from, int to, int flags); }
 327	STD		{ int|linux_sys||pipe2(int *pfds, int flags); }

Index: src/sys/compat/linux/arch/mips/syscalls.master
diff -u src/sys/compat/linux/arch/mips/syscalls.master:1.70 src/sys/compat/linux/arch/mips/syscalls.master:1.71
--- src/sys/compat/linux/arch/mips/syscalls.master:1.70	Sun Sep 19 23:51:37 2021
+++ src/sys/compat/linux/arch/mips/syscalls.master	Mon Sep 20 00:09:01 2021
@@ -1,4 +1,4 @@
-	$NetBSD: syscalls.master,v 1.70 2021/09/19 23:51:37 thorpej Exp $  
+	$NetBSD: syscalls.master,v 1.71 2021/09/20 00:09:01 thorpej Exp $  
 
 ;	@(#)syscalls.master	8.1 (Berkeley) 7/19/93
 
@@ -536,7 +536,7 @@
 			    struct linux_timespec *times, int flag); }
 317	UNIMPL		signalfd
 318	UNIMPL		timerfd
-319	UNIMPL		eventfd
+319	STD		{ int|linux_sys||eventfd(unsigned int initval); }
 320	STD		{ int|linux_sys||fallocate(int fd, int mode, \
 			    off_t offset, off_t len); }
 321	STD		{ int|linux_sys||timerfd_create(clockid_t clock_id, \
@@ -547,7 +547,8 @@
 			    const struct linux_itimerspec *tim, \
 			    struct linux_itimerspec *otim); }
 324	UNIMPL		signalfd4
-325	UNIMPL		eventfd2
+325	STD		{ int|linux_sys||eventfd2(unsigned int initval, \
+			    int flags); }
 326	UNIMPL		epoll_create1
 327	STD		{ int|linux_sys||dup3(int from, int to, int flags); }
 328	STD		{ int|linux_sys||pipe2(int *pfds, int flags); }

Index: src/sys/compat/linux/arch/powerpc/syscalls.master
diff -u src/sys/compat/linux/arch/powerpc/syscalls.master:1.76 src/sys/compat/linux/arch/powerpc/syscalls.master:1.77
--- src/sys/compat/linux/arch/powerpc/syscalls.master:1.76	Sun Sep 19 23:51:37 2021
+++ src/sys/compat/linux/arch/powerpc/syscalls.master	Mon Sep 20 00:09:01 2021
@@ -1,4 +1,4 @@
-	$NetBSD: syscalls.master,v 1.76 2021/09/19 23:51:37 thorpej Exp $  
+	$NetBSD: syscalls.master,v 1.77 2021/09/20 00:09:01 thorpej Exp $  
 
 ;	@(#)syscalls.master	8.1 (Berkeley) 7/19/93
 
@@ -535,7 +535,7 @@
 305	UNIMPL		signalfd
 306	STD		{ int|linux_sys||timerfd_create(clockid_t clock_id, \
 			    int flags); }
-307	UNIMPL		eventfd
+307	STD		{ int|linux_sys||eventfd(unsigned int initval); }
 308	UNIMPL		sync_file_range2
 309	STD		{ int|linux_sys||fallocate(int fd, int mode, \
 			    off_t offset, off_t len); }
@@ -546,7 +546,8 @@
 312	STD		{ int|linux_sys||timerfd_gettime(int fd, \
 			    struct linux_itimerspec *tim); }
 313	UNIMPL		signalfd4
-314	UNIMPL		eventfd2
+314	STD		{ int|linux_sys||eventfd2(unsigned int initval, \
+			    int flags); }
 315	UNIMPL		epoll_create1
 316	STD		{ int|linux_sys||dup3(int from, int to, int flags); }
 317	STD		{ int|linux_sys||pipe2(int *pfds, int flags); }

Index: src/sys/compat/linux/common/linux_misc.c
diff -u src/sys/compat/linux/common/linux_misc.c:1.252 src/sys/compat/linux/common/linux_misc.c:1.253
--- src/sys/compat/linux/common/linux_misc.c:1.252	Tue Sep  7 11:43:04 2021
+++ src/sys/compat/linux/common/linux_misc.c	Mon Sep 20 00:09:02 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux_misc.c,v 1.252 2021/09/07 11:43:04 riastradh Exp $	*/
+/*	$NetBSD: linux_misc.c,v 1.253 2021/09/20 00:09:02 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 1995, 1998, 1999, 2008 The NetBSD Foundation, Inc.
@@ -57,13 +57,14 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux_misc.c,v 1.252 2021/09/07 11:43:04 riastradh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux_misc.c,v 1.253 2021/09/20 00:09:02 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/systm.h>
 #include <sys/namei.h>
 #include <sys/proc.h>
 #include <sys/dirent.h>
+#include <sys/eventfd.h>
 #include <sys/file.h>
 #include <sys/stat.h>
 #include <sys/filedesc.h>
@@ -1583,3 +1584,54 @@ linux_do_futex(int *uaddr, int op, int v
 	return do_futex(uaddr, op & ~FUTEX_PRIVATE_FLAG,
 			val, timeout, uaddr2, val2, val3, retval);
 }
+
+#define	LINUX_EFD_SEMAPHORE	0x0001
+#define	LINUX_EFD_CLOEXEC	LINUX_O_CLOEXEC
+#define	LINUX_EFD_NONBLOCK	LINUX_O_NONBLOCK
+
+static int
+linux_do_eventfd2(struct lwp *l, unsigned int initval, int flags,
+    register_t *retval)
+{
+	int nflags = 0;
+
+	if (flags & ~(LINUX_EFD_SEMAPHORE | LINUX_EFD_CLOEXEC |
+		      LINUX_EFD_NONBLOCK)) {
+		return EINVAL;
+	}
+	if (flags & LINUX_EFD_SEMAPHORE) {
+		nflags |= EFD_SEMAPHORE;
+	}
+	if (flags & LINUX_EFD_CLOEXEC) {
+		nflags |= EFD_CLOEXEC;
+	}
+	if (flags & LINUX_EFD_NONBLOCK) {
+		nflags |= EFD_NONBLOCK;
+	}
+
+	return do_eventfd(l, initval, nflags, retval);
+}
+
+int
+linux_sys_eventfd(struct lwp *l, const struct linux_sys_eventfd_args *uap,
+    register_t *retval)
+{
+	/* {
+		syscallarg(unsigned int) initval;
+	} */
+
+	return linux_do_eventfd2(l, SCARG(uap, initval), 0, retval);
+}
+
+int
+linux_sys_eventfd2(struct lwp *l, const struct linux_sys_eventfd2_args *uap,
+    register_t *retval)
+{
+	/* {
+		syscallarg(unsigned int) initval;
+		syscallarg(int) flags;
+	} */
+
+	return linux_do_eventfd2(l, SCARG(uap, initval), SCARG(uap, flags),
+				 retval);
+}

Index: src/sys/compat/linux32/arch/amd64/syscalls.master
diff -u src/sys/compat/linux32/arch/amd64/syscalls.master:1.73 src/sys/compat/linux32/arch/amd64/syscalls.master:1.74
--- src/sys/compat/linux32/arch/amd64/syscalls.master:1.73	Sun Sep 19 23:51:37 2021
+++ src/sys/compat/linux32/arch/amd64/syscalls.master	Mon Sep 20 00:09:02 2021
@@ -1,4 +1,4 @@
-	$NetBSD: syscalls.master,v 1.73 2021/09/19 23:51:37 thorpej Exp $
+	$NetBSD: syscalls.master,v 1.74 2021/09/20 00:09:02 thorpej Exp $
 
 ; NetBSD i386 COMPAT_LINUX32 system call name/number "master" file.
 ; (See syscalls.conf to see what it is processed into.)
@@ -552,7 +552,7 @@
 321	UNIMPL	signalfd
 322	NOARGS	{ int|linux_sys||timerfd_create(clockid_t clock_id, \
 		    int flags); }
-323	UNIMPL	eventfd
+323	STD	{ int|linux32_sys||eventfd(unsigned int initval); }
 324	STD	{ int|linux32_sys||fallocate(int fd, int mode, \
 			    off_t offset, off_t len); }
 325	STD	{ int|linux32_sys||timerfd_settime(int fd, int flags, \
@@ -561,7 +561,8 @@
 326	STD	{ int|linux32_sys||timerfd_gettime(int fd, \
 		    struct linux32_itimerspec *tim); }
 327	UNIMPL	signalfd4
-328	UNIMPL	eventfd2
+328	STD	{ int|linux32_sys||eventfd2(unsigned int initval, \
+		    int flags); }
 329	UNIMPL	epoll_create1
 330	STD	{ int|linux32_sys||dup3(int from, int to, int flags); }
 331     STD	{ int|linux32_sys||pipe2(netbsd32_intp fd, int flags); }

Index: src/sys/compat/linux32/common/linux32_misc.c
diff -u src/sys/compat/linux32/common/linux32_misc.c:1.31 src/sys/compat/linux32/common/linux32_misc.c:1.32
--- src/sys/compat/linux32/common/linux32_misc.c:1.31	Sun Sep 19 22:32:45 2021
+++ src/sys/compat/linux32/common/linux32_misc.c	Mon Sep 20 00:09:02 2021
@@ -1,4 +1,4 @@
-/*	$NetBSD: linux32_misc.c,v 1.31 2021/09/19 22:32:45 thorpej Exp $	*/
+/*	$NetBSD: linux32_misc.c,v 1.32 2021/09/20 00:09:02 thorpej Exp $	*/
 
 /*-
  * Copyright (c) 1995, 1998, 1999 The NetBSD Foundation, Inc.
@@ -32,7 +32,7 @@
  */
 
 #include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: linux32_misc.c,v 1.31 2021/09/19 22:32:45 thorpej Exp $");
+__KERNEL_RCSID(0, "$NetBSD: linux32_misc.c,v 1.32 2021/09/20 00:09:02 thorpej Exp $");
 
 #include <sys/param.h>
 #include <sys/proc.h>
@@ -350,3 +350,33 @@ linux32_sys_ppoll(struct lwp *l, const s
 	return pollcommon(retval, SCARG_P32(uap, fds), SCARG(uap, nfds),
 	    ts, sigmask);
 }
+
+int
+linux32_sys_eventfd(struct lwp *l, const struct linux32_sys_eventfd_args *uap,
+    register_t *retval)
+{
+	/* {
+		syscallarg(unsigned int) initval;
+	} */
+	struct linux_sys_eventfd_args ua;
+
+	NETBSD32TO64_UAP(initval);
+
+	return linux_sys_eventfd(l, &ua, retval);
+}
+
+int
+linux32_sys_eventfd2(struct lwp *l, const struct linux32_sys_eventfd2_args *uap,
+    register_t *retval)
+{
+	/* {
+		syscallarg(unsigned int) initval;
+		syscallarg(int) flags;
+	} */
+	struct linux_sys_eventfd2_args ua;
+
+	NETBSD32TO64_UAP(initval);
+	NETBSD32TO64_UAP(flags);
+
+	return linux_sys_eventfd2(l, &ua, retval);
+}

Reply via email to