summaryrefslogtreecommitdiffstats
path: root/include
diff options
context:
space:
mode:
authorChangli Gao <xiaosuo@gmail.com>2010-04-27 15:07:33 -0700
committerDavid S. Miller <davem@davemloft.net>2010-04-27 15:11:49 -0700
commit6e7676c1a76aed6e957611d8d7a9e5592e23aeba (patch)
tree0cd14260745f755c885466c59182452f637e92e3 /include
parentc58dc01babfd58ec9e71a6ce080150dc27755d88 (diff)
downloadlinux-stable-6e7676c1a76aed6e957611d8d7a9e5592e23aeba.tar.gz
linux-stable-6e7676c1a76aed6e957611d8d7a9e5592e23aeba.tar.bz2
linux-stable-6e7676c1a76aed6e957611d8d7a9e5592e23aeba.zip
net: batch skb dequeueing from softnet input_pkt_queue
batch skb dequeueing from softnet input_pkt_queue to reduce potential lock contention when RPS is enabled. Note: in the worst case, the number of packets in a softnet_data may be double of netdev_max_backlog. Signed-off-by: Changli Gao <xiaosuo@gmail.com> Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'include')
-rw-r--r--include/linux/netdevice.h6
1 files changed, 4 insertions, 2 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index c04ca246395d..40d4c20d034b 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -1388,6 +1388,7 @@ struct softnet_data {
struct Qdisc **output_queue_tailp;
struct list_head poll_list;
struct sk_buff *completion_queue;
+ struct sk_buff_head process_queue;
#ifdef CONFIG_RPS
struct softnet_data *rps_ipi_list;
@@ -1402,10 +1403,11 @@ struct softnet_data {
struct napi_struct backlog;
};
-static inline void input_queue_head_incr(struct softnet_data *sd)
+static inline void input_queue_head_add(struct softnet_data *sd,
+ unsigned int len)
{
#ifdef CONFIG_RPS
- sd->input_queue_head++;
+ sd->input_queue_head += len;
#endif
}