aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/dma/dmaengine.c36
-rw-r--r--drivers/net/veth.c7
2 files changed, 16 insertions, 27 deletions
diff --git a/drivers/dma/dmaengine.c b/drivers/dma/dmaengine.c
index bd0b248de2cf..51d7480d3a92 100644
--- a/drivers/dma/dmaengine.c
+++ b/drivers/dma/dmaengine.c
@@ -326,14 +326,7 @@ arch_initcall(dma_channel_table_init);
326 */ 326 */
327struct dma_chan *dma_find_channel(enum dma_transaction_type tx_type) 327struct dma_chan *dma_find_channel(enum dma_transaction_type tx_type)
328{ 328{
329 struct dma_chan *chan; 329 return this_cpu_read(channel_table[tx_type]->chan);
330 int cpu;
331
332 cpu = get_cpu();
333 chan = per_cpu_ptr(channel_table[tx_type], cpu)->chan;
334 put_cpu();
335
336 return chan;
337} 330}
338EXPORT_SYMBOL(dma_find_channel); 331EXPORT_SYMBOL(dma_find_channel);
339 332
@@ -847,7 +840,6 @@ dma_async_memcpy_buf_to_buf(struct dma_chan *chan, void *dest,
847 struct dma_async_tx_descriptor *tx; 840 struct dma_async_tx_descriptor *tx;
848 dma_addr_t dma_dest, dma_src; 841 dma_addr_t dma_dest, dma_src;
849 dma_cookie_t cookie; 842 dma_cookie_t cookie;
850 int cpu;
851 unsigned long flags; 843 unsigned long flags;
852 844
853 dma_src = dma_map_single(dev->dev, src, len, DMA_TO_DEVICE); 845 dma_src = dma_map_single(dev->dev, src, len, DMA_TO_DEVICE);
@@ -866,10 +858,10 @@ dma_async_memcpy_buf_to_buf(struct dma_chan *chan, void *dest,
866 tx->callback = NULL; 858 tx->callback = NULL;
867 cookie = tx->tx_submit(tx); 859 cookie = tx->tx_submit(tx);
868 860
869 cpu = get_cpu(); 861 preempt_disable();
870 per_cpu_ptr(chan->local, cpu)->bytes_transferred += len; 862 __this_cpu_add(chan->local->bytes_transferred, len);
871 per_cpu_ptr(chan->local, cpu)->memcpy_count++; 863 __this_cpu_inc(chan->local->memcpy_count);
872 put_cpu(); 864 preempt_enable();
873 865
874 return cookie; 866 return cookie;
875} 867}
@@ -896,7 +888,6 @@ dma_async_memcpy_buf_to_pg(struct dma_chan *chan, struct page *page,
896 struct dma_async_tx_descriptor *tx; 888 struct dma_async_tx_descriptor *tx;
897 dma_addr_t dma_dest, dma_src; 889 dma_addr_t dma_dest, dma_src;
898 dma_cookie_t cookie; 890 dma_cookie_t cookie;
899 int cpu;
900 unsigned long flags; 891 unsigned long flags;
901 892
902 dma_src = dma_map_single(dev->dev, kdata, len, DMA_TO_DEVICE); 893 dma_src = dma_map_single(dev->dev, kdata, len, DMA_TO_DEVICE);
@@ -913,10 +904,10 @@ dma_async_memcpy_buf_to_pg(struct dma_chan *chan, struct page *page,
913 tx->callback = NULL; 904 tx->callback = NULL;
914 cookie = tx->tx_submit(tx); 905 cookie = tx->tx_submit(tx);
915 906
916 cpu = get_cpu(); 907 preempt_disable();
917 per_cpu_ptr(chan->local, cpu)->bytes_transferred += len; 908 __this_cpu_add(chan->local->bytes_transferred, len);
918 per_cpu_ptr(chan->local, cpu)->memcpy_count++; 909 __this_cpu_inc(chan->local->memcpy_count);
919 put_cpu(); 910 preempt_enable();
920 911
921 return cookie; 912 return cookie;
922} 913}
@@ -945,7 +936,6 @@ dma_async_memcpy_pg_to_pg(struct dma_chan *chan, struct page *dest_pg,
945 struct dma_async_tx_descriptor *tx; 936 struct dma_async_tx_descriptor *tx;
946 dma_addr_t dma_dest, dma_src; 937 dma_addr_t dma_dest, dma_src;
947 dma_cookie_t cookie; 938 dma_cookie_t cookie;
948 int cpu;
949 unsigned long flags; 939 unsigned long flags;
950 940
951 dma_src = dma_map_page(dev->dev, src_pg, src_off, len, DMA_TO_DEVICE); 941 dma_src = dma_map_page(dev->dev, src_pg, src_off, len, DMA_TO_DEVICE);
@@ -963,10 +953,10 @@ dma_async_memcpy_pg_to_pg(struct dma_chan *chan, struct page *dest_pg,
963 tx->callback = NULL; 953 tx->callback = NULL;
964 cookie = tx->tx_submit(tx); 954 cookie = tx->tx_submit(tx);
965 955
966 cpu = get_cpu(); 956 preempt_disable();
967 per_cpu_ptr(chan->local, cpu)->bytes_transferred += len; 957 __this_cpu_add(chan->local->bytes_transferred, len);
968 per_cpu_ptr(chan->local, cpu)->memcpy_count++; 958 __this_cpu_inc(chan->local->memcpy_count);
969 put_cpu(); 959 preempt_enable();
970 960
971 return cookie; 961 return cookie;
972} 962}
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;