@@ -474,3 +474,5 @@
542 common fsmount sys_fsmount
543 common fspick sys_fspick
544 common pidfd_open sys_pidfd_open
+# 546 common clone3 sys_clone3
+547 common epoll_create2 sys_epoll_create2
@@ -449,3 +449,4 @@
433 common fspick sys_fspick
434 common pidfd_open sys_pidfd_open
436 common clone3 sys_clone3
+437 common epoll_create2 sys_epoll_create2
@@ -44,7 +44,7 @@
#define __ARM_NR_compat_set_tls (__ARM_NR_COMPAT_BASE + 5)
#define __ARM_NR_COMPAT_END (__ARM_NR_COMPAT_BASE + 0x800)
-#define __NR_compat_syscalls 437
+#define __NR_compat_syscalls 438
#endif
#define __ARCH_WANT_SYS_CLONE
@@ -890,6 +890,8 @@ __SYSCALL(__NR_fspick, sys_fspick)
__SYSCALL(__NR_pidfd_open, sys_pidfd_open)
#define __NR_clone3 436
__SYSCALL(__NR_clone3, sys_clone3)
+#define __NR_epoll_create2 437
+__SYSCALL(__NR_epoll_create2, sys_epoll_create2)
/*
* Please add new compat syscalls above this comment and update
@@ -355,3 +355,5 @@
432 common fsmount sys_fsmount
433 common fspick sys_fspick
434 common pidfd_open sys_pidfd_open
+# 436 common clone3 sys_clone3
+437 common epoll_create2 sys_epoll_create2
@@ -434,3 +434,5 @@
432 common fsmount sys_fsmount
433 common fspick sys_fspick
434 common pidfd_open sys_pidfd_open
+# 436 common clone3 sys_clone3
+437 common epoll_create2 sys_epoll_create2
@@ -441,3 +441,4 @@
433 common fspick sys_fspick
434 common pidfd_open sys_pidfd_open
436 common clone3 sys_clone3
+437 common epoll_create2 sys_epoll_create2
@@ -373,3 +373,5 @@
432 n32 fsmount sys_fsmount
433 n32 fspick sys_fspick
434 n32 pidfd_open sys_pidfd_open
+# 436 n32 clone3 sys_clone3
+437 n32 epoll_create2 sys_epoll_create2
@@ -349,3 +349,5 @@
432 n64 fsmount sys_fsmount
433 n64 fspick sys_fspick
434 n64 pidfd_open sys_pidfd_open
+# 436 n64 clone3 sys_clone3
+437 n64 epoll_create2 sys_epoll_create2
@@ -422,3 +422,5 @@
432 o32 fsmount sys_fsmount
433 o32 fspick sys_fspick
434 o32 pidfd_open sys_pidfd_open
+# 436 o32 clone3 sys_clone3
+437 o32 epoll_create2 sys_epoll_create2
@@ -431,3 +431,5 @@
432 common fsmount sys_fsmount
433 common fspick sys_fspick
434 common pidfd_open sys_pidfd_open
+# 436 common clone3 sys_clone3
+437 common epoll_create2 sys_epoll_create2
@@ -516,3 +516,5 @@
432 common fsmount sys_fsmount
433 common fspick sys_fspick
434 common pidfd_open sys_pidfd_open
+# 436 common clone3 sys_clone3
+437 common epoll_create2 sys_epoll_create2
@@ -437,3 +437,5 @@
432 common fsmount sys_fsmount sys_fsmount
433 common fspick sys_fspick sys_fspick
434 common pidfd_open sys_pidfd_open sys_pidfd_open
+# 436 common clone3 sys_clone3 sys_clone3
+437 common epoll_create2 sys_epoll_create2 sys_epoll_create2
@@ -437,3 +437,5 @@
432 common fsmount sys_fsmount
433 common fspick sys_fspick
434 common pidfd_open sys_pidfd_open
+# 436 common clone3 sys_clone3
+437 common epoll_create2 sys_epoll_create2
@@ -480,3 +480,5 @@
432 common fsmount sys_fsmount
433 common fspick sys_fspick
434 common pidfd_open sys_pidfd_open
+# 436 common clone3 sys_clone3
+437 common epoll_create2 sys_epoll_create2
@@ -440,3 +440,4 @@
433 i386 fspick sys_fspick __ia32_sys_fspick
434 i386 pidfd_open sys_pidfd_open __ia32_sys_pidfd_open
436 i386 clone3 sys_clone3 __ia32_sys_clone3
+437 i386 epoll_create2 sys_epoll_create2 __ia32_sys_epoll_create2
@@ -357,6 +357,7 @@
433 common fspick __x64_sys_fspick
434 common pidfd_open __x64_sys_pidfd_open
436 common clone3 __x64_sys_clone3/ptregs
+437 common epoll_create2 __x64_sys_epoll_create2
#
# x32-specific system call numbers start at 512 to avoid cache impact
@@ -406,3 +406,4 @@
433 common fspick sys_fspick
434 common pidfd_open sys_pidfd_open
436 common clone3 sys_clone3
+437 common epoll_create2 sys_epoll_create2
@@ -2799,6 +2799,11 @@ static int do_epoll_create(int flags, size_t size)
return error;
}
+SYSCALL_DEFINE2(epoll_create2, int, flags, size_t, size)
+{
+ return do_epoll_create(flags, size);
+}
+
SYSCALL_DEFINE1(epoll_create1, int, flags)
{
return do_epoll_create(flags, 0);
@@ -357,6 +357,7 @@ asmlinkage long sys_eventfd2(unsigned int count, int flags);
/* fs/eventpoll.c */
asmlinkage long sys_epoll_create1(int flags);
+asmlinkage long sys_epoll_create2(int flags, size_t size);
asmlinkage long sys_epoll_ctl(int epfd, int op, int fd,
struct epoll_event __user *event);
asmlinkage long sys_epoll_pwait(int epfd, struct epoll_event __user *events,
@@ -848,9 +848,11 @@ __SYSCALL(__NR_fspick, sys_fspick)
__SYSCALL(__NR_pidfd_open, sys_pidfd_open)
#define __NR_clone3 436
__SYSCALL(__NR_clone3, sys_clone3)
+#define __NR_epoll_create2 437
+__SYSCALL(__NR_epoll_create2, sys_epoll_create2)
#undef __NR_syscalls
-#define __NR_syscalls 437
+#define __NR_syscalls 438
/*
* 32 bit systems traditionally used different
@@ -65,6 +65,7 @@ COND_SYSCALL(eventfd2);
/* fs/eventfd.c */
COND_SYSCALL(epoll_create1);
+COND_SYSCALL(epoll_create2);
COND_SYSCALL(epoll_ctl);
COND_SYSCALL(epoll_pwait);
COND_SYSCALL_COMPAT(epoll_pwait);
epoll_create2() is needed to accept EPOLL_USERPOLL flags and size, i.e. this patch wires up polling from userspace. Signed-off-by: Roman Penyaev <rpenyaev@suse.de> Cc: Andrew Morton <akpm@linux-foundation.org> Cc: Al Viro <viro@zeniv.linux.org.uk> Cc: Arnd Bergmann <arnd@arndb.de> Cc: Linus Torvalds <torvalds@linux-foundation.org> Cc: linux-fsdevel@vger.kernel.org Cc: linux-kernel@vger.kernel.org --- Hi Arnd, I am not sure is that correct, especially for alpha, because clone3() is missing for some archs. I noticed that clone3() follows with a gap, so I kept the same for all archs. Could you please take a look. arch/alpha/kernel/syscalls/syscall.tbl | 2 ++ arch/arm/tools/syscall.tbl | 1 + arch/arm64/include/asm/unistd.h | 2 +- arch/arm64/include/asm/unistd32.h | 2 ++ arch/ia64/kernel/syscalls/syscall.tbl | 2 ++ arch/m68k/kernel/syscalls/syscall.tbl | 2 ++ arch/microblaze/kernel/syscalls/syscall.tbl | 1 + arch/mips/kernel/syscalls/syscall_n32.tbl | 2 ++ arch/mips/kernel/syscalls/syscall_n64.tbl | 2 ++ arch/mips/kernel/syscalls/syscall_o32.tbl | 2 ++ arch/parisc/kernel/syscalls/syscall.tbl | 2 ++ arch/powerpc/kernel/syscalls/syscall.tbl | 2 ++ arch/s390/kernel/syscalls/syscall.tbl | 2 ++ arch/sh/kernel/syscalls/syscall.tbl | 2 ++ arch/sparc/kernel/syscalls/syscall.tbl | 2 ++ arch/x86/entry/syscalls/syscall_32.tbl | 1 + arch/x86/entry/syscalls/syscall_64.tbl | 1 + arch/xtensa/kernel/syscalls/syscall.tbl | 1 + fs/eventpoll.c | 5 +++++ include/linux/syscalls.h | 1 + include/uapi/asm-generic/unistd.h | 4 +++- kernel/sys_ni.c | 1 + 22 files changed, 40 insertions(+), 2 deletions(-)