aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/netdevice.h
diff options
context:
space:
mode:
authorEric Dumazet <eric.dumazet@gmail.com>2010-04-19 01:07:33 -0400
committerDavid S. Miller <davem@davemloft.net>2010-04-19 16:20:34 -0400
commit88751275b8e867d756e4f86ae92afe0232de129f (patch)
tree011913d98eb65f5e90981da0275c2f5a07c2bee1 /include/linux/netdevice.h
parenta03b1a5c95e8bcb07512122995bbf5bd3c39f2b9 (diff)
rps: shortcut net_rps_action()
net_rps_action() is a bit expensive on NR_CPUS=64..4096 kernels, even if RPS is not active. Tom Herbert used two bitmasks to hold information needed to send IPI, but a single LIFO list seems more appropriate. Move all RPS logic into net_rps_action() to cleanup net_rx_action() code (remove two ifdefs) Move rps_remote_softirq_cpus into softnet_data to share its first cache line, filling an existing hole. In a future patch, we could call net_rps_action() from process_backlog() to make sure we send IPI before handling this cpu backlog. 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.h9
1 files changed, 6 insertions, 3 deletions
diff --git a/include/linux/netdevice.h b/include/linux/netdevice.h
index 649a0252686e..83ab3da149ad 100644
--- a/include/linux/netdevice.h
+++ b/include/linux/netdevice.h
@@ -1381,17 +1381,20 @@ static inline int unregister_gifconf(unsigned int family)
1381} 1381}
1382 1382
1383/* 1383/*
1384 * Incoming packets are placed on per-cpu queues so that 1384 * Incoming packets are placed on per-cpu queues
1385 * no locking is needed.
1386 */ 1385 */
1387struct softnet_data { 1386struct softnet_data {
1388 struct Qdisc *output_queue; 1387 struct Qdisc *output_queue;
1389 struct list_head poll_list; 1388 struct list_head poll_list;
1390 struct sk_buff *completion_queue; 1389 struct sk_buff *completion_queue;
1391 1390
1392 /* Elements below can be accessed between CPUs for RPS */
1393#ifdef CONFIG_RPS 1391#ifdef CONFIG_RPS
1392 struct softnet_data *rps_ipi_list;
1393
1394 /* Elements below can be accessed between CPUs for RPS */
1394 struct call_single_data csd ____cacheline_aligned_in_smp; 1395 struct call_single_data csd ____cacheline_aligned_in_smp;
1396 struct softnet_data *rps_ipi_next;
1397 unsigned int cpu;
1395 unsigned int input_queue_head; 1398 unsigned int input_queue_head;
1396#endif 1399#endif
1397 struct sk_buff_head input_pkt_queue; 1400 struct sk_buff_head input_pkt_queue;