* [PATCH] I2C: OMAP: fix runtime PM get/put balance on error @ 2012-06-29 9:07 Shubhrajyoti D [not found] ` <1340960868-7371-1-git-send-email-shubhrajyoti-l0cyMroinI0@public.gmane.org> 0 siblings, 1 reply; 4+ messages in thread From: Shubhrajyoti D @ 2012-06-29 9:07 UTC (permalink / raw) To: linux-omap Cc: linux-i2c, linux-arm-kernel, ben-linux, tony, w.sang, Shubhrajyoti D, Kevin Hilman ensure pm_runtime_put() is called, on pm_runtime_get_sync() failure. Without this, after a failed call, the runtime PM usecount will have been incremented, but not decremented causing the usecount to never reach zero after a failure. Thanks to Kevin for educating about it. While at it also fix a missing pm_runtime_disable in the probe error path. Cc: Kevin Hilman <khilman@ti.com> Signed-off-by: Shubhrajyoti D <shubhrajyoti@ti.com> --- drivers/i2c/busses/i2c-omap.c | 7 +++---- 1 files changed, 3 insertions(+), 4 deletions(-) diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c index 2500f19..c8e5c76 100644 --- a/drivers/i2c/busses/i2c-omap.c +++ b/drivers/i2c/busses/i2c-omap.c @@ -1113,10 +1113,10 @@ err_free_irq: free_irq(dev->irq, dev); err_unuse_clocks: omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0); +err_free_mem: pm_runtime_put(dev->dev); iounmap(dev->base); pm_runtime_disable(&pdev->dev); -err_free_mem: platform_set_drvdata(pdev, NULL); kfree(dev); err_release_region: @@ -1136,10 +1136,9 @@ static int __devexit omap_i2c_remove(struct platform_device *pdev) free_irq(dev->irq, dev); i2c_del_adapter(&dev->adapter); ret = pm_runtime_get_sync(&pdev->dev); - if (IS_ERR_VALUE(ret)) - return ret; + if (!IS_ERR_VALUE(ret)) + omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0); - omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0); pm_runtime_put(&pdev->dev); pm_runtime_disable(&pdev->dev); iounmap(dev->base); -- 1.7.5.4 ^ permalink raw reply related [flat|nested] 4+ messages in thread
[parent not found: <1340960868-7371-1-git-send-email-shubhrajyoti-l0cyMroinI0@public.gmane.org>]
* Re: [PATCH] I2C: OMAP: fix runtime PM get/put balance on error [not found] ` <1340960868-7371-1-git-send-email-shubhrajyoti-l0cyMroinI0@public.gmane.org> @ 2012-06-29 12:02 ` Kevin Hilman 2012-06-29 12:55 ` Shubhrajyoti 0 siblings, 1 reply; 4+ messages in thread From: Kevin Hilman @ 2012-06-29 12:02 UTC (permalink / raw) To: Shubhrajyoti D Cc: linux-omap-u79uwXL29TY76Z2rM5mHXA, linux-i2c-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, ben-linux-elnMNo+KYs3YtjvyW6yDsg, tony-4v6yS6AI5VpBDgjK7y7TUQ, w.sang-bIcnvbaLZ9MEGnE8C9+IrQ Shubhrajyoti D <shubhrajyoti-l0cyMroinI0@public.gmane.org> writes: > ensure pm_runtime_put() is called, on pm_runtime_get_sync() > failure. > > Without this, after a failed call, the runtime PM usecount will have > been incremented, but not decremented causing the usecount to never > reach zero after a failure. Thanks to Kevin for educating about it. > While at it also fix a missing pm_runtime_disable in the probe error > path. This is the same subject and changelog as the patch I sent, but is a different patch. Please write a new subject and a changelog specific to your patch. As this changes the error/failure path, please be specific about how the failure modes were tested, and on which platforms. > Cc: Kevin Hilman <khilman-l0cyMroinI0@public.gmane.org> > Signed-off-by: Shubhrajyoti D <shubhrajyoti-l0cyMroinI0@public.gmane.org> > --- > drivers/i2c/busses/i2c-omap.c | 7 +++---- > 1 files changed, 3 insertions(+), 4 deletions(-) > > diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c > index 2500f19..c8e5c76 100644 > --- a/drivers/i2c/busses/i2c-omap.c > +++ b/drivers/i2c/busses/i2c-omap.c > @@ -1113,10 +1113,10 @@ err_free_irq: > free_irq(dev->irq, dev); > err_unuse_clocks: > omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0); > +err_free_mem: > pm_runtime_put(dev->dev); > iounmap(dev->base); This doesn't look right. At least one of the gotos for this label, the ioremap has failed. > pm_runtime_disable(&pdev->dev); > -err_free_mem: > platform_set_drvdata(pdev, NULL); > kfree(dev); > err_release_region: > @@ -1136,10 +1136,9 @@ static int __devexit omap_i2c_remove(struct platform_device *pdev) > free_irq(dev->irq, dev); > i2c_del_adapter(&dev->adapter); > ret = pm_runtime_get_sync(&pdev->dev); > - if (IS_ERR_VALUE(ret)) > - return ret; > + if (!IS_ERR_VALUE(ret)) > + omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0); this change isn't described in changelog > - omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0); > pm_runtime_put(&pdev->dev); > pm_runtime_disable(&pdev->dev); > iounmap(dev->base); Kevin ^ permalink raw reply [flat|nested] 4+ messages in thread
* Re: [PATCH] I2C: OMAP: fix runtime PM get/put balance on error 2012-06-29 12:02 ` Kevin Hilman @ 2012-06-29 12:55 ` Shubhrajyoti [not found] ` <4FEDA5C2.3000905-l0cyMroinI0@public.gmane.org> 0 siblings, 1 reply; 4+ messages in thread From: Shubhrajyoti @ 2012-06-29 12:55 UTC (permalink / raw) To: Kevin Hilman Cc: linux-omap, linux-i2c, linux-arm-kernel, ben-linux, tony, w.sang On Friday 29 June 2012 05:32 PM, Kevin Hilman wrote: > Shubhrajyoti D <shubhrajyoti@ti.com> writes: > >> ensure pm_runtime_put() is called, on pm_runtime_get_sync() >> failure. >> >> Without this, after a failed call, the runtime PM usecount will have >> been incremented, but not decremented causing the usecount to never >> reach zero after a failure. Thanks to Kevin for educating about it. >> While at it also fix a missing pm_runtime_disable in the probe error >> path. > This is the same subject and changelog as the patch I sent, but is a > different patch. > > Please write a new subject and a changelog specific to your patch. OK. Actually I did that on purpose your patch fixed the xfer call only. I thought that since get_sync increments the count always we could extend the patch to all the callers. > > As this changes the error/failure path, please be specific about how > the failure modes were tested, and on which platforms. I found and fixed by review only. Didnt really hit the failure case. > >> Cc: Kevin Hilman <khilman@ti.com> >> Signed-off-by: Shubhrajyoti D <shubhrajyoti@ti.com> >> --- >> drivers/i2c/busses/i2c-omap.c | 7 +++---- >> 1 files changed, 3 insertions(+), 4 deletions(-) >> >> diff --git a/drivers/i2c/busses/i2c-omap.c b/drivers/i2c/busses/i2c-omap.c >> index 2500f19..c8e5c76 100644 >> --- a/drivers/i2c/busses/i2c-omap.c >> +++ b/drivers/i2c/busses/i2c-omap.c >> @@ -1113,10 +1113,10 @@ err_free_irq: >> free_irq(dev->irq, dev); >> err_unuse_clocks: >> omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0); >> +err_free_mem: >> pm_runtime_put(dev->dev); >> iounmap(dev->base); > This doesn't look right. At least one of the gotos for this label, the > ioremap has failed. Yes , missed that thanks will fix it. > >> pm_runtime_disable(&pdev->dev); >> -err_free_mem: >> platform_set_drvdata(pdev, NULL); >> kfree(dev); >> err_release_region: >> @@ -1136,10 +1136,9 @@ static int __devexit omap_i2c_remove(struct platform_device *pdev) >> free_irq(dev->irq, dev); >> i2c_del_adapter(&dev->adapter); >> ret = pm_runtime_get_sync(&pdev->dev); >> - if (IS_ERR_VALUE(ret)) >> - return ret; >> + if (!IS_ERR_VALUE(ret)) >> + omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0); > this change isn't described in changelog Will do so. > >> - omap_i2c_write_reg(dev, OMAP_I2C_CON_REG, 0); >> pm_runtime_put(&pdev->dev); >> pm_runtime_disable(&pdev->dev); >> iounmap(dev->base); > Kevin ^ permalink raw reply [flat|nested] 4+ messages in thread
[parent not found: <4FEDA5C2.3000905-l0cyMroinI0@public.gmane.org>]
* Re: [PATCH] I2C: OMAP: fix runtime PM get/put balance on error [not found] ` <4FEDA5C2.3000905-l0cyMroinI0@public.gmane.org> @ 2012-06-29 14:00 ` Kevin Hilman 0 siblings, 0 replies; 4+ messages in thread From: Kevin Hilman @ 2012-06-29 14:00 UTC (permalink / raw) To: Shubhrajyoti Cc: linux-omap-u79uwXL29TY76Z2rM5mHXA, linux-i2c-u79uwXL29TY76Z2rM5mHXA, linux-arm-kernel-IAPFreCvJWM7uuMidbF8XUB+6BGkLq7r, ben-linux-elnMNo+KYs3YtjvyW6yDsg, tony-4v6yS6AI5VpBDgjK7y7TUQ, w.sang-bIcnvbaLZ9MEGnE8C9+IrQ Shubhrajyoti <shubhrajyoti-l0cyMroinI0@public.gmane.org> writes: > On Friday 29 June 2012 05:32 PM, Kevin Hilman wrote: >> Shubhrajyoti D <shubhrajyoti-l0cyMroinI0@public.gmane.org> writes: >> >>> ensure pm_runtime_put() is called, on pm_runtime_get_sync() >>> failure. >>> >>> Without this, after a failed call, the runtime PM usecount will have >>> been incremented, but not decremented causing the usecount to never >>> reach zero after a failure. Thanks to Kevin for educating about it. >>> While at it also fix a missing pm_runtime_disable in the probe error >>> path. >> This is the same subject and changelog as the patch I sent, but is a >> different patch. >> >> Please write a new subject and a changelog specific to your patch. > OK. > Actually I did that on purpose your patch fixed the xfer call only. > I thought that since get_sync increments the count always we could extend > the patch to all the callers. >> >> As this changes the error/failure path, please be specific about how >> the failure modes were tested, and on which platforms. > I found and fixed by review only. > Didnt really hit the failure case. Which is why you should't just add stuff to other peoples work. My patch was targetted at the XFER problem during suspend/resume which I found by testing and and proved the fix by testing. Your patch adds several additional functional changes that were not well described and not tested. That calls for a separate patch with seprate subject/changelog etc. Kevin ^ permalink raw reply [flat|nested] 4+ messages in thread
end of thread, other threads:[~2012-06-29 14:00 UTC | newest] Thread overview: 4+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2012-06-29 9:07 [PATCH] I2C: OMAP: fix runtime PM get/put balance on error Shubhrajyoti D [not found] ` <1340960868-7371-1-git-send-email-shubhrajyoti-l0cyMroinI0@public.gmane.org> 2012-06-29 12:02 ` Kevin Hilman 2012-06-29 12:55 ` Shubhrajyoti [not found] ` <4FEDA5C2.3000905-l0cyMroinI0@public.gmane.org> 2012-06-29 14:00 ` Kevin Hilman
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).