2022-07-05 17:30:05

by Bartosz Golaszewski

[permalink] [raw]
Subject: [PATCH] gpio: pxa: schedule a devm action for the clock struct

The clock is never released after probe(). Schedule devm actions for
putting and disabling the clock.

Reported-by: Hulk Robot <[email protected]>
Reported-by: Signed-off-by: Yuan Can <[email protected]>
Signed-off-by: Bartosz Golaszewski <[email protected]>
---
drivers/gpio/gpio-pxa.c | 32 ++++++++++++++++++++++++++------
1 file changed, 26 insertions(+), 6 deletions(-)

diff --git a/drivers/gpio/gpio-pxa.c b/drivers/gpio/gpio-pxa.c
index c7fbfa3ae43b..73a83b493b2e 100644
--- a/drivers/gpio/gpio-pxa.c
+++ b/drivers/gpio/gpio-pxa.c
@@ -610,6 +610,20 @@ static int pxa_gpio_probe_dt(struct platform_device *pdev,
#define pxa_gpio_probe_dt(pdev, pchip) (-1)
#endif

+static void pxa_gpio_clk_put(void *data)
+{
+ struct clk *clk = data;
+
+ clk_put(clk);
+}
+
+static void pxa_gpio_clk_disable_unprepare(void *data)
+{
+ struct clk *clk = data;
+
+ clk_disable_unprepare(clk);
+}
+
static int pxa_gpio_probe(struct platform_device *pdev)
{
struct pxa_gpio_chip *pchip;
@@ -667,18 +681,24 @@ static int pxa_gpio_probe(struct platform_device *pdev)
PTR_ERR(clk));
return PTR_ERR(clk);
}
+
+ ret = devm_add_action_or_reset(&pdev->dev, pxa_gpio_clk_put, clk);
+ if (ret)
+ return ret;
+
ret = clk_prepare_enable(clk);
- if (ret) {
- clk_put(clk);
+ if (ret)
+ return ret;
+
+ ret = devm_add_action_or_reset(&pdev->dev,
+ pxa_gpio_clk_disable_unprepare, clk);
+ if (ret)
return ret;
- }

/* Initialize GPIO chips */
ret = pxa_init_gpio_chip(pchip, pxa_last_gpio + 1, gpio_reg_base);
- if (ret) {
- clk_put(clk);
+ if (ret)
return ret;
- }

/* clear all GPIO edge detects */
for_each_gpio_bank(gpio, c, pchip) {
--
2.34.1


2022-07-06 12:15:23

by Bartosz Golaszewski

[permalink] [raw]
Subject: Re: [PATCH] gpio: pxa: schedule a devm action for the clock struct

On Wed, Jul 6, 2022 at 1:49 PM Andy Shevchenko
<[email protected]> wrote:
s>
> On Tue, Jul 5, 2022 at 7:29 PM Bartosz Golaszewski <[email protected]> wrote:
> >
> > The clock is never released after probe(). Schedule devm actions for
> > putting and disabling the clock.
>
> ...
>
> > Reported-by: Signed-off-by: Yuan Can <[email protected]>
>
> Me puzzled.
>

Yuan Can sent the following patch:
https://patchwork.ozlabs.org/project/linux-gpio/patch/[email protected]/

I responded that it was not complete and sent this instead.

>
> ...
>
> > + ret = devm_add_action_or_reset(&pdev->dev, pxa_gpio_clk_put, clk);
> > + if (ret)
> > + return ret;
> > +
> > ret = clk_prepare_enable(clk);
> > + if (ret)
> > + return ret;
> > +
> > + ret = devm_add_action_or_reset(&pdev->dev,
> > + pxa_gpio_clk_disable_unprepare, clk);
> > + if (ret)
> > return ret;
>
> Can we use recently introduced clk APIs for that? Maybe Stephen has an
> immutable branch you may reuse?

Sure, sounds good! Stephen, would you mind providing me with a branch for that?

Bart

>
> --
> With Best Regards,
> Andy Shevchenko

2022-07-06 12:35:05

by Andy Shevchenko

[permalink] [raw]
Subject: Re: [PATCH] gpio: pxa: schedule a devm action for the clock struct

On Tue, Jul 5, 2022 at 7:29 PM Bartosz Golaszewski <[email protected]> wrote:
>
> The clock is never released after probe(). Schedule devm actions for
> putting and disabling the clock.

...

> Reported-by: Signed-off-by: Yuan Can <[email protected]>

Me puzzled.


...

> + ret = devm_add_action_or_reset(&pdev->dev, pxa_gpio_clk_put, clk);
> + if (ret)
> + return ret;
> +
> ret = clk_prepare_enable(clk);
> + if (ret)
> + return ret;
> +
> + ret = devm_add_action_or_reset(&pdev->dev,
> + pxa_gpio_clk_disable_unprepare, clk);
> + if (ret)
> return ret;

Can we use recently introduced clk APIs for that? Maybe Stephen has an
immutable branch you may reuse?

--
With Best Regards,
Andy Shevchenko

2022-07-06 13:06:22

by Andy Shevchenko

[permalink] [raw]
Subject: Re: [PATCH] gpio: pxa: schedule a devm action for the clock struct

On Wed, Jul 6, 2022 at 2:11 PM Bartosz Golaszewski <[email protected]> wrote:
> On Wed, Jul 6, 2022 at 1:49 PM Andy Shevchenko
> <[email protected]> wrote:
> > On Tue, Jul 5, 2022 at 7:29 PM Bartosz Golaszewski <[email protected]> wrote:

...

> > > Reported-by: Signed-off-by: Yuan Can <[email protected]>
> >
> > Me puzzled.
>
> Yuan Can sent the following patch:
> https://patchwork.ozlabs.org/project/linux-gpio/patch/[email protected]/
>
> I responded that it was not complete and sent this instead.

I understand that, I am puzzled with Reported-by: followed by SoB.
What is this format? Is it something new and documented?


--
With Best Regards,
Andy Shevchenko

2022-07-06 15:11:46

by Bartosz Golaszewski

[permalink] [raw]
Subject: Re: [PATCH] gpio: pxa: schedule a devm action for the clock struct

On Wed, Jul 6, 2022 at 2:32 PM Andy Shevchenko
<[email protected]> wrote:
>
> On Wed, Jul 6, 2022 at 2:11 PM Bartosz Golaszewski <[email protected]> wrote:
> > On Wed, Jul 6, 2022 at 1:49 PM Andy Shevchenko
> > <[email protected]> wrote:
> > > On Tue, Jul 5, 2022 at 7:29 PM Bartosz Golaszewski <[email protected]> wrote:
>
> ...
>
> > > > Reported-by: Signed-off-by: Yuan Can <[email protected]>
> > >
> > > Me puzzled.
> >
> > Yuan Can sent the following patch:
> > https://patchwork.ozlabs.org/project/linux-gpio/patch/[email protected]/
> >
> > I responded that it was not complete and sent this instead.
>
> I understand that, I am puzzled with Reported-by: followed by SoB.
> What is this format? Is it something new and documented?
>

Ah! No, it's just my brain on not enough coffee I suppose. Thanks, I'll fix it.

Bart