diff options
author | Ioana Ciornei <ioana.ciornei@nxp.com> | 2022-08-10 17:47:55 +0300 |
---|---|---|
committer | Jason Liu <jason.hui.liu@nxp.com> | 2022-08-11 13:16:05 +0200 |
commit | 28290559d8e7b1d3d88443db437a690f3c02e9c8 (patch) | |
tree | 67d93cf4ab9e5346c9f4a0a93c4aaefaaaa36923 /drivers | |
parent | 7be1dfb794aa44ef2f8a20eae91a3d27f89847e4 (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.c | 27 |
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); |