Calling pm_runtime_get_sync increments the counter even in case of
failure, causing incorrect ref count if pm_runtime_put is not called in
error handling paths. Call pm_runtime_put if pm_runtime_get_sync fails.
Signed-off-by: Navid Emamdoost <[email protected]>
---
drivers/gpio/gpio-arizona.c | 6 +++++-
1 file changed, 5 insertions(+), 1 deletion(-)
diff --git a/drivers/gpio/gpio-arizona.c b/drivers/gpio/gpio-arizona.c
index 7520a13b4c7c..5bda38e0780f 100644
--- a/drivers/gpio/gpio-arizona.c
+++ b/drivers/gpio/gpio-arizona.c
@@ -64,6 +64,7 @@ static int arizona_gpio_get(struct gpio_chip *chip, unsigned offset)
ret = pm_runtime_get_sync(chip->parent);
if (ret < 0) {
dev_err(chip->parent, "Failed to resume: %d\n", ret);
+ pm_runtime_put_autosuspend(chip->parent);
return ret;
}
@@ -72,12 +73,15 @@ static int arizona_gpio_get(struct gpio_chip *chip, unsigned offset)
if (ret < 0) {
dev_err(chip->parent, "Failed to drop cache: %d\n",
ret);
+ pm_runtime_put_autosuspend(chip->parent);
return ret;
}
ret = regmap_read(arizona->regmap, reg, &val);
- if (ret < 0)
+ if (ret < 0) {
+ pm_runtime_put_autosuspend(chip->parent);
return ret;
+ }
pm_runtime_mark_last_busy(chip->parent);
pm_runtime_put_autosuspend(chip->parent);
--
2.17.1
On Thu, Jun 04, 2020 at 10:00:52PM -0500, Navid Emamdoost wrote:
> Calling pm_runtime_get_sync increments the counter even in case of
> failure, causing incorrect ref count if pm_runtime_put is not called in
> error handling paths. Call pm_runtime_put if pm_runtime_get_sync fails.
>
> Signed-off-by: Navid Emamdoost <[email protected]>
> ---
Acked-by: Charles Keepax <[email protected]>
Thanks,
Charles
I recommend to replace the word “pm_runtime” by the
alternative “PM run time system” in the patch subject.
> Calling pm_runtime_get_sync increments the counter even in case of
> failure, causing incorrect ref count if pm_runtime_put is not called in
> error handling paths.
Should the term “reference count” be used here?
> Call pm_runtime_put if pm_runtime_get_sync fails.
The diff hunks show an other function name.
…
> +++ b/drivers/gpio/gpio-arizona.c
> @@ -64,6 +64,7 @@ static int arizona_gpio_get(struct gpio_chip *chip, unsigned offset)
> ret = pm_runtime_get_sync(chip->parent);
> if (ret < 0) {
> dev_err(chip->parent, "Failed to resume: %d\n", ret);
> + pm_runtime_put_autosuspend(chip->parent);
> return ret;
> }
You propose to use identical statements in three if branches.
Please add a corresponding jump target for better exception handling.
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/coding-style.rst?id=435faf5c218a47fd6258187f62d9bb1009717896#n455
Would you like to add the tag “Fixes” to the commit message?
I find it amazing how many questionable implementation details
you pointed out recently.
Were these contributions triggered by an evolving source code analysis
tool like CheQ?
https://github.com/umnsec/cheq/
Regards,
Markus
On Fri, Jun 5, 2020 at 5:01 AM Navid Emamdoost
<[email protected]> wrote:
> Calling pm_runtime_get_sync increments the counter even in case of
> failure, causing incorrect ref count if pm_runtime_put is not called in
> error handling paths. Call pm_runtime_put if pm_runtime_get_sync fails.
>
> Signed-off-by: Navid Emamdoost <[email protected]>
Patch applied for fixes.
Yours,
Linus Walleij
On Fri, Jun 05, 2020 at 02:14:38PM +0200, Markus Elfring wrote:
> I recommend to replace the word “pm_runtime” by the
> alternative “PM run time system” in the patch subject.
>
>
> > Calling pm_runtime_get_sync increments the counter even in case of
> > failure, causing incorrect ref count if pm_runtime_put is not called in
> > error handling paths.
>
> Should the term “reference count” be used here?
>
>
> > Call pm_runtime_put if pm_runtime_get_sync fails.
>
> The diff hunks show an other function name.
>
>
> …
> > +++ b/drivers/gpio/gpio-arizona.c
> > @@ -64,6 +64,7 @@ static int arizona_gpio_get(struct gpio_chip *chip, unsigned offset)
> > ret = pm_runtime_get_sync(chip->parent);
> > if (ret < 0) {
> > dev_err(chip->parent, "Failed to resume: %d\n", ret);
> > + pm_runtime_put_autosuspend(chip->parent);
> > return ret;
> > }
>
> You propose to use identical statements in three if branches.
> Please add a corresponding jump target for better exception handling.
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/tree/Documentation/process/coding-style.rst?id=435faf5c218a47fd6258187f62d9bb1009717896#n455
>
>
> Would you like to add the tag “Fixes” to the commit message?
>
>
> I find it amazing how many questionable implementation details
> you pointed out recently.
> Were these contributions triggered by an evolving source code analysis
> tool like CheQ?
> https://github.com/umnsec/cheq/
>
> Regards,
> Markus
Hi,
This is the semi-friendly patch-bot of Greg Kroah-Hartman.
Markus, you seem to have sent a nonsensical or otherwise pointless
review comment to a patch submission on a Linux kernel developer mailing
list. I strongly suggest that you not do this anymore. Please do not
bother developers who are actively working to produce patches and
features with comments that, in the end, are a waste of time.
Patch submitter, please ignore Markus's suggestion; you do not need to
follow it at all. The person/bot/AI that sent it is being ignored by
almost all Linux kernel maintainers for having a persistent pattern of
behavior of producing distracting and pointless commentary, and
inability to adapt to feedback. Please feel free to also ignore emails
from them.
thanks,
greg k-h's patch email bot