|
@@ -1724,24 +1724,21 @@ static void velocity_free_tx_buf(struct velocity_info *vptr,
|
|
|
struct velocity_td_info *tdinfo, struct tx_desc *td)
|
|
|
{
|
|
|
struct sk_buff *skb = tdinfo->skb;
|
|
|
+ int i;
|
|
|
|
|
|
/*
|
|
|
* Don't unmap the pre-allocated tx_bufs
|
|
|
*/
|
|
|
- if (tdinfo->skb_dma) {
|
|
|
- int i;
|
|
|
+ for (i = 0; i < tdinfo->nskb_dma; i++) {
|
|
|
+ size_t pktlen = max_t(size_t, skb->len, ETH_ZLEN);
|
|
|
|
|
|
- for (i = 0; i < tdinfo->nskb_dma; i++) {
|
|
|
- size_t pktlen = max_t(size_t, skb->len, ETH_ZLEN);
|
|
|
+ /* For scatter-gather */
|
|
|
+ if (skb_shinfo(skb)->nr_frags > 0)
|
|
|
+ pktlen = max_t(size_t, pktlen,
|
|
|
+ td->td_buf[i].size & ~TD_QUEUE);
|
|
|
|
|
|
- /* For scatter-gather */
|
|
|
- if (skb_shinfo(skb)->nr_frags > 0)
|
|
|
- pktlen = max_t(size_t, pktlen,
|
|
|
- td->td_buf[i].size & ~TD_QUEUE);
|
|
|
-
|
|
|
- dma_unmap_single(vptr->dev, tdinfo->skb_dma[i],
|
|
|
- le16_to_cpu(pktlen), DMA_TO_DEVICE);
|
|
|
- }
|
|
|
+ dma_unmap_single(vptr->dev, tdinfo->skb_dma[i],
|
|
|
+ le16_to_cpu(pktlen), DMA_TO_DEVICE);
|
|
|
}
|
|
|
dev_kfree_skb_irq(skb);
|
|
|
tdinfo->skb = NULL;
|