aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/net
diff options
context:
space:
mode:
authorChristoph Lameter <cl@linux-foundation.org>2009-10-03 06:48:23 -0400
committerTejun Heo <tj@kernel.org>2009-10-03 06:48:23 -0400
commite7dcaa4755e35d7540bf19f316f8798357c53fa0 (patch)
tree69c41151378213382199b577f2bc7b0d8bd1cc22 /drivers/net
parentca0c9584b1f16bd5911893647cb7f1be82e60554 (diff)
this_cpu: Eliminate get/put_cpu
There are cases where we can use this_cpu_ptr and as the result of using this_cpu_ptr() we no longer need to determine the currently executing cpu. In those places no get/put_cpu combination is needed anymore. The local cpu variable can be eliminated. Preemption still needs to be disabled and enabled since the modifications of the per cpu variables is not atomic. There may be multiple per cpu variables modified and those must all be from the same processor. Acked-by: Maciej Sosnowski <maciej.sosnowski@intel.com> Acked-by: Dan Williams <dan.j.williams@intel.com> Acked-by: Tejun Heo <tj@kernel.org> cc: Eric Biederman <ebiederm@aristanetworks.com> cc: Stephen Hemminger <shemminger@vyatta.com> cc: David L Stevens <dlstevens@us.ibm.com> Signed-off-by: Christoph Lameter <cl@linux-foundation.org> Signed-off-by: Tejun Heo <tj@kernel.org>
Diffstat (limited to 'drivers/net')
-rw-r--r--drivers/net/veth.c7
1 files changed, 3 insertions, 4 deletions
diff --git a/drivers/net/veth.c b/drivers/net/veth.c
index ade5b344f75d..0c4a81124257 100644
--- a/drivers/net/veth.c
+++ b/drivers/net/veth.c
@@ -153,7 +153,7 @@ static netdev_tx_t veth_xmit(struct sk_buff *skb, struct net_device *dev)
153 struct net_device *rcv = NULL; 153 struct net_device *rcv = NULL;
154 struct veth_priv *priv, *rcv_priv; 154 struct veth_priv *priv, *rcv_priv;
155 struct veth_net_stats *stats, *rcv_stats; 155 struct veth_net_stats *stats, *rcv_stats;
156 int length, cpu; 156 int length;
157 157
158 skb_orphan(skb); 158 skb_orphan(skb);
159 159
@@ -161,9 +161,8 @@ static netdev_tx_t veth_xmit(struct sk_buff *skb, struct net_device *dev)
161 rcv = priv->peer; 161 rcv = priv->peer;
162 rcv_priv = netdev_priv(rcv); 162 rcv_priv = netdev_priv(rcv);
163 163
164 cpu = smp_processor_id(); 164 stats = this_cpu_ptr(priv->stats);
165 stats = per_cpu_ptr(priv->stats, cpu); 165 rcv_stats = this_cpu_ptr(rcv_priv->stats);
166 rcv_stats = per_cpu_ptr(rcv_priv->stats, cpu);
167 166
168 if (!(rcv->flags & IFF_UP)) 167 if (!(rcv->flags & IFF_UP))
169 goto tx_drop; 168 goto tx_drop;