[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Message-ID: <20191113080352.55gde2wvsrccf2rp@netronome.com>
Date: Wed, 13 Nov 2019 09:03:53 +0100
From: Simon Horman <simon.horman@...ronome.com>
To: Ioana Ciornei <ioana.ciornei@....com>
Cc: davem@...emloft.net, netdev@...r.kernel.org
Subject: Re: [PATCH net v3] dpaa2-eth: free already allocated channels on
probe defer
On Tue, Nov 12, 2019 at 06:21:52PM +0200, Ioana Ciornei wrote:
> The setup_dpio() function tries to allocate a number of channels equal
> to the number of CPUs online. When there are not enough DPCON objects
> already probed, the function will return EPROBE_DEFER. When this
> happens, the already allocated channels are not freed. This results in
> the incapacity of properly probing the next time around.
> Fix this by freeing the channels on the error path.
>
> Fixes: d7f5a9d89a55 ("dpaa2-eth: defer probe on object allocate")
> Signed-off-by: Ioana Ciornei <ioana.ciornei@....com>
Thanks for the update,
Reviewed-by: Simon Horman <simon.horman@...ronome.com>
> ---
> Changes in v2:
> - add the proper Fixes tag
> Changes in v3:
> - cleanup should be done only on EPROBE_DEFER
>
> drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c | 10 +++++++++-
> 1 file changed, 9 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
> index 19379bae0144..bf5add954181 100644
> --- a/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
> +++ b/drivers/net/ethernet/freescale/dpaa2/dpaa2-eth.c
> @@ -2232,8 +2232,16 @@ static int setup_dpio(struct dpaa2_eth_priv *priv)
> err_service_reg:
> free_channel(priv, channel);
> err_alloc_ch:
> - if (err == -EPROBE_DEFER)
> + if (err == -EPROBE_DEFER) {
> + for (i = 0; i < priv->num_channels; i++) {
> + channel = priv->channel[i];
> + nctx = &channel->nctx;
> + dpaa2_io_service_deregister(channel->dpio, nctx, dev);
> + free_channel(priv, channel);
> + }
> + priv->num_channels = 0;
> return err;
> + }
>
> if (cpumask_empty(&priv->dpio_cpumask)) {
> dev_err(dev, "No cpu with an affine DPIO/DPCON\n");
> --
> 1.9.1
>
Powered by blists - more mailing lists