From bad206bc9bd78e15dc7df68974a02e5ab60dfa83 Mon Sep 17 00:00:00 2001 From: Ioana Radulescu Date: Tue, 20 Aug 2013 17:04:45 +0300 Subject: dpaa_eth: Fix freeing of frame in error cases In case of a Tx error at FMan level or an ERN, if the frame was marked as recycleable we need to put the buffers in the target pools, otherwise we mess up the pool counters. This was done correctly for the ERN callback, now fixing the Tx error one as well. Signed-off-by: Ioana Radulescu Change-Id: I0faa77a31af9086806713e593da72b03c2bd3223 Reviewed-on: http://git.am.freescale.net:8181/4192 Tested-by: Review Code-CDREVIEW Reviewed-by: Bucur Madalin-Cristian-B32716 Reviewed-by: Rivera Jose-B46482 Reviewed-on: http://git.am.freescale.net:8181/4470 Reviewed-by: Sovaiala Cristian-Constantin-B39531 diff --git a/drivers/net/ethernet/freescale/dpa/dpaa_eth.c b/drivers/net/ethernet/freescale/dpa/dpaa_eth.c index 9a139d8..77a3a35 100644 --- a/drivers/net/ethernet/freescale/dpa/dpaa_eth.c +++ b/drivers/net/ethernet/freescale/dpa/dpaa_eth.c @@ -215,6 +215,14 @@ static void _dpa_tx_error(struct net_device *net_dev, percpu_priv->stats.tx_errors++; + /* If we intended the buffers from this frame to go into the bpools + * when the FMan transmit was done, we need to put it in manually. + */ + if (fd->cmd & FM_FD_CMD_FCO) { + dpa_fd_release(net_dev, fd); + return; + } + skb = _dpa_cleanup_tx_fd(priv, fd); dev_kfree_skb(skb); } -- cgit v0.10.2