diff options
author | Changli Gao <xiaosuo@gmail.com> | 2010-04-27 15:07:33 -0700 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2010-04-27 15:11:49 -0700 |
commit | 6e7676c1a76aed6e957611d8d7a9e5592e23aeba (patch) | |
tree | 0cd14260745f755c885466c59182452f637e92e3 /include | |
parent | c58dc01babfd58ec9e71a6ce080150dc27755d88 (diff) | |
download | linux-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.h | 6 |
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 } |