sh_eth: Check for DMA mapping errors on transmit
authorBen Hutchings <ben.hutchings@codethink.co.uk>
Tue, 27 Jan 2015 00:49:47 +0000 (00:49 +0000)
committerDavid S. Miller <davem@davemloft.net>
Tue, 27 Jan 2015 08:18:53 +0000 (00:18 -0800)
dma_map_single() may fail if an IOMMU or swiotlb is in use, so
we need to check for this.

Signed-off-by: Ben Hutchings <ben.hutchings@codethink.co.uk>
Signed-off-by: David S. Miller <davem@davemloft.net>
drivers/net/ethernet/renesas/sh_eth.c

index 245166bbccfdf394f97bd6cf5590cf11b48cdef6..4a085da571882946592def60f9a8ddaae1cd77a9 100644 (file)
@@ -2174,6 +2174,10 @@ static int sh_eth_start_xmit(struct sk_buff *skb, struct net_device *ndev)
                                 skb->len + 2);
        txdesc->addr = dma_map_single(&ndev->dev, skb->data, skb->len,
                                      DMA_TO_DEVICE);
+       if (dma_mapping_error(&ndev->dev, txdesc->addr)) {
+               kfree_skb(skb);
+               return NETDEV_TX_OK;
+       }
        txdesc->buffer_length = skb->len;
 
        if (entry >= mdp->num_tx_ring - 1)