linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Roman Penyaev <rpenyaev@suse.de>
To: unlisted-recipients:; (no To-header on input)
Cc: Roman Penyaev <rpenyaev@suse.de>,
	Andrew Morton <akpm@linux-foundation.org>,
	Davidlohr Bueso <dbueso@suse.de>, Jason Baron <jbaron@akamai.com>,
	Al Viro <viro@zeniv.linux.org.uk>,
	"Paul E. McKenney" <paulmck@linux.vnet.ibm.com>,
	Linus Torvalds <torvalds@linux-foundation.org>,
	Andrea Parri <andrea.parri@amarulasolutions.com>,
	linux-fsdevel@vger.kernel.org, linux-kernel@vger.kernel.org
Subject: [RFC PATCH v2 13/13] epoll: implement epoll_create2() syscall
Date: Mon, 21 Jan 2019 21:14:56 +0100	[thread overview]
Message-ID: <20190121201456.28338-14-rpenyaev@suse.de> (raw)
In-Reply-To: <20190121201456.28338-1-rpenyaev@suse.de>

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: Davidlohr Bueso <dbueso@suse.de>
Cc: Jason Baron <jbaron@akamai.com>
Cc: Al Viro <viro@zeniv.linux.org.uk>
Cc: "Paul E. McKenney" <paulmck@linux.vnet.ibm.com>
Cc: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Andrea Parri <andrea.parri@amarulasolutions.com>
Cc: linux-fsdevel@vger.kernel.org
Cc: linux-kernel@vger.kernel.org
---
 arch/x86/entry/syscalls/syscall_32.tbl | 1 +
 arch/x86/entry/syscalls/syscall_64.tbl | 1 +
 fs/eventpoll.c                         | 8 ++++++++
 include/linux/syscalls.h               | 1 +
 include/uapi/asm-generic/unistd.h      | 4 +++-
 kernel/sys_ni.c                        | 1 +
 6 files changed, 15 insertions(+), 1 deletion(-)

diff --git a/arch/x86/entry/syscalls/syscall_32.tbl b/arch/x86/entry/syscalls/syscall_32.tbl
index 6804c1e84b36..3247f49b1325 100644
--- a/arch/x86/entry/syscalls/syscall_32.tbl
+++ b/arch/x86/entry/syscalls/syscall_32.tbl
@@ -399,3 +399,4 @@
 385	i386	io_pgetevents		sys_io_pgetevents		__ia32_compat_sys_io_pgetevents
 386	i386	rseq			sys_rseq			__ia32_sys_rseq
 387	i386	pidfd_send_signal	sys_pidfd_send_signal		__ia32_sys_pidfd_send_signal
+388	i386	epoll_create2		sys_epoll_create2		__ia32_sys_epoll_create2
diff --git a/arch/x86/entry/syscalls/syscall_64.tbl b/arch/x86/entry/syscalls/syscall_64.tbl
index aa4b858fa0f1..df7c4f1b4a79 100644
--- a/arch/x86/entry/syscalls/syscall_64.tbl
+++ b/arch/x86/entry/syscalls/syscall_64.tbl
@@ -344,6 +344,7 @@
 333	common	io_pgetevents		__x64_sys_io_pgetevents
 334	common	rseq			__x64_sys_rseq
 335	common	pidfd_send_signal	__x64_sys_pidfd_send_signal
+336	common	epoll_create2		__x64_sys_epoll_create2
 
 #
 # x32-specific system call numbers start at 512 to avoid cache impact
diff --git a/fs/eventpoll.c b/fs/eventpoll.c
index cceeff77bdaf..a759ae591202 100644
--- a/fs/eventpoll.c
+++ b/fs/eventpoll.c
@@ -2611,6 +2611,14 @@ static int do_epoll_create(int flags, size_t size)
 	return error;
 }
 
+SYSCALL_DEFINE2(epoll_create2, int, flags, size_t, size)
+{
+	if (size == 0)
+		return -EINVAL;
+
+	return do_epoll_create(flags, size);
+}
+
 SYSCALL_DEFINE1(epoll_create1, int, flags)
 {
 	return do_epoll_create(flags, 0);
diff --git a/include/linux/syscalls.h b/include/linux/syscalls.h
index 5eb2e351675e..249ea00696a8 100644
--- a/include/linux/syscalls.h
+++ b/include/linux/syscalls.h
@@ -345,6 +345,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,
diff --git a/include/uapi/asm-generic/unistd.h b/include/uapi/asm-generic/unistd.h
index b77538af7aca..a4d686280cb7 100644
--- a/include/uapi/asm-generic/unistd.h
+++ b/include/uapi/asm-generic/unistd.h
@@ -742,9 +742,11 @@ __SYSCALL(__NR_rseq, sys_rseq)
 __SYSCALL(__NR_kexec_file_load,     sys_kexec_file_load)
 #define __NR_pidfd_send_signal 295
 __SYSCALL(__NR_pidfd_send_signal, sys_pidfd_send_signal)
+#define __NR_epoll_create2 296
+__SYSCALL(__NR_epoll_create2, sys_epoll_create2)
 
 #undef __NR_syscalls
-#define __NR_syscalls 296
+#define __NR_syscalls 297
 
 /*
  * 32 bit systems traditionally used different
diff --git a/kernel/sys_ni.c b/kernel/sys_ni.c
index f905f4f9f677..5083bb55fcb2 100644
--- a/kernel/sys_ni.c
+++ b/kernel/sys_ni.c
@@ -60,6 +60,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);
-- 
2.19.1


      parent reply	other threads:[~2019-01-21 20:15 UTC|newest]

Thread overview: 16+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-01-21 20:14 [RFC PATCH v2 00/13] epoll: support pollable epoll from userspace Roman Penyaev
2019-01-21 20:14 ` [RFC PATCH v2 01/13] epoll: move private helpers from a header to the source Roman Penyaev
2019-01-21 20:14 ` [RFC PATCH v2 02/13] epoll: introduce user structures for polling from userspace Roman Penyaev
2019-01-21 21:34   ` Linus Torvalds
2019-01-22 11:46     ` Roman Penyaev
2019-01-21 20:14 ` [RFC PATCH v2 03/13] epoll: allocate user header and user events ring " Roman Penyaev
2019-01-21 20:14 ` [RFC PATCH v2 04/13] epoll: some sanity flags checks for epoll syscalls " Roman Penyaev
2019-01-21 20:14 ` [RFC PATCH v2 05/13] epoll: offload polling to a work in case of epfd polled " Roman Penyaev
2019-01-21 20:14 ` [RFC PATCH v2 06/13] epoll: introduce helpers for adding/removing events to uring Roman Penyaev
2019-01-21 20:14 ` [RFC PATCH v2 07/13] epoll: call ep_add_event_to_uring() from ep_poll_callback() Roman Penyaev
2019-01-21 20:14 ` [RFC PATCH v2 08/13] epoll: support polling from userspace for ep_insert() Roman Penyaev
2019-01-21 20:14 ` [RFC PATCH v2 09/13] epoll: support polling from userspace for ep_remove() Roman Penyaev
2019-01-21 20:14 ` [RFC PATCH v2 10/13] epoll: support polling from userspace for ep_modify() Roman Penyaev
2019-01-21 20:14 ` [RFC PATCH v2 11/13] epoll: support polling from userspace for ep_poll() Roman Penyaev
2019-01-21 20:14 ` [RFC PATCH v2 12/13] epoll: support mapping for epfd when polled from userspace Roman Penyaev
2019-01-21 20:14 ` Roman Penyaev [this message]

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190121201456.28338-14-rpenyaev@suse.de \
    --to=rpenyaev@suse.de \
    --cc=akpm@linux-foundation.org \
    --cc=andrea.parri@amarulasolutions.com \
    --cc=dbueso@suse.de \
    --cc=jbaron@akamai.com \
    --cc=linux-fsdevel@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=paulmck@linux.vnet.ibm.com \
    --cc=torvalds@linux-foundation.org \
    --cc=viro@zeniv.linux.org.uk \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).