aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/netdevice.h
diff options
context:
space:
mode:
authorChangli Gao <xiaosuo@gmail.com>2010-04-27 18:07:33 -0400
committerDavid S. Miller <davem@davemloft.net>2010-04-27 18:11:49 -0400
commit6e7676c1a76aed6e957611d8d7a9e5592e23aeba (patch)
tree0cd14260745f755c885466c59182452f637e92e3 /include/linux/netdevice.h
parentc58dc01babfd58ec9e71a6ce080150dc27755d88 (diff)
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/linux/netdevice.h')
-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 {
1388 struct Qdisc **output_queue_tailp; 1388 struct Qdisc **output_queue_tailp;
1389 struct list_head poll_list; 1389 struct list_head poll_list;
1390 struct sk_buff *completion_queue; 1390 struct sk_buff *completion_queue;
1391 struct sk_buff_head process_queue;
1391 1392
1392#ifdef CONFIG_RPS 1393#ifdef CONFIG_RPS
1393 struct softnet_data *rps_ipi_list; 1394 struct softnet_data *rps_ipi_list;
@@ -1402,10 +1403,11 @@ struct softnet_data {
1402 struct napi_struct backlog; 1403 struct napi_struct backlog;
1403}; 1404};
1404 1405
1405static inline void input_queue_head_incr(struct softnet_data *sd) 1406static inline void input_queue_head_add(struct softnet_data *sd,
1407 unsigned int len)
1406{ 1408{
1407#ifdef CONFIG_RPS 1409#ifdef CONFIG_RPS
1408 sd->input_queue_head++; 1410 sd->input_queue_head += len;
1409#endif 1411#endif
1410} 1412}
1411 1413