On Thu, Nov 26, 2015 at 07:08:11PM +0100, Marcin Wojtas wrote: > In the actual RX processing, there is same error path for both descriptor > ring refilling and building skb fails. This is not correct, because after > successful refill, the ring is already updated with newly allocated > buffer. Then, in case of build_skb() fail, hitherto code left the original > buffer unmapped. > > This patch fixes above situation by swapping error check of skb build with > DMA-unmap of original buffer. > > Signed-off-by: Marcin Wojtas <m...@semihalf.com> > Cc: <sta...@vger.kernel.org> # v4.2+ > Fixes a84e32894191 ("net: mvneta: fix refilling for Rx DMA buffers") > --- > drivers/net/ethernet/marvell/mvneta.c | 8 ++++++-- > 1 file changed, 6 insertions(+), 2 deletions(-) >
Acked-by: Simon Guinot <simon.gui...@sequanux.org> Thanks, Simon > diff --git a/drivers/net/ethernet/marvell/mvneta.c > b/drivers/net/ethernet/marvell/mvneta.c > index 0c3d923..62cf971 100644 > --- a/drivers/net/ethernet/marvell/mvneta.c > +++ b/drivers/net/ethernet/marvell/mvneta.c > @@ -1580,12 +1580,16 @@ static int mvneta_rx(struct mvneta_port *pp, int > rx_todo, > } > > skb = build_skb(data, pp->frag_size > PAGE_SIZE ? 0 : > pp->frag_size); > - if (!skb) > - goto err_drop_frame; > > + /* After refill old buffer has to be unmapped regardless > + * the skb is successfully built or not. > + */ > dma_unmap_single(dev->dev.parent, phys_addr, > MVNETA_RX_BUF_SIZE(pp->pkt_size), > DMA_FROM_DEVICE); > > + if (!skb) > + goto err_drop_frame; > + > rcvd_pkts++; > rcvd_bytes += rx_bytes; > > -- > 1.8.3.1 > > > _______________________________________________ > linux-arm-kernel mailing list > linux-arm-ker...@lists.infradead.org > http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
signature.asc
Description: Digital signature