Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8a83c5d7 authored by Ivan Khoronzhuk's avatar Ivan Khoronzhuk Committed by David S. Miller
Browse files

net: ethernet: ti: cpdma: correct error handling for chan create



It's not correct to return NULL when that is actually an error and
function returns errors in any other wrong case. In the same time,
the cpsw driver and davinci emac doesn't check error case while
creating channel and it can miss actual error. Also remove WARNs
replacing them on dev_err msgs.

Signed-off-by: default avatarIvan Khoronzhuk <ivan.khoronzhuk@linaro.org>
Reviewed-by: default avatarGrygorii Strashko <grygorii.strashko@ti.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent f56ec676
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -3065,10 +3065,16 @@ static int cpsw_probe(struct platform_device *pdev)
	}

	cpsw->txv[0].ch = cpdma_chan_create(cpsw->dma, 0, cpsw_tx_handler, 0);
	if (IS_ERR(cpsw->txv[0].ch)) {
		dev_err(priv->dev, "error initializing tx dma channel\n");
		ret = PTR_ERR(cpsw->txv[0].ch);
		goto clean_dma_ret;
	}

	cpsw->rxv[0].ch = cpdma_chan_create(cpsw->dma, 0, cpsw_rx_handler, 1);
	if (WARN_ON(!cpsw->rxv[0].ch || !cpsw->txv[0].ch)) {
		dev_err(priv->dev, "error initializing dma channels\n");
		ret = -ENOMEM;
	if (IS_ERR(cpsw->rxv[0].ch)) {
		dev_err(priv->dev, "error initializing rx dma channel\n");
		ret = PTR_ERR(cpsw->rxv[0].ch);
		goto clean_dma_ret;
	}

+1 −1
Original line number Diff line number Diff line
@@ -893,7 +893,7 @@ struct cpdma_chan *cpdma_chan_create(struct cpdma_ctlr *ctlr, int chan_num,
	chan_num = rx_type ? rx_chan_num(chan_num) : tx_chan_num(chan_num);

	if (__chan_linear(chan_num) >= ctlr->num_chan)
		return NULL;
		return ERR_PTR(-EINVAL);

	chan = devm_kzalloc(ctlr->dev, sizeof(*chan), GFP_KERNEL);
	if (!chan)
+9 −2
Original line number Diff line number Diff line
@@ -1870,10 +1870,17 @@ static int davinci_emac_probe(struct platform_device *pdev)

	priv->txchan = cpdma_chan_create(priv->dma, EMAC_DEF_TX_CH,
					 emac_tx_handler, 0);
	if (IS_ERR(priv->txchan)) {
		dev_err(&pdev->dev, "error initializing tx dma channel\n");
		rc = PTR_ERR(priv->txchan);
		goto no_cpdma_chan;
	}

	priv->rxchan = cpdma_chan_create(priv->dma, EMAC_DEF_RX_CH,
					 emac_rx_handler, 1);
	if (WARN_ON(!priv->txchan || !priv->rxchan)) {
		rc = -ENOMEM;
	if (IS_ERR(priv->rxchan)) {
		dev_err(&pdev->dev, "error initializing rx dma channel\n");
		rc = PTR_ERR(priv->rxchan);
		goto no_cpdma_chan;
	}