Hi Ben, On Thu, 2014-02-27 at 11:57PM +0000, Ben Hutchings wrote: > On Thu, 2014-02-27 at 13:58 -0800, Soren Brinkmann wrote: > [...] > > diff --git a/drivers/net/ethernet/cadence/macb.c > > b/drivers/net/ethernet/cadence/macb.c > > index 3190d38e16fb..a9c2ccfc1740 100644 > > --- a/drivers/net/ethernet/cadence/macb.c > > +++ b/drivers/net/ethernet/cadence/macb.c > > @@ -632,11 +632,16 @@ static void gem_rx_refill(struct macb *bp) > > "Unable to allocate sk_buff\n"); > > break; > > } > > - bp->rx_skbuff[entry] = skb; > > > > /* now fill corresponding descriptor entry */ > > paddr = dma_map_single(&bp->pdev->dev, skb->data, > > bp->rx_buffer_size, > > DMA_FROM_DEVICE); > > + if (dma_mapping_error(&bp->pdev->dev, paddr)) { > > + dev_kfree_skb(skb); > > + break; > > + } > > + > > + bp->rx_skbuff[entry] = skb; > > > > if (entry == RX_RING_SIZE - 1) > > paddr |= MACB_BIT(RX_WRAP); > > @@ -1040,6 +1045,10 @@ static int macb_start_xmit(struct sk_buff *skb, > > struct net_device *dev) > > A bit more context: > > entry = macb_tx_ring_wrap(bp->tx_head); > bp->tx_head++; > > > netdev_vdbg(bp->dev, "Allocated ring entry %u\n", entry); > > mapping = dma_map_single(&bp->pdev->dev, skb->data, > > len, DMA_TO_DEVICE); > > + if (dma_mapping_error(&bp->pdev->dev, mapping)) { > > + kfree_skb(skb); > > + goto unlock; > > + } > > You need to move the bp->tx_head increment below this error check. > Sorry I didn't spot this the first time.
No problem. I'll wait till next week with a re-spin, in case somebody else has comments. Sören -- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/