net: mv643xx_eth: Use dma_map_single() to map the skb fragments
Using dma_map_single() instead of skb_frag_dma_map() allows to unmap all the descriptors using dma_unmap_single(). This change allows to introduce software TSO in a less intrusive way. Signed-off-by: Ezequiel Garcia <ezequiel.garcia@free-electrons.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
4d48d58907
commit
69ad0dd7af
@ -732,8 +732,10 @@ static void txq_submit_frag_skb(struct tx_queue *txq, struct sk_buff *skb)
|
|||||||
skb_frag_t *this_frag;
|
skb_frag_t *this_frag;
|
||||||
int tx_index;
|
int tx_index;
|
||||||
struct tx_desc *desc;
|
struct tx_desc *desc;
|
||||||
|
void *addr;
|
||||||
|
|
||||||
this_frag = &skb_shinfo(skb)->frags[frag];
|
this_frag = &skb_shinfo(skb)->frags[frag];
|
||||||
|
addr = page_address(this_frag->page.p) + this_frag->page_offset;
|
||||||
tx_index = txq->tx_curr_desc++;
|
tx_index = txq->tx_curr_desc++;
|
||||||
if (txq->tx_curr_desc == txq->tx_ring_size)
|
if (txq->tx_curr_desc == txq->tx_ring_size)
|
||||||
txq->tx_curr_desc = 0;
|
txq->tx_curr_desc = 0;
|
||||||
@ -753,10 +755,8 @@ static void txq_submit_frag_skb(struct tx_queue *txq, struct sk_buff *skb)
|
|||||||
|
|
||||||
desc->l4i_chk = 0;
|
desc->l4i_chk = 0;
|
||||||
desc->byte_cnt = skb_frag_size(this_frag);
|
desc->byte_cnt = skb_frag_size(this_frag);
|
||||||
desc->buf_ptr = skb_frag_dma_map(mp->dev->dev.parent,
|
desc->buf_ptr = dma_map_single(mp->dev->dev.parent, addr,
|
||||||
this_frag, 0,
|
desc->byte_cnt, DMA_TO_DEVICE);
|
||||||
skb_frag_size(this_frag),
|
|
||||||
DMA_TO_DEVICE);
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -927,14 +927,8 @@ static int txq_reclaim(struct tx_queue *txq, int budget, int force)
|
|||||||
mp->dev->stats.tx_errors++;
|
mp->dev->stats.tx_errors++;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (cmd_sts & TX_FIRST_DESC) {
|
dma_unmap_single(mp->dev->dev.parent, desc->buf_ptr,
|
||||||
dma_unmap_single(mp->dev->dev.parent, desc->buf_ptr,
|
desc->byte_cnt, DMA_TO_DEVICE);
|
||||||
desc->byte_cnt, DMA_TO_DEVICE);
|
|
||||||
} else {
|
|
||||||
dma_unmap_page(mp->dev->dev.parent, desc->buf_ptr,
|
|
||||||
desc->byte_cnt, DMA_TO_DEVICE);
|
|
||||||
}
|
|
||||||
|
|
||||||
dev_kfree_skb(skb);
|
dev_kfree_skb(skb);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user