summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorIoana Ciornei <ioana.ciornei@nxp.com>2022-08-10 17:47:55 +0300
committerJason Liu <jason.hui.liu@nxp.com>2022-08-11 13:16:05 +0200
commit28290559d8e7b1d3d88443db437a690f3c02e9c8 (patch)
tree67d93cf4ab9e5346c9f4a0a93c4aaefaaaa36923 /drivers
parent7be1dfb794aa44ef2f8a20eae91a3d27f89847e4 (diff)
dpaa2-eth: fixup the error path in dpaa2_xsk_enable_pool()
The error code path in the dpaa2_xsk_enable_pool was not properly setup, thus the error code that should have been returned by the function was overwritten before the end of the call. Fix this and also some ordering of the goto labels. Fixes: e77a60fab247 ("net: dpaa2: AF_XDP RX zero copy support") Signed-off-by: Ioana Ciornei <ioana.ciornei@nxp.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/net/ethernet/freescale/dpaa2/dpaa2-xsk.c27
1 files changed, 13 insertions, 14 deletions
diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-xsk.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-xsk.c
index 31f84ae41653..9789a082a3a8 100644
--- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-xsk.c
+++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-xsk.c
@@ -203,7 +203,7 @@ static int dpaa2_xsk_enable_pool(struct net_device *dev,
{
struct dpaa2_eth_priv *priv = netdev_priv(dev);
struct dpni_pools_cfg pools_params = { 0 };
- int i, err;
+ int i, err, err2;
bool up;
if (priv->dpni_attrs.wriop_version != DPAA2_WRIOP_VERSION(3, 0, 0))
@@ -242,7 +242,7 @@ static int dpaa2_xsk_enable_pool(struct net_device *dev,
priv->bp[priv->num_bps] = dpaa2_eth_allocate_dpbp(priv);
if (IS_ERR(priv->bp[priv->num_bps])) {
err = PTR_ERR(priv->bp[priv->num_bps]);
- goto err_mem_model;
+ goto err_bp_alloc;
}
priv->channel[qid]->xsk_zc = true;
priv->channel[qid]->xsk_pool = pool;
@@ -260,7 +260,7 @@ static int dpaa2_xsk_enable_pool(struct net_device *dev,
err = dpni_set_pools(priv->mc_io, 0, priv->mc_token, &pools_params);
if (err) {
netdev_err(dev, "dpni_set_pools() failed\n");
- goto err_free_dpbp;
+ goto err_set_pools;
}
if (up) {
@@ -274,19 +274,18 @@ static int dpaa2_xsk_enable_pool(struct net_device *dev,
return 0;
-err_free_dpbp:
- err |= dpaa2_xsk_disable_pool(dev, qid);
- if (up)
- dpaa2_eth_open(dev);
- return err;
+err_set_pools:
+ err2 = dpaa2_xsk_disable_pool(dev, qid);
+ if (err2)
+ netdev_err(dev, "dpaa2_xsk_disable_pool() failed %d\n", err2);
+err_bp_alloc:
+ err2 = xdp_rxq_info_reg_mem_model(&priv->channel[qid]->xdp_rxq,
+ MEM_TYPE_PAGE_ORDER0, NULL);
+ if (err2)
+ netdev_err(dev, "xsk_rxq_info_reg_mem_model() failed with %d)\n", err2);
err_mem_model:
- err = xdp_rxq_info_reg_mem_model(&priv->channel[qid]->xdp_rxq,
- MEM_TYPE_PAGE_ORDER0, NULL);
- if (err)
- netdev_err(dev, "xsk_rxq_info_reg_mem_model() failed (err = %d)\n",
- err);
-err_dma_unmap:
xsk_pool_dma_unmap(pool, 0);
+err_dma_unmap:
if (up)
dpaa2_eth_open(dev);