return NETDEV_TX_BUSY;
}
+ if (likely(packet->skb)) {
+ /* cleanup old data of this slot */
+ dma_unmap_single(dev, packet->dma, packet->skb->len, DMA_TO_DEVICE);
+ dev_kfree_skb_any(packet->skb);
+ }
+
packet->dma = dma_map_single(dev, skb->data, len, DMA_TO_DEVICE);
if (unlikely(dma_mapping_error(dev, packet->dma))) {
dev_kfree_skb_any(skb);
+ packet->skb = NULL;
netdev->stats.tx_errors++;
return NETDEV_TX_OK;
}
- if (likely(packet->skb)) {
- /* cleanup old data of this slot */
- dma_unmap_single(dev, packet->dma, packet->skb->len, DMA_TO_DEVICE);
- dev_kfree_skb_any(packet->skb);
- }
-
if (dest_port >= 0)
ctrl->r->create_tx_header(packet, dest_port, 0); // TODO ok to set prio to 0?