diff options
author | Rasesh Mody <rmody@brocade.com> | 2013-12-17 20:07:40 -0500 |
---|---|---|
committer | David S. Miller <davem@davemloft.net> | 2013-12-18 00:30:34 -0500 |
commit | 24f5d33d42d648bce9ae7d3c115816c20ae48217 (patch) | |
tree | 4ef97fd9e4e9679f67fac3f414792f325b3a6bbf | |
parent | f29eeb79ac993a7f1d9e1be5f8c7c3684be0721d (diff) |
bna: Embed SKB Length in TX Vector
- Store the length of the skb buffer mapped along with the handle and use it
while unmapping the buffer.
Signed-off-by: Rasesh Mody <rmody@brocade.com>
Signed-off-by: David S. Miller <davem@davemloft.net>
-rw-r--r-- | drivers/net/ethernet/brocade/bna/bnad.c | 6 | ||||
-rw-r--r-- | drivers/net/ethernet/brocade/bna/bnad.h | 1 |
2 files changed, 5 insertions, 2 deletions
diff --git a/drivers/net/ethernet/brocade/bna/bnad.c b/drivers/net/ethernet/brocade/bna/bnad.c index 8d6c7525a8d0..d31524f9d062 100644 --- a/drivers/net/ethernet/brocade/bna/bnad.c +++ b/drivers/net/ethernet/brocade/bna/bnad.c | |||
@@ -142,7 +142,8 @@ bnad_tx_buff_unmap(struct bnad *bnad, | |||
142 | 142 | ||
143 | dma_unmap_page(&bnad->pcidev->dev, | 143 | dma_unmap_page(&bnad->pcidev->dev, |
144 | dma_unmap_addr(&unmap->vectors[vector], dma_addr), | 144 | dma_unmap_addr(&unmap->vectors[vector], dma_addr), |
145 | skb_shinfo(skb)->frags[nvecs].size, DMA_TO_DEVICE); | 145 | dma_unmap_len(&unmap->vectors[vector], dma_len), |
146 | DMA_TO_DEVICE); | ||
146 | dma_unmap_addr_set(&unmap->vectors[vector], dma_addr, 0); | 147 | dma_unmap_addr_set(&unmap->vectors[vector], dma_addr, 0); |
147 | nvecs--; | 148 | nvecs--; |
148 | } | 149 | } |
@@ -3045,7 +3046,7 @@ bnad_start_xmit(struct sk_buff *skb, struct net_device *netdev) | |||
3045 | 3046 | ||
3046 | for (i = 0, vect_id = 0; i < vectors - 1; i++) { | 3047 | for (i = 0, vect_id = 0; i < vectors - 1; i++) { |
3047 | const struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i]; | 3048 | const struct skb_frag_struct *frag = &skb_shinfo(skb)->frags[i]; |
3048 | u16 size = skb_frag_size(frag); | 3049 | u32 size = skb_frag_size(frag); |
3049 | 3050 | ||
3050 | if (unlikely(size == 0)) { | 3051 | if (unlikely(size == 0)) { |
3051 | /* Undo the changes starting at tcb->producer_index */ | 3052 | /* Undo the changes starting at tcb->producer_index */ |
@@ -3070,6 +3071,7 @@ bnad_start_xmit(struct sk_buff *skb, struct net_device *netdev) | |||
3070 | 3071 | ||
3071 | dma_addr = skb_frag_dma_map(&bnad->pcidev->dev, frag, | 3072 | dma_addr = skb_frag_dma_map(&bnad->pcidev->dev, frag, |
3072 | 0, size, DMA_TO_DEVICE); | 3073 | 0, size, DMA_TO_DEVICE); |
3074 | unmap->vectors[vect_id].dma_len = size; | ||
3073 | BNA_SET_DMA_ADDR(dma_addr, &txqent->vector[vect_id].host_addr); | 3075 | BNA_SET_DMA_ADDR(dma_addr, &txqent->vector[vect_id].host_addr); |
3074 | txqent->vector[vect_id].length = htons(size); | 3076 | txqent->vector[vect_id].length = htons(size); |
3075 | dma_unmap_addr_set(&unmap->vectors[vect_id], dma_addr, | 3077 | dma_unmap_addr_set(&unmap->vectors[vect_id], dma_addr, |
diff --git a/drivers/net/ethernet/brocade/bna/bnad.h b/drivers/net/ethernet/brocade/bna/bnad.h index 5816a6e7a238..586f6ddfc14b 100644 --- a/drivers/net/ethernet/brocade/bna/bnad.h +++ b/drivers/net/ethernet/brocade/bna/bnad.h | |||
@@ -222,6 +222,7 @@ struct bnad_rx_info { | |||
222 | 222 | ||
223 | struct bnad_tx_vector { | 223 | struct bnad_tx_vector { |
224 | DEFINE_DMA_UNMAP_ADDR(dma_addr); | 224 | DEFINE_DMA_UNMAP_ADDR(dma_addr); |
225 | DEFINE_DMA_UNMAP_LEN(dma_len); | ||
225 | }; | 226 | }; |
226 | 227 | ||
227 | struct bnad_tx_unmap { | 228 | struct bnad_tx_unmap { |