Re: [PATCH net] net: stmmac: dwmac-intel-plat: fix error return code in intel_eth_plat_probe()

From: Jakub Kicinski
Date: Mon Nov 16 2020 - 18:37:05 EST


On Fri, 13 Nov 2020 14:34:03 +0800 Zhang Changzhong wrote:
> Fix to return a negative error code from the error handling
> case instead of 0, as done elsewhere in this function.
>
> Fixes: 9efc9b2b04c7 ("net: stmmac: Add dwmac-intel-plat for GBE driver")
> Reported-by: Hulk Robot <hulkci@xxxxxxxxxx>
> Signed-off-by: Zhang Changzhong <zhangchangzhong@xxxxxxxxxx>
> ---
> drivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c | 4 +++-
> 1 file changed, 3 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c b/drivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c
> index f61cb99..82b1c7a 100644
> --- a/drivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c
> +++ b/drivers/net/ethernet/stmicro/stmmac/dwmac-intel-plat.c
> @@ -113,8 +113,10 @@ static int intel_eth_plat_probe(struct platform_device *pdev)
> /* Enable TX clock */
> if (dwmac->data->tx_clk_en) {
> dwmac->tx_clk = devm_clk_get(&pdev->dev, "tx_clk");
> - if (IS_ERR(dwmac->tx_clk))
> + if (IS_ERR(dwmac->tx_clk)) {
> + ret = PTR_ERR(dwmac->tx_clk);
> goto err_remove_config_dt;
> + }
>
> clk_prepare_enable(dwmac->tx_clk);

Someone should take the look at the error handling later in this
function. It's not checking ret from clk_prepare_enable(), and even tho
top half of this function uses goto, the rest suddenly starts doing
direct returns :S


clk_prepare_enable(dwmac->tx_clk);


/* Check and configure TX clock rate */
rate = clk_get_rate(dwmac->tx_clk);
if (dwmac->data->tx_clk_rate &&
rate != dwmac->data->tx_clk_rate) {
rate = dwmac->data->tx_clk_rate;
ret = clk_set_rate(dwmac->tx_clk, rate);
if (ret) {
dev_err(&pdev->dev,
"Failed to set tx_clk\n");
return ret;
}
}
}

/* Check and configure PTP ref clock rate */
rate = clk_get_rate(plat_dat->clk_ptp_ref);
if (dwmac->data->ptp_ref_clk_rate &&
rate != dwmac->data->ptp_ref_clk_rate) {
rate = dwmac->data->ptp_ref_clk_rate;
ret = clk_set_rate(plat_dat->clk_ptp_ref, rate);
if (ret) {
dev_err(&pdev->dev,
"Failed to set clk_ptp_ref\n");
return ret;
}
}
}