Received: by 2002:ad5:474a:0:0:0:0:0 with SMTP id i10csp6619680imu; Mon, 21 Jan 2019 12:17:05 -0800 (PST) X-Google-Smtp-Source: ALg8bN58nOty6Dm3PzhYBjFNMbnQMdct++xJUYUGHq+3Vo/ZiY1arkRG8bAvlOcVA5t94egdE77L X-Received: by 2002:a63:2109:: with SMTP id h9mr29084062pgh.277.1548101825747; Mon, 21 Jan 2019 12:17:05 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1548101825; cv=none; d=google.com; s=arc-20160816; b=Dxvh5Uzjed6tXTRQlay73ad9kz6ZFVamBxVHO0lg6gCOdHMSEZWuJ17UVQoWLe6dJN Mlrnwr63nW/QhDPKOp7mmtZp8P507lYxl6vDZ00En3EXp+DXOi2qgiO8lkKr88/UXv9I Dxn0oTBlEzruKQpeU7QFsEn1N4A7fAOiiGJt/cn+Nr2unBv2OXXEgnutzTSemBBEu0s8 CtpMGFFw+BNbNTX02mXIRPnd0JCN4YJMFa5ci6Rf1SkmqaLP36DoXiygbkj5rNT0E2/W E38dh/beZaQacLf1Libc/cs76mpTNdimBt5SJTtjHEscBqGTLd/HUAcw37wQYlKvJjL6 RCWg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:to:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:from; bh=TqIRcdbgSDf90ryK8Jlu9nZQ/Amf6BqKA29syQBlmew=; b=T01L1P8OaqOd22+C5QHhTS9ciBQ/bcd2RyGBJ3Bi0uTY4vGQaPM4XSw9RUcqGvlJ5m TgJ4sytv5AUQMqRYcX8hrknp/11Xd19PGNtg+6P8YJqkqY9a560Xw9dZ1fgz0cEEj7xJ v0oWRsMLzThfXHQGFmHXDG9cvqeUg3WfgSYGeNK95gq4rcicMOknwh/oRzCIXP8DtXNL YwEGDvAKe7938Nw6cAPM/3lpQea3w5Mm9ihUtyLhpt4NTZXNUOZWa2Ss/vbL1JnrkAou mMOt0Qyv6UmSz1n/DnKshzDv3K7mhxWOy0UGWZxiVYlCe9Eh/T+F5QTJMZdrrwPR8/NX h4vA== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id q64si11753497pga.280.2019.01.21.12.16.50; Mon, 21 Jan 2019 12:17:05 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1728416AbfAUUPc (ORCPT + 99 others); Mon, 21 Jan 2019 15:15:32 -0500 Received: from mx2.suse.de ([195.135.220.15]:55626 "EHLO mx1.suse.de" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1728330AbfAUUPT (ORCPT ); Mon, 21 Jan 2019 15:15:19 -0500 X-Virus-Scanned: by amavisd-new at test-mx.suse.de Received: from relay2.suse.de (unknown [195.135.220.254]) by mx1.suse.de (Postfix) with ESMTP id D8D96AFFF; Mon, 21 Jan 2019 20:15:17 +0000 (UTC) From: Roman Penyaev Cc: Roman Penyaev , Andrew Morton , Davidlohr Bueso , Jason Baron , Al Viro , "Paul E. McKenney" , Linus Torvalds , Andrea Parri , 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 Message-Id: <20190121201456.28338-14-rpenyaev@suse.de> X-Mailer: git-send-email 2.19.1 In-Reply-To: <20190121201456.28338-1-rpenyaev@suse.de> References: <20190121201456.28338-1-rpenyaev@suse.de> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit To: unlisted-recipients:; (no To-header on input) Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 Cc: Andrew Morton Cc: Davidlohr Bueso Cc: Jason Baron Cc: Al Viro Cc: "Paul E. McKenney" Cc: Linus Torvalds Cc: Andrea Parri 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