linux-kernel.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [PATCH -next] pwm: img: Fix PM reference leak in img_pwm_enable()
@ 2021-05-12  3:57 Zou Wei
  2021-05-12  4:52 ` Uwe Kleine-König
  0 siblings, 1 reply; 7+ messages in thread
From: Zou Wei @ 2021-05-12  3:57 UTC (permalink / raw)
  To: thierry.reding, u.kleine-koenig, lee.jones
  Cc: linux-pwm, linux-kernel, Zou Wei

pm_runtime_get_sync will increment pm usage counter even it failed.
Forgetting to putting operation will result in reference leak here.
Fix it by replacing it with pm_runtime_resume_and_get to keep usage
counter balanced.

Reported-by: Hulk Robot <hulkci@huawei.com>
Signed-off-by: Zou Wei <zou_wei@huawei.com>
---
 drivers/pwm/pwm-img.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/drivers/pwm/pwm-img.c b/drivers/pwm/pwm-img.c
index cc37054..11b16ec 100644
--- a/drivers/pwm/pwm-img.c
+++ b/drivers/pwm/pwm-img.c
@@ -156,7 +156,7 @@ static int img_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)
 	struct img_pwm_chip *pwm_chip = to_img_pwm_chip(chip);
 	int ret;
 
-	ret = pm_runtime_get_sync(chip->dev);
+	ret = pm_runtime_resume_and_get(chip->dev);
 	if (ret < 0)
 		return ret;
 
-- 
2.6.2


^ permalink raw reply related	[flat|nested] 7+ messages in thread

* Re: [PATCH -next] pwm: img: Fix PM reference leak in img_pwm_enable()
  2021-05-12  3:57 [PATCH -next] pwm: img: Fix PM reference leak in img_pwm_enable() Zou Wei
@ 2021-05-12  4:52 ` Uwe Kleine-König
  2021-06-25 17:33   ` Uwe Kleine-König
  2021-06-25 17:45   ` Rafael J. Wysocki
  0 siblings, 2 replies; 7+ messages in thread
From: Uwe Kleine-König @ 2021-05-12  4:52 UTC (permalink / raw)
  To: Zou Wei
  Cc: thierry.reding, lee.jones, linux-pwm, linux-kernel,
	Rafael J. Wysocki, Kevin Hilman, Ulf Hansson, linux-pm

[-- Attachment #1: Type: text/plain, Size: 1659 bytes --]

Hello,

On Wed, May 12, 2021 at 11:57:17AM +0800, Zou Wei wrote:
> pm_runtime_get_sync will increment pm usage counter even it failed.
> Forgetting to putting operation will result in reference leak here.
> Fix it by replacing it with pm_runtime_resume_and_get to keep usage
> counter balanced.
> 
> Reported-by: Hulk Robot <hulkci@huawei.com>
> Signed-off-by: Zou Wei <zou_wei@huawei.com>
> ---
>  drivers/pwm/pwm-img.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/pwm/pwm-img.c b/drivers/pwm/pwm-img.c
> index cc37054..11b16ec 100644
> --- a/drivers/pwm/pwm-img.c
> +++ b/drivers/pwm/pwm-img.c
> @@ -156,7 +156,7 @@ static int img_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)
>  	struct img_pwm_chip *pwm_chip = to_img_pwm_chip(chip);
>  	int ret;
>  
> -	ret = pm_runtime_get_sync(chip->dev);
> +	ret = pm_runtime_resume_and_get(chip->dev);
>  	if (ret < 0)
>  		return ret;

This patch looks right with my limited understanding of pm_runtime. A
similar issue in this driver was fixed in commit

	ca162ce98110 ("pwm: img: Call pm_runtime_put() in pm_runtime_get_sync() failed case")

where (even though the commit log talks about pm_runtime_put()) a call
to pm_runtime_put_autosuspend() was added in the error path.

I added the PM guys to Cc, maybe they can advise about the right thing
to do here. Does it make sense to use the same idiom in both
img_pwm_enable() and img_pwm_config()?

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH -next] pwm: img: Fix PM reference leak in img_pwm_enable()
  2021-05-12  4:52 ` Uwe Kleine-König
@ 2021-06-25 17:33   ` Uwe Kleine-König
  2021-06-25 17:45   ` Rafael J. Wysocki
  1 sibling, 0 replies; 7+ messages in thread
From: Uwe Kleine-König @ 2021-06-25 17:33 UTC (permalink / raw)
  To: Rafael J. Wysocki, Kevin Hilman, Ulf Hansson, linux-pm
  Cc: Zou Wei, thierry.reding, lee.jones, linux-pwm, linux-kernel

[-- Attachment #1: Type: text/plain, Size: 1870 bytes --]

Hello Rafael, Kevin and Ulf,

On Wed, May 12, 2021 at 06:52:22AM +0200, Uwe Kleine-König wrote:
> Hello,
> 
> On Wed, May 12, 2021 at 11:57:17AM +0800, Zou Wei wrote:
> > pm_runtime_get_sync will increment pm usage counter even it failed.
> > Forgetting to putting operation will result in reference leak here.
> > Fix it by replacing it with pm_runtime_resume_and_get to keep usage
> > counter balanced.
> > 
> > Reported-by: Hulk Robot <hulkci@huawei.com>
> > Signed-off-by: Zou Wei <zou_wei@huawei.com>
> > ---
> >  drivers/pwm/pwm-img.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> > 
> > diff --git a/drivers/pwm/pwm-img.c b/drivers/pwm/pwm-img.c
> > index cc37054..11b16ec 100644
> > --- a/drivers/pwm/pwm-img.c
> > +++ b/drivers/pwm/pwm-img.c
> > @@ -156,7 +156,7 @@ static int img_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)
> >  	struct img_pwm_chip *pwm_chip = to_img_pwm_chip(chip);
> >  	int ret;
> >  
> > -	ret = pm_runtime_get_sync(chip->dev);
> > +	ret = pm_runtime_resume_and_get(chip->dev);
> >  	if (ret < 0)
> >  		return ret;
> 
> This patch looks right with my limited understanding of pm_runtime. A
> similar issue in this driver was fixed in commit
> 
> 	ca162ce98110 ("pwm: img: Call pm_runtime_put() in pm_runtime_get_sync() failed case")
> 
> where (even though the commit log talks about pm_runtime_put()) a call
> to pm_runtime_put_autosuspend() was added in the error path.
> 
> I added the PM guys to Cc, maybe they can advise about the right thing
> to do here. Does it make sense to use the same idiom in both
> img_pwm_enable() and img_pwm_config()?

Can you give some feedback here?

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH -next] pwm: img: Fix PM reference leak in img_pwm_enable()
  2021-05-12  4:52 ` Uwe Kleine-König
  2021-06-25 17:33   ` Uwe Kleine-König
@ 2021-06-25 17:45   ` Rafael J. Wysocki
  2021-06-28  6:38     ` Uwe Kleine-König
  1 sibling, 1 reply; 7+ messages in thread
From: Rafael J. Wysocki @ 2021-06-25 17:45 UTC (permalink / raw)
  To: Uwe Kleine-König
  Cc: Zou Wei, Thierry Reding, Lee Jones, Linux PWM List,
	Linux Kernel Mailing List, Rafael J. Wysocki, Kevin Hilman,
	Ulf Hansson, Linux PM

On Wed, May 12, 2021 at 6:52 AM Uwe Kleine-König
<u.kleine-koenig@pengutronix.de> wrote:
>
> Hello,
>
> On Wed, May 12, 2021 at 11:57:17AM +0800, Zou Wei wrote:
> > pm_runtime_get_sync will increment pm usage counter even it failed.
> > Forgetting to putting operation will result in reference leak here.
> > Fix it by replacing it with pm_runtime_resume_and_get to keep usage
> > counter balanced.
> >
> > Reported-by: Hulk Robot <hulkci@huawei.com>
> > Signed-off-by: Zou Wei <zou_wei@huawei.com>
> > ---
> >  drivers/pwm/pwm-img.c | 2 +-
> >  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > diff --git a/drivers/pwm/pwm-img.c b/drivers/pwm/pwm-img.c
> > index cc37054..11b16ec 100644
> > --- a/drivers/pwm/pwm-img.c
> > +++ b/drivers/pwm/pwm-img.c
> > @@ -156,7 +156,7 @@ static int img_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)
> >       struct img_pwm_chip *pwm_chip = to_img_pwm_chip(chip);
> >       int ret;
> >
> > -     ret = pm_runtime_get_sync(chip->dev);
> > +     ret = pm_runtime_resume_and_get(chip->dev);
> >       if (ret < 0)
> >               return ret;
>
> This patch looks right with my limited understanding of pm_runtime. A
> similar issue in this driver was fixed in commit
>
>         ca162ce98110 ("pwm: img: Call pm_runtime_put() in pm_runtime_get_sync() failed case")
>
> where (even though the commit log talks about pm_runtime_put()) a call
> to pm_runtime_put_autosuspend() was added in the error path.
>
> I added the PM guys to Cc, maybe they can advise about the right thing
> to do here. Does it make sense to use the same idiom in both
> img_pwm_enable() and img_pwm_config()?

I think so.

And calling pm_runtime_put_autosuspend() in the img_pwm_enable() error
path would work too.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH -next] pwm: img: Fix PM reference leak in img_pwm_enable()
  2021-06-25 17:45   ` Rafael J. Wysocki
@ 2021-06-28  6:38     ` Uwe Kleine-König
  2021-06-28 17:01       ` Uwe Kleine-König
  0 siblings, 1 reply; 7+ messages in thread
From: Uwe Kleine-König @ 2021-06-28  6:38 UTC (permalink / raw)
  To: Zou Wei
  Cc: Thierry Reding, Lee Jones, Linux PWM List,
	Linux Kernel Mailing List, Rafael J. Wysocki, Kevin Hilman,
	Ulf Hansson, Linux PM, Rafael J. Wysocki

[-- Attachment #1: Type: text/plain, Size: 2187 bytes --]

Hello Zou,

On Fri, Jun 25, 2021 at 07:45:14PM +0200, Rafael J. Wysocki wrote:
> On Wed, May 12, 2021 at 6:52 AM Uwe Kleine-König
> <u.kleine-koenig@pengutronix.de> wrote:
> > On Wed, May 12, 2021 at 11:57:17AM +0800, Zou Wei wrote:
> > > pm_runtime_get_sync will increment pm usage counter even it failed.
> > > Forgetting to putting operation will result in reference leak here.
> > > Fix it by replacing it with pm_runtime_resume_and_get to keep usage
> > > counter balanced.
> > >
> > > Reported-by: Hulk Robot <hulkci@huawei.com>
> > > Signed-off-by: Zou Wei <zou_wei@huawei.com>
> > > ---
> > >  drivers/pwm/pwm-img.c | 2 +-
> > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > >
> > > diff --git a/drivers/pwm/pwm-img.c b/drivers/pwm/pwm-img.c
> > > index cc37054..11b16ec 100644
> > > --- a/drivers/pwm/pwm-img.c
> > > +++ b/drivers/pwm/pwm-img.c
> > > @@ -156,7 +156,7 @@ static int img_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)
> > >       struct img_pwm_chip *pwm_chip = to_img_pwm_chip(chip);
> > >       int ret;
> > >
> > > -     ret = pm_runtime_get_sync(chip->dev);
> > > +     ret = pm_runtime_resume_and_get(chip->dev);
> > >       if (ret < 0)
> > >               return ret;
> >
> > This patch looks right with my limited understanding of pm_runtime. A
> > similar issue in this driver was fixed in commit
> >
> >         ca162ce98110 ("pwm: img: Call pm_runtime_put() in pm_runtime_get_sync() failed case")
> >
> > where (even though the commit log talks about pm_runtime_put()) a call
> > to pm_runtime_put_autosuspend() was added in the error path.
> >
> > I added the PM guys to Cc, maybe they can advise about the right thing
> > to do here. Does it make sense to use the same idiom in both
> > img_pwm_enable() and img_pwm_config()?
> 
> I think so.
> 
> And calling pm_runtime_put_autosuspend() in the img_pwm_enable() error
> path would work too.

Do you care to clean this up accordingly and send a new patch?

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH -next] pwm: img: Fix PM reference leak in img_pwm_enable()
  2021-06-28  6:38     ` Uwe Kleine-König
@ 2021-06-28 17:01       ` Uwe Kleine-König
  2021-06-29  3:23         ` Samuel Zou
  0 siblings, 1 reply; 7+ messages in thread
From: Uwe Kleine-König @ 2021-06-28 17:01 UTC (permalink / raw)
  To: Zou Wei
  Cc: Thierry Reding, Lee Jones, Linux PWM List,
	Linux Kernel Mailing List, Rafael J. Wysocki, Kevin Hilman,
	Ulf Hansson, Linux PM, Rafael J. Wysocki

[-- Attachment #1: Type: text/plain, Size: 2546 bytes --]

Hello Zou,
On Mon, Jun 28, 2021 at 08:38:39AM +0200, Uwe Kleine-König wrote:
> On Fri, Jun 25, 2021 at 07:45:14PM +0200, Rafael J. Wysocki wrote:
> > On Wed, May 12, 2021 at 6:52 AM Uwe Kleine-König
> > <u.kleine-koenig@pengutronix.de> wrote:
> > > On Wed, May 12, 2021 at 11:57:17AM +0800, Zou Wei wrote:
> > > > pm_runtime_get_sync will increment pm usage counter even it failed.
> > > > Forgetting to putting operation will result in reference leak here.
> > > > Fix it by replacing it with pm_runtime_resume_and_get to keep usage
> > > > counter balanced.
> > > >
> > > > Reported-by: Hulk Robot <hulkci@huawei.com>
> > > > Signed-off-by: Zou Wei <zou_wei@huawei.com>
> > > > ---
> > > >  drivers/pwm/pwm-img.c | 2 +-
> > > >  1 file changed, 1 insertion(+), 1 deletion(-)
> > > >
> > > > diff --git a/drivers/pwm/pwm-img.c b/drivers/pwm/pwm-img.c
> > > > index cc37054..11b16ec 100644
> > > > --- a/drivers/pwm/pwm-img.c
> > > > +++ b/drivers/pwm/pwm-img.c
> > > > @@ -156,7 +156,7 @@ static int img_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)
> > > >       struct img_pwm_chip *pwm_chip = to_img_pwm_chip(chip);
> > > >       int ret;
> > > >
> > > > -     ret = pm_runtime_get_sync(chip->dev);
> > > > +     ret = pm_runtime_resume_and_get(chip->dev);
> > > >       if (ret < 0)
> > > >               return ret;
> > >
> > > This patch looks right with my limited understanding of pm_runtime. A
> > > similar issue in this driver was fixed in commit
> > >
> > >         ca162ce98110 ("pwm: img: Call pm_runtime_put() in pm_runtime_get_sync() failed case")
> > >
> > > where (even though the commit log talks about pm_runtime_put()) a call
> > > to pm_runtime_put_autosuspend() was added in the error path.
> > >
> > > I added the PM guys to Cc, maybe they can advise about the right thing
> > > to do here. Does it make sense to use the same idiom in both
> > > img_pwm_enable() and img_pwm_config()?
> > 
> > I think so.
> > 
> > And calling pm_runtime_put_autosuspend() in the img_pwm_enable() error
> > path would work too.
> 
> Do you care to clean this up accordingly and send a new patch?

Note that Thierry applied your initial patch regardless of the
inconsistency. Still I'd like to see this done in a consistent way. Do
you care to follow up with a patch that unifies the behaviour?

Best regards
Uwe

-- 
Pengutronix e.K.                           | Uwe Kleine-König            |
Industrial Linux Solutions                 | https://www.pengutronix.de/ |

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 488 bytes --]

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [PATCH -next] pwm: img: Fix PM reference leak in img_pwm_enable()
  2021-06-28 17:01       ` Uwe Kleine-König
@ 2021-06-29  3:23         ` Samuel Zou
  0 siblings, 0 replies; 7+ messages in thread
From: Samuel Zou @ 2021-06-29  3:23 UTC (permalink / raw)
  To: Uwe Kleine-König
  Cc: Thierry Reding, Lee Jones, Linux PWM List,
	Linux Kernel Mailing List, Rafael J. Wysocki, Kevin Hilman,
	Ulf Hansson, Linux PM, Rafael J. Wysocki

Hi Uwe,

Sorry for the delayed reply.
Thanks for all the review,.
To keep the consistency, it's better to clean this up accordingly, and I 
will send a new patch soon.

On 2021/6/29 1:01, Uwe Kleine-König wrote:
> Hello Zou,
> On Mon, Jun 28, 2021 at 08:38:39AM +0200, Uwe Kleine-König wrote:
>> On Fri, Jun 25, 2021 at 07:45:14PM +0200, Rafael J. Wysocki wrote:
>>> On Wed, May 12, 2021 at 6:52 AM Uwe Kleine-König
>>> <u.kleine-koenig@pengutronix.de> wrote:
>>>> On Wed, May 12, 2021 at 11:57:17AM +0800, Zou Wei wrote:
>>>>> pm_runtime_get_sync will increment pm usage counter even it failed.
>>>>> Forgetting to putting operation will result in reference leak here.
>>>>> Fix it by replacing it with pm_runtime_resume_and_get to keep usage
>>>>> counter balanced.
>>>>>
>>>>> Reported-by: Hulk Robot <hulkci@huawei.com>
>>>>> Signed-off-by: Zou Wei <zou_wei@huawei.com>
>>>>> ---
>>>>>   drivers/pwm/pwm-img.c | 2 +-
>>>>>   1 file changed, 1 insertion(+), 1 deletion(-)
>>>>>
>>>>> diff --git a/drivers/pwm/pwm-img.c b/drivers/pwm/pwm-img.c
>>>>> index cc37054..11b16ec 100644
>>>>> --- a/drivers/pwm/pwm-img.c
>>>>> +++ b/drivers/pwm/pwm-img.c
>>>>> @@ -156,7 +156,7 @@ static int img_pwm_enable(struct pwm_chip *chip, struct pwm_device *pwm)
>>>>>        struct img_pwm_chip *pwm_chip = to_img_pwm_chip(chip);
>>>>>        int ret;
>>>>>
>>>>> -     ret = pm_runtime_get_sync(chip->dev);
>>>>> +     ret = pm_runtime_resume_and_get(chip->dev);
>>>>>        if (ret < 0)
>>>>>                return ret;
>>>>
>>>> This patch looks right with my limited understanding of pm_runtime. A
>>>> similar issue in this driver was fixed in commit
>>>>
>>>>          ca162ce98110 ("pwm: img: Call pm_runtime_put() in pm_runtime_get_sync() failed case")
>>>>
>>>> where (even though the commit log talks about pm_runtime_put()) a call
>>>> to pm_runtime_put_autosuspend() was added in the error path.
>>>>
>>>> I added the PM guys to Cc, maybe they can advise about the right thing
>>>> to do here. Does it make sense to use the same idiom in both
>>>> img_pwm_enable() and img_pwm_config()?
>>>
>>> I think so.
>>>
>>> And calling pm_runtime_put_autosuspend() in the img_pwm_enable() error
>>> path would work too.
>>
>> Do you care to clean this up accordingly and send a new patch?
> 
> Note that Thierry applied your initial patch regardless of the
> inconsistency. Still I'd like to see this done in a consistent way. Do
> you care to follow up with a patch that unifies the behaviour?
> 
> Best regards
> Uwe
> 

^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2021-06-29  3:23 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-05-12  3:57 [PATCH -next] pwm: img: Fix PM reference leak in img_pwm_enable() Zou Wei
2021-05-12  4:52 ` Uwe Kleine-König
2021-06-25 17:33   ` Uwe Kleine-König
2021-06-25 17:45   ` Rafael J. Wysocki
2021-06-28  6:38     ` Uwe Kleine-König
2021-06-28 17:01       ` Uwe Kleine-König
2021-06-29  3:23         ` Samuel Zou

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).