diff mbox series

net: ethernet: ravb: Fix release of refclk

Message ID 20210417132329.6886-1-aford173@gmail.com
State New
Headers show
Series net: ethernet: ravb: Fix release of refclk | expand

Commit Message

Adam Ford April 17, 2021, 1:23 p.m. UTC
The call to clk_disable_unprepare() can happen before priv is
initialized. This means moving clk_disable_unprepare out of
out_release into a new label.

Fixes: 8ef7adc6beb2("net: ethernet: ravb: Enable optional refclk")
Signed-off-by: Adam Ford <aford173@gmail.com>

Comments

Geert Uytterhoeven April 19, 2021, 8:02 a.m. UTC | #1
On Sat, Apr 17, 2021 at 3:23 PM Adam Ford <aford173@gmail.com> wrote:
> The call to clk_disable_unprepare() can happen before priv is

> initialized. This means moving clk_disable_unprepare out of

> out_release into a new label.

>

> Fixes: 8ef7adc6beb2("net: ethernet: ravb: Enable optional refclk")

> Signed-off-by: Adam Ford <aford173@gmail.com>


Reviewed-by: Geert Uytterhoeven <geert+renesas@glider.be>


Gr{oetje,eeting}s,

                        Geert

-- 
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds
Sergei Shtylyov April 19, 2021, 9:38 a.m. UTC | #2
Hello!

On 17.04.2021 16:23, Adam Ford wrote:

> The call to clk_disable_unprepare() can happen before priv is

> initialized.


    Mhm, how's that? :-/

> This means moving clk_disable_unprepare out of

> out_release into a new label.

> 

> Fixes: 8ef7adc6beb2("net: ethernet: ravb: Enable optional refclk")

> Signed-off-by: Adam Ford <aford173@gmail.com>

> 

> diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c

> index 8c84c40ab9a0..64a545c98ff2 100644

> --- a/drivers/net/ethernet/renesas/ravb_main.c

> +++ b/drivers/net/ethernet/renesas/ravb_main.c

[...]
> @@ -2252,8 +2252,9 @@ static int ravb_probe(struct platform_device *pdev)

>   	/* Stop PTP Clock driver */

>   	if (chip_id != RCAR_GEN2)

>   		ravb_ptp_stop(ndev);

> -out_release:

> +out_unprepare_refclk:


    I'd really prefer out_disable_refclk.

>   	clk_disable_unprepare(priv->refclk);

> +out_release:

>   	free_netdev(ndev);

>   

>   	pm_runtime_put(&pdev->dev);


MBR, Sergei
David Miller April 19, 2021, 10:45 p.m. UTC | #3
From: Adam Ford <aford173@gmail.com>

Date: Sat, 17 Apr 2021 08:23:29 -0500

> The call to clk_disable_unprepare() can happen before priv is

> initialized. This means moving clk_disable_unprepare out of

> out_release into a new label.

> 

> Fixes: 8ef7adc6beb2("net: ethernet: ravb: Enable optional refclk")

> Signed-off-by: Adam Ford <aford173@gmail.com>

Thjis does not apply cleanly, please rebbase and resubmit.

Please fix the formatting of your Fixes tag while you are at it, thank you.
Adam Ford April 20, 2021, 3:33 a.m. UTC | #4
On Mon, Apr 19, 2021 at 5:45 PM David Miller <davem@davemloft.net> wrote:
>

> From: Adam Ford <aford173@gmail.com>

> Date: Sat, 17 Apr 2021 08:23:29 -0500

>

> > The call to clk_disable_unprepare() can happen before priv is

> > initialized. This means moving clk_disable_unprepare out of

> > out_release into a new label.

> >

> > Fixes: 8ef7adc6beb2("net: ethernet: ravb: Enable optional refclk")

> > Signed-off-by: Adam Ford <aford173@gmail.com>

> Thjis does not apply cleanly, please rebbase and resubmit.


Which branch should I use as the rebase?  I used net-next because
that's where the bug is, but I know it changes frequently.

>

> Please fix the formatting of your Fixes tag while you are at it, thank you.


no problem.  Sorry about that

adam
diff mbox series

Patch

diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c
index 8c84c40ab9a0..64a545c98ff2 100644
--- a/drivers/net/ethernet/renesas/ravb_main.c
+++ b/drivers/net/ethernet/renesas/ravb_main.c
@@ -2173,7 +2173,7 @@  static int ravb_probe(struct platform_device *pdev)
 	/* Set GTI value */
 	error = ravb_set_gti(ndev);
 	if (error)
-		goto out_release;
+		goto out_unprepare_refclk;
 
 	/* Request GTI loading */
 	ravb_modify(ndev, GCCR, GCCR_LTI, GCCR_LTI);
@@ -2192,7 +2192,7 @@  static int ravb_probe(struct platform_device *pdev)
 			"Cannot allocate desc base address table (size %d bytes)\n",
 			priv->desc_bat_size);
 		error = -ENOMEM;
-		goto out_release;
+		goto out_unprepare_refclk;
 	}
 	for (q = RAVB_BE; q < DBAT_ENTRY_NUM; q++)
 		priv->desc_bat[q].die_dt = DT_EOS;
@@ -2252,8 +2252,9 @@  static int ravb_probe(struct platform_device *pdev)
 	/* Stop PTP Clock driver */
 	if (chip_id != RCAR_GEN2)
 		ravb_ptp_stop(ndev);
-out_release:
+out_unprepare_refclk:
 	clk_disable_unprepare(priv->refclk);
+out_release:
 	free_netdev(ndev);
 
 	pm_runtime_put(&pdev->dev);