Re: [PATCH] PM / Runtime: let rpm_resume() succeed if RPM_ACTIVE, even when disabled

2012-09-20 Thread Rafael J. Wysocki
Hi,

On Thursday, September 20, 2012, Kevin Hilman wrote:
 From: Kevin Hilman khil...@ti.com
 
 When runtime PM is disabled, what we want is for callbacks not to be
 called from then on.  However, currently, when runtime PM is disabled,
 operations such as 'get' will also fail even if the device is
 currently active.
 
 Since calling 'get' on a device that is already RPM_ACTIVE does not
 involve calling the callbacks, it should be allowed to succeed, even
 if runtime PM is disabled.
 
 This is particularily useful in runtime PM enabled drivers that are
 used during system suspend.  Because runtime PM is disabled during
 system suspend, currently any driver's use of pm_runtime_get* will
 fail with -EACCES.  This is expected if the device was already runtime
 suspended, but if the device is actually active (due to recent usage,
 autosuspend timeout not expired, or pm_runtime_resume() called in
 -suspend() method), the pm_runtime_get*() call should actually
 succeed.
 
 To permit the usage described above, add a check to rpm_resume() so
 that success is returned in the case where a driver is suspended (it's
 -suspend callback has been called) but is still RPM_ACTIVE.
 
 This patch was developed in close collaboration with Rafael J. Wysocki
 r...@sisk.pl
 
 Tested on AM3730/Beagle-xM where wakeup IRQ firing during the late
 suspend phase triggers runtime PM activity in the I2C driver since the
 wakeup IRQ is on an I2C-connected PMIC.

Please resend it with a CC to linux...@vger.kernel.org.  Nobody reads
linux...@lists.linux-foundation.org today, I suppose ...

Thanks,
Rafael


 Cc: Rafael J. Wysocki r...@sisk.pl
 Signed-off-by: Kevin Hilman khil...@ti.com
 ---
  drivers/base/power/runtime.c |3 ++-
  1 file changed, 2 insertions(+), 1 deletion(-)
 
 diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c
 index 7d9c1cb..dafa5ec 100644
 --- a/drivers/base/power/runtime.c
 +++ b/drivers/base/power/runtime.c
 @@ -510,7 +510,8 @@ static int rpm_resume(struct device *dev, int rpmflags)
   if (dev-power.runtime_error)
   retval = -EINVAL;
   else if (dev-power.disable_depth  0)
 - retval = -EACCES;
 + retval = dev-power.is_suspended  
 + dev-power.runtime_status == RPM_ACTIVE ? 1 : -EACCES;
   if (retval)
   goto out;
  
 

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html


[PATCH] PM / Runtime: let rpm_resume() succeed if RPM_ACTIVE, even when disabled

2012-09-19 Thread Kevin Hilman
From: Kevin Hilman khil...@ti.com

When runtime PM is disabled, what we want is for callbacks not to be
called from then on.  However, currently, when runtime PM is disabled,
operations such as 'get' will also fail even if the device is
currently active.

Since calling 'get' on a device that is already RPM_ACTIVE does not
involve calling the callbacks, it should be allowed to succeed, even
if runtime PM is disabled.

This is particularily useful in runtime PM enabled drivers that are
used during system suspend.  Because runtime PM is disabled during
system suspend, currently any driver's use of pm_runtime_get* will
fail with -EACCES.  This is expected if the device was already runtime
suspended, but if the device is actually active (due to recent usage,
autosuspend timeout not expired, or pm_runtime_resume() called in
-suspend() method), the pm_runtime_get*() call should actually
succeed.

To permit the usage described above, add a check to rpm_resume() so
that success is returned in the case where a driver is suspended (it's
-suspend callback has been called) but is still RPM_ACTIVE.

This patch was developed in close collaboration with Rafael J. Wysocki
r...@sisk.pl

Tested on AM3730/Beagle-xM where wakeup IRQ firing during the late
suspend phase triggers runtime PM activity in the I2C driver since the
wakeup IRQ is on an I2C-connected PMIC.

Cc: Rafael J. Wysocki r...@sisk.pl
Signed-off-by: Kevin Hilman khil...@ti.com
---
 drivers/base/power/runtime.c |3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/drivers/base/power/runtime.c b/drivers/base/power/runtime.c
index 7d9c1cb..dafa5ec 100644
--- a/drivers/base/power/runtime.c
+++ b/drivers/base/power/runtime.c
@@ -510,7 +510,8 @@ static int rpm_resume(struct device *dev, int rpmflags)
if (dev-power.runtime_error)
retval = -EINVAL;
else if (dev-power.disable_depth  0)
-   retval = -EACCES;
+   retval = dev-power.is_suspended  
+   dev-power.runtime_status == RPM_ACTIVE ? 1 : -EACCES;
if (retval)
goto out;
 
-- 
1.7.9.2

--
To unsubscribe from this list: send the line unsubscribe linux-omap in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html