From: Eliezer Tamir <eliezer.tamir@linux.intel.com>
To: David Miller <davem@davemloft.net>
Cc: linux-kernel@vger.kernel.org, netdev@vger.kernel.org,
Jesse Brandeburg <jesse.brandeburg@intel.com>,
Don Skidmore <donald.c.skidmore@intel.com>,
e1000-devel@lists.sourceforge.net,
Willem de Bruijn <willemb@google.com>,
Eric Dumazet <erdnetdev@gmail.com>,
Ben Hutchings <bhutchings@solarflare.com>,
Andi Kleen <andi@firstfloor.org>, HPA <hpa@zytor.com>,
Eilon Greenstien <eilong@broadcom.com>,
Or Gerlitz <or.gerlitz@gmail.com>,
Amir Vadai <amirv@mellanox.com>,
Eliezer Tamir <eliezer@tamir.org.il>
Subject: [PATCH v10 net-next 3/6] udp: add low latency socket poll support
Date: Mon, 10 Jun 2013 11:40:00 +0300 [thread overview]
Message-ID: <20130610084000.6955.20487.stgit@ladj378.jer.intel.com> (raw)
In-Reply-To: <20130610083929.6955.87206.stgit@ladj378.jer.intel.com>
Add upport for busy-polling on UDP sockets.
In __udp[46]_lib_rcv add a call to sk_mark_ll() to copy the napi_id
from the skb into the sk.
This is done at the earliest possible moment, right after we identify
which socket this skb is for.
In __skb_recv_datagram When there is no data and the user
tries to read we busy poll.
Signed-off-by: Alexander Duyck <alexander.h.duyck@intel.com>
Signed-off-by: Jesse Brandeburg <jesse.brandeburg@intel.com>
Signed-off-by: Eliezer Tamir <eliezer.tamir@linux.intel.com>
---
net/core/datagram.c | 4 ++++
net/ipv4/udp.c | 6 +++++-
net/ipv6/udp.c | 6 +++++-
3 files changed, 14 insertions(+), 2 deletions(-)
diff --git a/net/core/datagram.c b/net/core/datagram.c
index b71423d..9cbaba9 100644
--- a/net/core/datagram.c
+++ b/net/core/datagram.c
@@ -56,6 +56,7 @@
#include <net/sock.h>
#include <net/tcp_states.h>
#include <trace/events/skb.h>
+#include <net/ll_poll.h>
/*
* Is a socket 'connection oriented' ?
@@ -207,6 +208,9 @@ struct sk_buff *__skb_recv_datagram(struct sock *sk, unsigned int flags,
}
spin_unlock_irqrestore(&queue->lock, cpu_flags);
+ if (sk_valid_ll(sk) && sk_poll_ll(sk, flags & MSG_DONTWAIT))
+ continue;
+
/* User doesn't want to wait */
error = -EAGAIN;
if (!timeo)
diff --git a/net/ipv4/udp.c b/net/ipv4/udp.c
index c7338ec..2955b25 100644
--- a/net/ipv4/udp.c
+++ b/net/ipv4/udp.c
@@ -109,6 +109,7 @@
#include <trace/events/udp.h>
#include <linux/static_key.h>
#include <trace/events/skb.h>
+#include <net/ll_poll.h>
#include "udp_impl.h"
struct udp_table udp_table __read_mostly;
@@ -1709,7 +1710,10 @@ int __udp4_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
sk = __udp4_lib_lookup_skb(skb, uh->source, uh->dest, udptable);
if (sk != NULL) {
- int ret = udp_queue_rcv_skb(sk, skb);
+ int ret;
+
+ sk_mark_ll(sk, skb);
+ ret = udp_queue_rcv_skb(sk, skb);
sock_put(sk);
/* a return value > 0 means to resubmit the input, but
diff --git a/net/ipv6/udp.c b/net/ipv6/udp.c
index b580853..f77e34c 100644
--- a/net/ipv6/udp.c
+++ b/net/ipv6/udp.c
@@ -46,6 +46,7 @@
#include <net/ip6_checksum.h>
#include <net/xfrm.h>
#include <net/inet6_hashtables.h>
+#include <net/ll_poll.h>
#include <linux/proc_fs.h>
#include <linux/seq_file.h>
@@ -841,7 +842,10 @@ int __udp6_lib_rcv(struct sk_buff *skb, struct udp_table *udptable,
*/
sk = __udp6_lib_lookup_skb(skb, uh->source, uh->dest, udptable);
if (sk != NULL) {
- int ret = udpv6_queue_rcv_skb(sk, skb);
+ int ret;
+
+ sk_mark_ll(sk, skb);
+ ret = udpv6_queue_rcv_skb(sk, skb);
sock_put(sk);
/* a return value > 0 means to resubmit the input, but
next prev parent reply other threads:[~2013-06-10 8:40 UTC|newest]
Thread overview: 25+ messages / expand[flat|nested] mbox.gz Atom feed top
2013-06-10 8:39 [PATCH v10 net-next 0/6] net: low latency Ethernet device polling Eliezer Tamir
2013-06-10 8:39 ` [PATCH v10 net-next 1/6] net: add napi_id and hash Eliezer Tamir
2013-06-10 9:22 ` Eric Dumazet
2013-06-10 16:38 ` Willem de Bruijn
2013-06-10 8:39 ` [PATCH v10 net-next 2/6] net: add low latency socket poll Eliezer Tamir
2013-06-10 14:29 ` Eric Dumazet
2013-06-10 16:36 ` Willem de Bruijn
2013-06-10 8:40 ` Eliezer Tamir [this message]
2013-06-10 14:31 ` [PATCH v10 net-next 3/6] udp: add low latency socket poll support Eric Dumazet
2013-06-10 16:38 ` Willem de Bruijn
2013-06-10 8:40 ` [PATCH v10 net-next 4/6] tcp: " Eliezer Tamir
2013-06-10 14:32 ` Eric Dumazet
2013-06-10 16:38 ` Willem de Bruijn
2013-06-10 8:40 ` [PATCH v10 net-next 5/6] ixgbe: add support for ndo_ll_poll Eliezer Tamir
2013-06-10 14:59 ` Eric Dumazet
2013-06-11 21:40 ` Keller, Jacob E
2013-06-10 8:40 ` [PATCH v10 net-next 6/6] ixgbe: add extra stats " Eliezer Tamir
2013-06-10 20:41 ` [PATCH v10 net-next 0/6] net: low latency Ethernet device polling David Miller
2013-06-11 2:25 ` Eliezer Tamir
2013-06-11 4:24 ` David Miller
2013-06-11 6:49 ` Eliezer Tamir
2013-06-11 7:32 ` Eric Dumazet
2013-06-11 9:29 ` Eliezer Tamir
2013-06-11 8:14 ` David Miller
2013-06-11 12:49 ` Eliezer Tamir
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=20130610084000.6955.20487.stgit@ladj378.jer.intel.com \
--to=eliezer.tamir@linux.intel.com \
--cc=amirv@mellanox.com \
--cc=andi@firstfloor.org \
--cc=bhutchings@solarflare.com \
--cc=davem@davemloft.net \
--cc=donald.c.skidmore@intel.com \
--cc=e1000-devel@lists.sourceforge.net \
--cc=eilong@broadcom.com \
--cc=eliezer@tamir.org.il \
--cc=erdnetdev@gmail.com \
--cc=hpa@zytor.com \
--cc=jesse.brandeburg@intel.com \
--cc=linux-kernel@vger.kernel.org \
--cc=netdev@vger.kernel.org \
--cc=or.gerlitz@gmail.com \
--cc=willemb@google.com \
/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 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.