From: Christoph Hellwig <hch@lst.de> To: viro@zeniv.linux.org.uk Cc: Avi Kivity <avi@scylladb.com>, linux-aio@kvack.org, linux-fsdevel@vger.kernel.org, netdev@vger.kernel.org, linux-api@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 11/32] net: refactor socket_poll Date: Tue, 15 May 2018 21:48:12 +0200 [thread overview] Message-ID: <20180515194833.6906-12-hch@lst.de> (raw) In-Reply-To: <20180515194833.6906-1-hch@lst.de> Factor out two busy poll related helpers for late reuse, and remove a command that isn't very helpful, especially with the __poll_t annotations in place. Signed-off-by: Christoph Hellwig <hch@lst.de> --- include/net/busy_poll.h | 15 +++++++++++++++ net/socket.c | 21 ++++----------------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/include/net/busy_poll.h b/include/net/busy_poll.h index 71c72a939bf8..c5187438af38 100644 --- a/include/net/busy_poll.h +++ b/include/net/busy_poll.h @@ -121,6 +121,21 @@ static inline void sk_busy_loop(struct sock *sk, int nonblock) #endif } +static inline void sock_poll_busy_loop(struct socket *sock, __poll_t events) +{ + if (sk_can_busy_loop(sock->sk) && + events && (events & POLL_BUSY_LOOP)) { + /* once, only if requested by syscall */ + sk_busy_loop(sock->sk, 1); + } +} + +/* if this socket can poll_ll, tell the system call */ +static inline __poll_t sock_poll_busy_flag(struct socket *sock) +{ + return sk_can_busy_loop(sock->sk) ? POLL_BUSY_LOOP : 0; +} + /* used in the NIC receive handler to mark the skb */ static inline void skb_mark_napi_id(struct sk_buff *skb, struct napi_struct *napi) diff --git a/net/socket.c b/net/socket.c index f10f1d947c78..571ee4005192 100644 --- a/net/socket.c +++ b/net/socket.c @@ -1117,24 +1117,11 @@ EXPORT_SYMBOL(sock_create_lite); /* No kernel lock held - perfect */ static __poll_t sock_poll(struct file *file, poll_table *wait) { - __poll_t busy_flag = 0; - struct socket *sock; - - /* - * We can't return errors to poll, so it's either yes or no. - */ - sock = file->private_data; - - if (sk_can_busy_loop(sock->sk)) { - /* this socket can poll_ll so tell the system call */ - busy_flag = POLL_BUSY_LOOP; - - /* once, only if requested by syscall */ - if (wait && (wait->_key & POLL_BUSY_LOOP)) - sk_busy_loop(sock->sk, 1); - } + struct socket *sock = file->private_data; + __poll_t events = poll_requested_events(wait); - return busy_flag | sock->ops->poll(file, sock, wait); + sock_poll_busy_loop(sock, events); + return sock->ops->poll(file, sock, wait) | sock_poll_busy_flag(sock); } static int sock_mmap(struct file *file, struct vm_area_struct *vma) -- 2.17.0
WARNING: multiple messages have this Message-ID (diff)
From: Christoph Hellwig <hch@lst.de> To: viro@zeniv.linux.org.uk Cc: Avi Kivity <avi@scylladb.com>, linux-aio@kvack.org, linux-fsdevel@vger.kernel.org, netdev@vger.kernel.org, linux-api@vger.kernel.org, linux-kernel@vger.kernel.org Subject: [PATCH 11/32] net: refactor socket_poll Date: Tue, 15 May 2018 21:48:12 +0200 [thread overview] Message-ID: <20180515194833.6906-12-hch@lst.de> (raw) In-Reply-To: <20180515194833.6906-1-hch@lst.de> Factor out two busy poll related helpers for late reuse, and remove a command that isn't very helpful, especially with the __poll_t annotations in place. Signed-off-by: Christoph Hellwig <hch@lst.de> --- include/net/busy_poll.h | 15 +++++++++++++++ net/socket.c | 21 ++++----------------- 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/include/net/busy_poll.h b/include/net/busy_poll.h index 71c72a939bf8..c5187438af38 100644 --- a/include/net/busy_poll.h +++ b/include/net/busy_poll.h @@ -121,6 +121,21 @@ static inline void sk_busy_loop(struct sock *sk, int nonblock) #endif } +static inline void sock_poll_busy_loop(struct socket *sock, __poll_t events) +{ + if (sk_can_busy_loop(sock->sk) && + events && (events & POLL_BUSY_LOOP)) { + /* once, only if requested by syscall */ + sk_busy_loop(sock->sk, 1); + } +} + +/* if this socket can poll_ll, tell the system call */ +static inline __poll_t sock_poll_busy_flag(struct socket *sock) +{ + return sk_can_busy_loop(sock->sk) ? POLL_BUSY_LOOP : 0; +} + /* used in the NIC receive handler to mark the skb */ static inline void skb_mark_napi_id(struct sk_buff *skb, struct napi_struct *napi) diff --git a/net/socket.c b/net/socket.c index f10f1d947c78..571ee4005192 100644 --- a/net/socket.c +++ b/net/socket.c @@ -1117,24 +1117,11 @@ EXPORT_SYMBOL(sock_create_lite); /* No kernel lock held - perfect */ static __poll_t sock_poll(struct file *file, poll_table *wait) { - __poll_t busy_flag = 0; - struct socket *sock; - - /* - * We can't return errors to poll, so it's either yes or no. - */ - sock = file->private_data; - - if (sk_can_busy_loop(sock->sk)) { - /* this socket can poll_ll so tell the system call */ - busy_flag = POLL_BUSY_LOOP; - - /* once, only if requested by syscall */ - if (wait && (wait->_key & POLL_BUSY_LOOP)) - sk_busy_loop(sock->sk, 1); - } + struct socket *sock = file->private_data; + __poll_t events = poll_requested_events(wait); - return busy_flag | sock->ops->poll(file, sock, wait); + sock_poll_busy_loop(sock, events); + return sock->ops->poll(file, sock, wait) | sock_poll_busy_flag(sock); } static int sock_mmap(struct file *file, struct vm_area_struct *vma) -- 2.17.0 -- To unsubscribe, send a message with 'unsubscribe linux-aio' in the body to majordomo@kvack.org. For more info on Linux AIO, see: http://www.kvack.org/aio/ Don't email: <a href=mailto:"aart@kvack.org">aart@kvack.org</a>
next prev parent reply other threads:[~2018-05-15 19:57 UTC|newest] Thread overview: 77+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-05-15 19:48 aio poll and a new in-kernel poll API V11 Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 01/32] fs: unexport poll_schedule_timeout Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 02/32] fs: cleanup do_pollfd Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 03/32] fs: update documentation to mention __poll_t and match the code Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 04/32] fs: add new vfs_poll and file_can_poll helpers Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 05/32] fs: introduce new ->get_poll_head and ->poll_mask methods Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 06/32] aio: simplify KIOCB_KEY handling Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 07/32] aio: simplify cancellation Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 08/32] aio: replace kiocb_set_cancel_fn with a cancel_kiocb file operation Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-20 5:27 ` Al Viro 2018-05-20 5:27 ` Al Viro 2018-05-15 19:48 ` [PATCH 09/32] aio: add delayed cancel support Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 10/32] aio: implement IOCB_CMD_POLL Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-20 5:32 ` Al Viro 2018-05-20 5:32 ` Al Viro 2018-05-20 7:33 ` Al Viro 2018-05-20 7:33 ` Al Viro 2018-05-20 17:32 ` Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig [this message] 2018-05-15 19:48 ` [PATCH 11/32] net: refactor socket_poll Christoph Hellwig 2018-05-15 19:48 ` [PATCH 12/32] net: add support for ->poll_mask in proto_ops Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 13/32] net: remove sock_no_poll Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 14/32] net/tcp: convert to ->poll_mask Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 15/32] net/unix: " Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 16/32] net: convert datagram_poll users tp ->poll_mask Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 17/32] net/dccp: convert to ->poll_mask Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 18/32] net/atm: " Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 19/32] net/vmw_vsock: " Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 20/32] net/tipc: " Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 21/32] net/sctp: " Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 22/32] net/bluetooth: " Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 23/32] net/caif: " Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 24/32] net/nfc: " Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 25/32] net/phonet: " Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 26/32] net/iucv: " Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 27/32] net/rxrpc: " Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 28/32] crypto: af_alg: " Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 29/32] pipe: " Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 30/32] eventfd: switch " Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 31/32] timerfd: convert " Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig 2018-05-15 19:48 ` [PATCH 32/32] random: " Christoph Hellwig 2018-05-15 19:48 ` Christoph Hellwig -- strict thread matches above, loose matches on Subject: below -- 2018-05-11 11:07 aio poll and a new in-kernel poll API V10 Christoph Hellwig 2018-05-11 11:07 ` [PATCH 11/32] net: refactor socket_poll Christoph Hellwig 2018-05-11 11:07 ` Christoph Hellwig 2018-03-30 15:07 aio poll and a new in-kernel poll API V9 Christoph Hellwig 2018-03-30 15:07 ` [PATCH 11/32] net: refactor socket_poll Christoph Hellwig 2018-03-30 15:07 ` Christoph Hellwig
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=20180515194833.6906-12-hch@lst.de \ --to=hch@lst.de \ --cc=avi@scylladb.com \ --cc=linux-aio@kvack.org \ --cc=linux-api@vger.kernel.org \ --cc=linux-fsdevel@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=netdev@vger.kernel.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: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes, see mirroring instructions on how to clone and mirror all data and code used by this external index.