Message ID | 20210421140505.30756-1-aford173@gmail.com (mailing list archive) |
---|---|
State | Accepted |
Delegated to: | Geert Uytterhoeven |
Headers | show |
Series | net: ethernet: ravb: Fix release of refclk | expand |
On 4/21/21 5:05 PM, Adam Ford wrote: > The call to clk_disable_unprepare() can happen before priv is > initialized. This still doesn't make sense for me... > This means moving clk_disable_unprepare out of ^ call > out_release into a new label. > > Fixes: 8ef7adc6beb2 ("net: ethernet: ravb: Enable optional refclk") > Signed-off-by: Adam Ford <aford173@gmail.com> Reviewed-by: Sergei Shtylyov <sergei.shtylyov@gmail.com> [...] MBR, Sergei
On Wed, Apr 21, 2021 at 9:25 AM Sergei Shtylyov <sergei.shtylyov@gmail.com> wrote: > > On 4/21/21 5:05 PM, Adam Ford wrote: > > > The call to clk_disable_unprepare() can happen before priv is > > initialized. > > This still doesn't make sense for me... > I need an external reference clock enabled by a programmable clock so I added functionality to turn it on. [1] When I did it, I was reminded to disable the clock in the event of an the error condition. I originally added a call to clk_disable_unprepare(priv->refclk) under the label called out_release, but a bot responded to me that we may jump to this error condition before priv is initialized. This fix is supposed to create a new label so the errors that happen after the refclk is initialized will get disabled, but any errors that happen before the clock is initialized will handle errors like they did before. Does that help explain things better? adam [1] - https://git.kernel.org/pub/scm/linux/kernel/git/netdev/net-next.git/commit/?id=8ef7adc6beb2ef0bce83513dc9e4505e7b21e8c2 > > This means moving clk_disable_unprepare out of > ^ call > > out_release into a new label. > > > > Fixes: 8ef7adc6beb2 ("net: ethernet: ravb: Enable optional refclk") > > Signed-off-by: Adam Ford <aford173@gmail.com> > > Reviewed-by: Sergei Shtylyov <sergei.shtylyov@gmail.com> > > > [...] > > MBR, Sergei
Hello: This patch was applied to netdev/net-next.git (refs/heads/master): On Wed, 21 Apr 2021 09:05:05 -0500 you 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> > > [...] Here is the summary with links: - net: ethernet: ravb: Fix release of refclk https://git.kernel.org/netdev/net-next/c/36e69da892f1 You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html
diff --git a/drivers/net/ethernet/renesas/ravb_main.c b/drivers/net/ethernet/renesas/ravb_main.c index 8c84c40ab9a0..9e5dad41cdc9 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_disable_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_disable_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_disable_refclk: clk_disable_unprepare(priv->refclk); +out_release: free_netdev(ndev); pm_runtime_put(&pdev->dev);
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> --- V2: Rebase on net-next/master, fix fixes tag, change name of label from out_unprepare_refclk to out_disable_refclk