diff mbox

ARM: cpuidle: Pass on arm_cpuidle_suspend()'s return value

Message ID 1461669301-30834-1-git-send-email-james.morse@arm.com (mailing list archive)
State Accepted, archived
Delegated to: Rafael Wysocki
Headers show

Commit Message

James Morse April 26, 2016, 11:15 a.m. UTC
arm_cpuidle_suspend() may return -EOPNOTSUPP, or any value returned
by the cpu_ops/cpuidle_ops suspend call. arm_enter_idle_state() doesn't
update 'ret' with this value, meaning we always signal success to
cpuidle_enter_state(), causing it to update the usage counters as if we
succeeded.

Fixes: 191de17aa3c1 ("ARM64: cpuidle: Replace cpu_suspend by the common ARM/ARM64 function")
Signed-off-by: James Morse <james.morse@arm.com>
---
 drivers/cpuidle/cpuidle-arm.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Lorenzo Pieralisi April 26, 2016, 11:31 a.m. UTC | #1
On Tue, Apr 26, 2016 at 12:15:01PM +0100, James Morse wrote:
> arm_cpuidle_suspend() may return -EOPNOTSUPP, or any value returned
> by the cpu_ops/cpuidle_ops suspend call. arm_enter_idle_state() doesn't
> update 'ret' with this value, meaning we always signal success to
> cpuidle_enter_state(), causing it to update the usage counters as if we
> succeeded.
> 
> Fixes: 191de17aa3c1 ("ARM64: cpuidle: Replace cpu_suspend by the common ARM/ARM64 function")
> Signed-off-by: James Morse <james.morse@arm.com>
> ---
>  drivers/cpuidle/cpuidle-arm.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)

Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>

> 
> diff --git a/drivers/cpuidle/cpuidle-arm.c b/drivers/cpuidle/cpuidle-arm.c
> index 545069d5fdfb..e342565e8715 100644
> --- a/drivers/cpuidle/cpuidle-arm.c
> +++ b/drivers/cpuidle/cpuidle-arm.c
> @@ -50,7 +50,7 @@ static int arm_enter_idle_state(struct cpuidle_device *dev,
>  		 * call the CPU ops suspend protocol with idle index as a
>  		 * parameter.
>  		 */
> -		arm_cpuidle_suspend(idx);
> +		ret = arm_cpuidle_suspend(idx);
>  
>  		cpu_pm_exit();
>  	}
> -- 
> 2.8.0.rc3
> 
--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Rafael J. Wysocki April 26, 2016, 7:05 p.m. UTC | #2
On Tue, Apr 26, 2016 at 1:31 PM, Lorenzo Pieralisi
<lorenzo.pieralisi@arm.com> wrote:
> On Tue, Apr 26, 2016 at 12:15:01PM +0100, James Morse wrote:
>> arm_cpuidle_suspend() may return -EOPNOTSUPP, or any value returned
>> by the cpu_ops/cpuidle_ops suspend call. arm_enter_idle_state() doesn't
>> update 'ret' with this value, meaning we always signal success to
>> cpuidle_enter_state(), causing it to update the usage counters as if we
>> succeeded.
>>
>> Fixes: 191de17aa3c1 ("ARM64: cpuidle: Replace cpu_suspend by the common ARM/ARM64 function")
>> Signed-off-by: James Morse <james.morse@arm.com>
>> ---
>>  drivers/cpuidle/cpuidle-arm.c | 2 +-
>>  1 file changed, 1 insertion(+), 1 deletion(-)
>
> Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
>
>>
>> diff --git a/drivers/cpuidle/cpuidle-arm.c b/drivers/cpuidle/cpuidle-arm.c
>> index 545069d5fdfb..e342565e8715 100644
>> --- a/drivers/cpuidle/cpuidle-arm.c
>> +++ b/drivers/cpuidle/cpuidle-arm.c
>> @@ -50,7 +50,7 @@ static int arm_enter_idle_state(struct cpuidle_device *dev,
>>                * call the CPU ops suspend protocol with idle index as a
>>                * parameter.
>>                */
>> -             arm_cpuidle_suspend(idx);
>> +             ret = arm_cpuidle_suspend(idx);
>>
>>               cpu_pm_exit();
>>       }
>> --

OK

Should that go into -stable?
--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Lorenzo Pieralisi April 27, 2016, 9:14 a.m. UTC | #3
[+ Lina]

On Tue, Apr 26, 2016 at 09:05:57PM +0200, Rafael J. Wysocki wrote:
> On Tue, Apr 26, 2016 at 1:31 PM, Lorenzo Pieralisi
> <lorenzo.pieralisi@arm.com> wrote:
> > On Tue, Apr 26, 2016 at 12:15:01PM +0100, James Morse wrote:
> >> arm_cpuidle_suspend() may return -EOPNOTSUPP, or any value returned
> >> by the cpu_ops/cpuidle_ops suspend call. arm_enter_idle_state() doesn't
> >> update 'ret' with this value, meaning we always signal success to
> >> cpuidle_enter_state(), causing it to update the usage counters as if we
> >> succeeded.
> >>
> >> Fixes: 191de17aa3c1 ("ARM64: cpuidle: Replace cpu_suspend by the common ARM/ARM64 function")
> >> Signed-off-by: James Morse <james.morse@arm.com>
> >> ---
> >>  drivers/cpuidle/cpuidle-arm.c | 2 +-
> >>  1 file changed, 1 insertion(+), 1 deletion(-)
> >
> > Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> >
> >>
> >> diff --git a/drivers/cpuidle/cpuidle-arm.c b/drivers/cpuidle/cpuidle-arm.c
> >> index 545069d5fdfb..e342565e8715 100644
> >> --- a/drivers/cpuidle/cpuidle-arm.c
> >> +++ b/drivers/cpuidle/cpuidle-arm.c
> >> @@ -50,7 +50,7 @@ static int arm_enter_idle_state(struct cpuidle_device *dev,
> >>                * call the CPU ops suspend protocol with idle index as a
> >>                * parameter.
> >>                */
> >> -             arm_cpuidle_suspend(idx);
> >> +             ret = arm_cpuidle_suspend(idx);
> >>
> >>               cpu_pm_exit();
> >>       }
> >> --
> 
> OK
> 
> Should that go into -stable?

Yes for arm64, but I would ask Daniel and Lina please to chime in if
they see any issue with this change (in particular in relation to the
Qualcomm back-end), it looks like it just slipped through the cracks
but let's check with them before merging it and send it to stable
kernels to prevent any issue.

Thanks !
Lorenzo
--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Lina Iyer April 27, 2016, 3:04 p.m. UTC | #4
On Wed, Apr 27 2016 at 03:14 -0600, Lorenzo Pieralisi wrote:
>[+ Lina]
>
>On Tue, Apr 26, 2016 at 09:05:57PM +0200, Rafael J. Wysocki wrote:
>> On Tue, Apr 26, 2016 at 1:31 PM, Lorenzo Pieralisi
>> <lorenzo.pieralisi@arm.com> wrote:
>> > On Tue, Apr 26, 2016 at 12:15:01PM +0100, James Morse wrote:
>> >> arm_cpuidle_suspend() may return -EOPNOTSUPP, or any value returned
>> >> by the cpu_ops/cpuidle_ops suspend call. arm_enter_idle_state() doesn't
>> >> update 'ret' with this value, meaning we always signal success to
>> >> cpuidle_enter_state(), causing it to update the usage counters as if we
>> >> succeeded.
>> >>
>> >> Fixes: 191de17aa3c1 ("ARM64: cpuidle: Replace cpu_suspend by the common ARM/ARM64 function")
>> >> Signed-off-by: James Morse <james.morse@arm.com>
>> >> ---
>> >>  drivers/cpuidle/cpuidle-arm.c | 2 +-
>> >>  1 file changed, 1 insertion(+), 1 deletion(-)
>> >
>> > Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
>> >
>> >>
>> >> diff --git a/drivers/cpuidle/cpuidle-arm.c b/drivers/cpuidle/cpuidle-arm.c
>> >> index 545069d5fdfb..e342565e8715 100644
>> >> --- a/drivers/cpuidle/cpuidle-arm.c
>> >> +++ b/drivers/cpuidle/cpuidle-arm.c
>> >> @@ -50,7 +50,7 @@ static int arm_enter_idle_state(struct cpuidle_device *dev,
>> >>                * call the CPU ops suspend protocol with idle index as a
>> >>                * parameter.
>> >>                */
>> >> -             arm_cpuidle_suspend(idx);
>> >> +             ret = arm_cpuidle_suspend(idx);
>> >>
>> >>               cpu_pm_exit();
>> >>       }
>> >> --
>>
>> OK
>>
>> Should that go into -stable?
>
>Yes for arm64, but I would ask Daniel and Lina please to chime in if
>they see any issue with this change (in particular in relation to the
>Qualcomm back-end), it looks like it just slipped through the cracks
>but let's check with them before merging it and send it to stable
>kernels to prevent any issue.
>
This patch looks okay to me. In the QCOM backend driver, wee return -1
if the state was not achieved because of a pending interrupt. This was
previously ignored, but a quick check doesnt yield an issue returning
that backend specific value. Its not a real error per-se and therefore a
-1.

Thanks,
Lina

--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Daniel Lezcano April 28, 2016, 8:20 a.m. UTC | #5
On Wed, Apr 27, 2016 at 10:14:34AM +0100, Lorenzo Pieralisi wrote:
> [+ Lina]
> 
> On Tue, Apr 26, 2016 at 09:05:57PM +0200, Rafael J. Wysocki wrote:
> > On Tue, Apr 26, 2016 at 1:31 PM, Lorenzo Pieralisi
> > <lorenzo.pieralisi@arm.com> wrote:
> > > On Tue, Apr 26, 2016 at 12:15:01PM +0100, James Morse wrote:
> > >> arm_cpuidle_suspend() may return -EOPNOTSUPP, or any value returned
> > >> by the cpu_ops/cpuidle_ops suspend call. arm_enter_idle_state() doesn't
> > >> update 'ret' with this value, meaning we always signal success to
> > >> cpuidle_enter_state(), causing it to update the usage counters as if we
> > >> succeeded.
> > >>
> > >> Fixes: 191de17aa3c1 ("ARM64: cpuidle: Replace cpu_suspend by the common ARM/ARM64 function")
> > >> Signed-off-by: James Morse <james.morse@arm.com>
> > >> ---
> > >>  drivers/cpuidle/cpuidle-arm.c | 2 +-
> > >>  1 file changed, 1 insertion(+), 1 deletion(-)
> > >
> > > Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>

Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>
--
To unsubscribe from this list: send the line "unsubscribe linux-pm" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Rafael J. Wysocki May 4, 2016, 9:20 p.m. UTC | #6
On Thursday, April 28, 2016 10:20:23 AM Daniel Lezcano wrote:
> On Wed, Apr 27, 2016 at 10:14:34AM +0100, Lorenzo Pieralisi wrote:
> > [+ Lina]
> > 
> > On Tue, Apr 26, 2016 at 09:05:57PM +0200, Rafael J. Wysocki wrote:
> > > On Tue, Apr 26, 2016 at 1:31 PM, Lorenzo Pieralisi
> > > <lorenzo.pieralisi@arm.com> wrote:
> > > > On Tue, Apr 26, 2016 at 12:15:01PM +0100, James Morse wrote:
> > > >> arm_cpuidle_suspend() may return -EOPNOTSUPP, or any value returned
> > > >> by the cpu_ops/cpuidle_ops suspend call. arm_enter_idle_state() doesn't
> > > >> update 'ret' with this value, meaning we always signal success to
> > > >> cpuidle_enter_state(), causing it to update the usage counters as if we
> > > >> succeeded.
> > > >>
> > > >> Fixes: 191de17aa3c1 ("ARM64: cpuidle: Replace cpu_suspend by the common ARM/ARM64 function")
> > > >> Signed-off-by: James Morse <james.morse@arm.com>
> > > >> ---
> > > >>  drivers/cpuidle/cpuidle-arm.c | 2 +-
> > > >>  1 file changed, 1 insertion(+), 1 deletion(-)
> > > >
> > > > Acked-by: Lorenzo Pieralisi <lorenzo.pieralisi@arm.com>
> 
> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>

OK, applied, tagged for -stable (4.1+).

Thanks everybody!

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

Patch

diff --git a/drivers/cpuidle/cpuidle-arm.c b/drivers/cpuidle/cpuidle-arm.c
index 545069d5fdfb..e342565e8715 100644
--- a/drivers/cpuidle/cpuidle-arm.c
+++ b/drivers/cpuidle/cpuidle-arm.c
@@ -50,7 +50,7 @@  static int arm_enter_idle_state(struct cpuidle_device *dev,
 		 * call the CPU ops suspend protocol with idle index as a
 		 * parameter.
 		 */
-		arm_cpuidle_suspend(idx);
+		ret = arm_cpuidle_suspend(idx);
 
 		cpu_pm_exit();
 	}