aboutsummaryrefslogtreecommitdiffstats
path: root/net/core/dev.c
diff options
context:
space:
mode:
authorEric Dumazet <eric.dumazet@gmail.com>2010-10-24 23:02:02 -0400
committerDavid S. Miller <davem@davemloft.net>2010-10-25 17:18:27 -0400
commit6e3f7faf3e8a3e226b1a6b955aac12abf2f2e1b6 (patch)
treea2ff2fe9f86ff561d62ceac56e8fe18d7b6f14a0 /net/core/dev.c
parentf6318e558806c925029dc101f14874be9f9fa78f (diff)
rps: add __rcu annotations
Add __rcu annotations to : (struct netdev_rx_queue)->rps_map (struct netdev_rx_queue)->rps_flow_table struct rps_sock_flow_table *rps_sock_flow_table; And use appropriate rcu primitives. Signed-off-by: Eric Dumazet <eric.dumazet@gmail.com> Signed-off-by: David S. Miller <davem@davemloft.net>
Diffstat (limited to 'net/core/dev.c')
-rw-r--r--net/core/dev.c12
1 files changed, 6 insertions, 6 deletions
diff --git a/net/core/dev.c b/net/core/dev.c
index 365f7f5077e4..e8a8dc19365b 100644
--- a/net/core/dev.c
+++ b/net/core/dev.c
@@ -2413,7 +2413,7 @@ EXPORT_SYMBOL(__skb_get_rxhash);
2413#ifdef CONFIG_RPS 2413#ifdef CONFIG_RPS
2414 2414
2415/* One global table that all flow-based protocols share. */ 2415/* One global table that all flow-based protocols share. */
2416struct rps_sock_flow_table *rps_sock_flow_table __read_mostly; 2416struct rps_sock_flow_table __rcu *rps_sock_flow_table __read_mostly;
2417EXPORT_SYMBOL(rps_sock_flow_table); 2417EXPORT_SYMBOL(rps_sock_flow_table);
2418 2418
2419/* 2419/*
@@ -2425,7 +2425,7 @@ static int get_rps_cpu(struct net_device *dev, struct sk_buff *skb,
2425 struct rps_dev_flow **rflowp) 2425 struct rps_dev_flow **rflowp)
2426{ 2426{
2427 struct netdev_rx_queue *rxqueue; 2427 struct netdev_rx_queue *rxqueue;
2428 struct rps_map *map = NULL; 2428 struct rps_map *map;
2429 struct rps_dev_flow_table *flow_table; 2429 struct rps_dev_flow_table *flow_table;
2430 struct rps_sock_flow_table *sock_flow_table; 2430 struct rps_sock_flow_table *sock_flow_table;
2431 int cpu = -1; 2431 int cpu = -1;
@@ -2444,15 +2444,15 @@ static int get_rps_cpu(struct net_device *dev, struct sk_buff *skb,
2444 } else 2444 } else
2445 rxqueue = dev->_rx; 2445 rxqueue = dev->_rx;
2446 2446
2447 if (rxqueue->rps_map) { 2447 map = rcu_dereference(rxqueue->rps_map);
2448 map = rcu_dereference(rxqueue->rps_map); 2448 if (map) {
2449 if (map && map->len == 1) { 2449 if (map->len == 1) {
2450 tcpu = map->cpus[0]; 2450 tcpu = map->cpus[0];
2451 if (cpu_online(tcpu)) 2451 if (cpu_online(tcpu))
2452 cpu = tcpu; 2452 cpu = tcpu;
2453 goto done; 2453 goto done;
2454 } 2454 }
2455 } else if (!rxqueue->rps_flow_table) { 2455 } else if (!rcu_dereference_raw(rxqueue->rps_flow_table)) {
2456 goto done; 2456 goto done;
2457 } 2457 }
2458 2458