Received: by 10.223.176.46 with SMTP id f43csp3339424wra; Mon, 22 Jan 2018 12:24:02 -0800 (PST) X-Google-Smtp-Source: AH8x227zwnkzvyK8Mb0BvE55ykUfePEnb5dOrFNH92fzBJlIlqp2bix0KUJ9XcvAs+NyNI4pZQNs X-Received: by 10.107.4.133 with SMTP id 127mr119553ioe.209.1516652642773; Mon, 22 Jan 2018 12:24:02 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1516652642; cv=none; d=google.com; s=arc-20160816; b=0xM9bnAZJclXI0Ty8GNlmrgxFu77E9JWU7TGwF2gt0Ym7MkwUqg5PBqVndteZiwsay eeaneSyk5r0WULKXqfvNKYzGHSEJFN1poowinhK8yHh774kr/GsT6okQhMXkLieGS7w5 27WJUNbOrMthh6gfZLsdbGjgEWuiyUIAG4LoLft7h527z5pJaqhv7fGk8fyD575dXfbN LoIDHYvLfkYjQmXLwe+JVCTbD2VrSweh1eCkKAmdlUE1vOKF9zQVbgPtpEZ5zGzBgZ1R mT75ANPXJLQ7hGpIP/rcaSL7TN6K33vuaIps5nw0nFW1pM6i2oaF3ZaNxdsMXzSh4Htj RvPQ== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from:dkim-signature:arc-authentication-results; bh=MY2ptnAZYiQQPtXTYgcduxajBY/6NK+w75P5FYXeg6s=; b=RWkqtL38sF12zUshQ0zESrH5K/Va6es6Q88S244lqVFI9AuSJRvnJJyDYi0y37mEC9 Xb998eA1R5rdYf1lxUNQ+9LXhRQnJ2MJkdjMYJrqGYrgv907wyDLu8eKon//JUNqsbZ+ zC+ElaSi6IkyJQ580Ad+QOrvYhfLYy8bUYYBxmmIU4zpMY9pZvIVw+iB1b+OkTz+hqJG lQtuHCMogyMQB/XC3+c4BvklaZScNItcnjyEBI7Ni2fGd8ufdaiaJnRKhSjrWFhEenZ0 ySZMnBYYHdaZBYbUAFXbgMxcmRoXNMSNvaIttFykE6fLar/aLmhQ+wqR4ZI1tLmvyb2q OjHw== ARC-Authentication-Results: i=1; mx.google.com; dkim=fail header.i=@infradead.org header.s=bombadil.20170209 header.b=Oltbx93W; 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 s15si6826768ith.152.2018.01.22.12.23.50; Mon, 22 Jan 2018 12:24:02 -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; dkim=fail header.i=@infradead.org header.s=bombadil.20170209 header.b=Oltbx93W; 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 S1751577AbeAVUNk (ORCPT + 99 others); Mon, 22 Jan 2018 15:13:40 -0500 Received: from bombadil.infradead.org ([65.50.211.133]:56957 "EHLO bombadil.infradead.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1750878AbeAVUNh (ORCPT ); Mon, 22 Jan 2018 15:13:37 -0500 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20170209; h=References:In-Reply-To:Message-Id: Date:Subject:Cc:To:From:Sender:Reply-To:MIME-Version:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=MY2ptnAZYiQQPtXTYgcduxajBY/6NK+w75P5FYXeg6s=; b=Oltbx93Wxht25L/1dQu0C74ls HNQOiC7FtLynXlnVxjY19XXDd2LWofTdjQUPpofWWOxCIXAPxtTYpgyWo9AY0EKZzhedGzfaa/7cp JMvldhsq1+5I524J2yOeQaZi5aqJKCltQb4bFsinXQ7euWX0oTn27QOmeSacTXLzbLAUfSvaWUf1h lJ42+5D+VMLes1Z6iWCLkVNnVMPXHmmOYMyyG1STLv4ew4zu7VtvlPFAytCq7mYgkEWAYIR/L4vrO n9pzMKwgbsk/5PgYlrJKsHmp4E2VFv6RDX2B3YT7HLDQlruFFJV6r/We3eQFbtK/z7YO6EFOFMekK 5NaaP1KxA==; Received: from 178.114.226.247.wireless.dyn.drei.com ([178.114.226.247] helo=localhost) by bombadil.infradead.org with esmtpsa (Exim 4.89 #1 (Red Hat Linux)) id 1ediTH-0007cp-Ab; Mon, 22 Jan 2018 20:13:35 +0000 From: Christoph Hellwig To: viro@zeniv.linux.org.uk Cc: Avi Kivity , 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 15/36] net: refactor socket_poll Date: Mon, 22 Jan 2018 21:12:22 +0100 Message-Id: <20180122201243.31610-16-hch@lst.de> X-Mailer: git-send-email 2.14.2 In-Reply-To: <20180122201243.31610-1-hch@lst.de> References: <20180122201243.31610-1-hch@lst.de> X-SRS-Rewrite: SMTP reverse-path rewritten from by bombadil.infradead.org. See http://www.infradead.org/rpr.html Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org 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 --- 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 092baa464afc..db11e48a375b 100644 --- a/net/socket.c +++ b/net/socket.c @@ -1097,24 +1097,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.14.2