Re: [PATCH V2 3/5] cpuidle: idle: menu: Don't reflect when a state selection failed

2014-10-29 Thread Rafael J. Wysocki
On Wednesday, October 29, 2014 09:54:43 AM Kevin Hilman wrote:
> Daniel Lezcano  writes:
> 
> > On 10/28/2014 08:01 AM, Preeti Murthy wrote:
> >> On Thu, Oct 23, 2014 at 2:31 PM, Daniel Lezcano
> >>  wrote:
> >>> In the current code, the check to reflect or not the outcoming state is 
> >>> done
> >>> against the idle state which has been chosen and its value.
> >>>
> >>> Instead of doing a check in each of the reflect functions, just don't 
> >>> call reflect
> >>> if something went wrong in the idle path.
> >>>
> >>> Signed-off-by: Daniel Lezcano 
> >>> Acked-by: Nicolas Pitre 
> >>> ---
> >>>   drivers/cpuidle/governors/ladder.c | 3 +--
> >>>   drivers/cpuidle/governors/menu.c   | 4 +---
> >>>   kernel/sched/idle.c| 3 ++-
> >>>   3 files changed, 4 insertions(+), 6 deletions(-)
> >>>
> >>> diff --git a/drivers/cpuidle/governors/ladder.c 
> >>> b/drivers/cpuidle/governors/ladder.c
> >>> index fb396d6..c0b36a8 100644
> >>> --- a/drivers/cpuidle/governors/ladder.c
> >>> +++ b/drivers/cpuidle/governors/ladder.c
> >>> @@ -165,8 +165,7 @@ static int ladder_enable_device(struct cpuidle_driver 
> >>> *drv,
> >>>   static void ladder_reflect(struct cpuidle_device *dev, int index)
> >>>   {
> >>>  struct ladder_device *ldev = &__get_cpu_var(ladder_devices);
> >>> -   if (index > 0)
> >>> -   ldev->last_state_idx = index;
> >>> +   ldev->last_state_idx = index;
> >>>   }
> >>>
> >>>   static struct cpuidle_governor ladder_governor = {
> >>> diff --git a/drivers/cpuidle/governors/menu.c 
> >>> b/drivers/cpuidle/governors/menu.c
> >>> index a17515f..3907301 100644
> >>> --- a/drivers/cpuidle/governors/menu.c
> >>> +++ b/drivers/cpuidle/governors/menu.c
> >>> @@ -365,9 +365,7 @@ static int menu_select(struct cpuidle_driver *drv, 
> >>> struct cpuidle_device *dev,
> >>>   static void menu_reflect(struct cpuidle_device *dev, int index)
> >>>   {
> >>>  struct menu_device *data = &__get_cpu_var(menu_devices);
> >>> -   data->last_state_idx = index;
> >>> -   if (index >= 0)
> >>> -   data->needs_update = 1;
> >>> +   data->needs_update = 1;
> >>
> >> Why is the last_state_idx not getting updated ?
> >
> > Oups, right. This is missing.
> >
> > Thanks for pointing this out.
> >
> > By the way, I don't think a back end driver is changing the selected
> > state currently and I am not sure this is desirable since we want to
> > trust the state we are going (as a best effort). 
> 
> FYI, the OMAP3 backend driver can does not always obey the selected
> state, and will return a different state than the one requested.

The ACPI driver can do that as well.

-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 3/5] cpuidle: idle: menu: Don't reflect when a state selection failed

2014-10-29 Thread Kevin Hilman
Daniel Lezcano  writes:

> On 10/28/2014 08:01 AM, Preeti Murthy wrote:
>> On Thu, Oct 23, 2014 at 2:31 PM, Daniel Lezcano
>>  wrote:
>>> In the current code, the check to reflect or not the outcoming state is done
>>> against the idle state which has been chosen and its value.
>>>
>>> Instead of doing a check in each of the reflect functions, just don't call 
>>> reflect
>>> if something went wrong in the idle path.
>>>
>>> Signed-off-by: Daniel Lezcano 
>>> Acked-by: Nicolas Pitre 
>>> ---
>>>   drivers/cpuidle/governors/ladder.c | 3 +--
>>>   drivers/cpuidle/governors/menu.c   | 4 +---
>>>   kernel/sched/idle.c| 3 ++-
>>>   3 files changed, 4 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/drivers/cpuidle/governors/ladder.c 
>>> b/drivers/cpuidle/governors/ladder.c
>>> index fb396d6..c0b36a8 100644
>>> --- a/drivers/cpuidle/governors/ladder.c
>>> +++ b/drivers/cpuidle/governors/ladder.c
>>> @@ -165,8 +165,7 @@ static int ladder_enable_device(struct cpuidle_driver 
>>> *drv,
>>>   static void ladder_reflect(struct cpuidle_device *dev, int index)
>>>   {
>>>  struct ladder_device *ldev = &__get_cpu_var(ladder_devices);
>>> -   if (index > 0)
>>> -   ldev->last_state_idx = index;
>>> +   ldev->last_state_idx = index;
>>>   }
>>>
>>>   static struct cpuidle_governor ladder_governor = {
>>> diff --git a/drivers/cpuidle/governors/menu.c 
>>> b/drivers/cpuidle/governors/menu.c
>>> index a17515f..3907301 100644
>>> --- a/drivers/cpuidle/governors/menu.c
>>> +++ b/drivers/cpuidle/governors/menu.c
>>> @@ -365,9 +365,7 @@ static int menu_select(struct cpuidle_driver *drv, 
>>> struct cpuidle_device *dev,
>>>   static void menu_reflect(struct cpuidle_device *dev, int index)
>>>   {
>>>  struct menu_device *data = &__get_cpu_var(menu_devices);
>>> -   data->last_state_idx = index;
>>> -   if (index >= 0)
>>> -   data->needs_update = 1;
>>> +   data->needs_update = 1;
>>
>> Why is the last_state_idx not getting updated ?
>
> Oups, right. This is missing.
>
> Thanks for pointing this out.
>
> By the way, I don't think a back end driver is changing the selected
> state currently and I am not sure this is desirable since we want to
> trust the state we are going (as a best effort). 

FYI, the OMAP3 backend driver can does not always obey the selected
state, and will return a different state than the one requested.

Kevin
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 3/5] cpuidle: idle: menu: Don't reflect when a state selection failed

2014-10-29 Thread Kevin Hilman
Daniel Lezcano daniel.lezc...@linaro.org writes:

 On 10/28/2014 08:01 AM, Preeti Murthy wrote:
 On Thu, Oct 23, 2014 at 2:31 PM, Daniel Lezcano
 daniel.lezc...@linaro.org wrote:
 In the current code, the check to reflect or not the outcoming state is done
 against the idle state which has been chosen and its value.

 Instead of doing a check in each of the reflect functions, just don't call 
 reflect
 if something went wrong in the idle path.

 Signed-off-by: Daniel Lezcano daniel.lezc...@linaro.org
 Acked-by: Nicolas Pitre n...@linaro.org
 ---
   drivers/cpuidle/governors/ladder.c | 3 +--
   drivers/cpuidle/governors/menu.c   | 4 +---
   kernel/sched/idle.c| 3 ++-
   3 files changed, 4 insertions(+), 6 deletions(-)

 diff --git a/drivers/cpuidle/governors/ladder.c 
 b/drivers/cpuidle/governors/ladder.c
 index fb396d6..c0b36a8 100644
 --- a/drivers/cpuidle/governors/ladder.c
 +++ b/drivers/cpuidle/governors/ladder.c
 @@ -165,8 +165,7 @@ static int ladder_enable_device(struct cpuidle_driver 
 *drv,
   static void ladder_reflect(struct cpuidle_device *dev, int index)
   {
  struct ladder_device *ldev = __get_cpu_var(ladder_devices);
 -   if (index  0)
 -   ldev-last_state_idx = index;
 +   ldev-last_state_idx = index;
   }

   static struct cpuidle_governor ladder_governor = {
 diff --git a/drivers/cpuidle/governors/menu.c 
 b/drivers/cpuidle/governors/menu.c
 index a17515f..3907301 100644
 --- a/drivers/cpuidle/governors/menu.c
 +++ b/drivers/cpuidle/governors/menu.c
 @@ -365,9 +365,7 @@ static int menu_select(struct cpuidle_driver *drv, 
 struct cpuidle_device *dev,
   static void menu_reflect(struct cpuidle_device *dev, int index)
   {
  struct menu_device *data = __get_cpu_var(menu_devices);
 -   data-last_state_idx = index;
 -   if (index = 0)
 -   data-needs_update = 1;
 +   data-needs_update = 1;

 Why is the last_state_idx not getting updated ?

 Oups, right. This is missing.

 Thanks for pointing this out.

 By the way, I don't think a back end driver is changing the selected
 state currently and I am not sure this is desirable since we want to
 trust the state we are going (as a best effort). 

FYI, the OMAP3 backend driver can does not always obey the selected
state, and will return a different state than the one requested.

Kevin
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 3/5] cpuidle: idle: menu: Don't reflect when a state selection failed

2014-10-29 Thread Rafael J. Wysocki
On Wednesday, October 29, 2014 09:54:43 AM Kevin Hilman wrote:
 Daniel Lezcano daniel.lezc...@linaro.org writes:
 
  On 10/28/2014 08:01 AM, Preeti Murthy wrote:
  On Thu, Oct 23, 2014 at 2:31 PM, Daniel Lezcano
  daniel.lezc...@linaro.org wrote:
  In the current code, the check to reflect or not the outcoming state is 
  done
  against the idle state which has been chosen and its value.
 
  Instead of doing a check in each of the reflect functions, just don't 
  call reflect
  if something went wrong in the idle path.
 
  Signed-off-by: Daniel Lezcano daniel.lezc...@linaro.org
  Acked-by: Nicolas Pitre n...@linaro.org
  ---
drivers/cpuidle/governors/ladder.c | 3 +--
drivers/cpuidle/governors/menu.c   | 4 +---
kernel/sched/idle.c| 3 ++-
3 files changed, 4 insertions(+), 6 deletions(-)
 
  diff --git a/drivers/cpuidle/governors/ladder.c 
  b/drivers/cpuidle/governors/ladder.c
  index fb396d6..c0b36a8 100644
  --- a/drivers/cpuidle/governors/ladder.c
  +++ b/drivers/cpuidle/governors/ladder.c
  @@ -165,8 +165,7 @@ static int ladder_enable_device(struct cpuidle_driver 
  *drv,
static void ladder_reflect(struct cpuidle_device *dev, int index)
{
   struct ladder_device *ldev = __get_cpu_var(ladder_devices);
  -   if (index  0)
  -   ldev-last_state_idx = index;
  +   ldev-last_state_idx = index;
}
 
static struct cpuidle_governor ladder_governor = {
  diff --git a/drivers/cpuidle/governors/menu.c 
  b/drivers/cpuidle/governors/menu.c
  index a17515f..3907301 100644
  --- a/drivers/cpuidle/governors/menu.c
  +++ b/drivers/cpuidle/governors/menu.c
  @@ -365,9 +365,7 @@ static int menu_select(struct cpuidle_driver *drv, 
  struct cpuidle_device *dev,
static void menu_reflect(struct cpuidle_device *dev, int index)
{
   struct menu_device *data = __get_cpu_var(menu_devices);
  -   data-last_state_idx = index;
  -   if (index = 0)
  -   data-needs_update = 1;
  +   data-needs_update = 1;
 
  Why is the last_state_idx not getting updated ?
 
  Oups, right. This is missing.
 
  Thanks for pointing this out.
 
  By the way, I don't think a back end driver is changing the selected
  state currently and I am not sure this is desirable since we want to
  trust the state we are going (as a best effort). 
 
 FYI, the OMAP3 backend driver can does not always obey the selected
 state, and will return a different state than the one requested.

The ACPI driver can do that as well.

-- 
I speak only for myself.
Rafael J. Wysocki, Intel Open Source Technology Center.
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 3/5] cpuidle: idle: menu: Don't reflect when a state selection failed

2014-10-28 Thread Preeti U Murthy
On 10/28/2014 11:58 PM, Daniel Lezcano wrote:
> On 10/28/2014 08:01 AM, Preeti Murthy wrote:
>> On Thu, Oct 23, 2014 at 2:31 PM, Daniel Lezcano
>>  wrote:
>>> In the current code, the check to reflect or not the outcoming state
>>> is done
>>> against the idle state which has been chosen and its value.
>>>
>>> Instead of doing a check in each of the reflect functions, just don't
>>> call reflect
>>> if something went wrong in the idle path.
>>>
>>> Signed-off-by: Daniel Lezcano 
>>> Acked-by: Nicolas Pitre 
>>> ---
>>>   drivers/cpuidle/governors/ladder.c | 3 +--
>>>   drivers/cpuidle/governors/menu.c   | 4 +---
>>>   kernel/sched/idle.c| 3 ++-
>>>   3 files changed, 4 insertions(+), 6 deletions(-)
>>>
>>> diff --git a/drivers/cpuidle/governors/ladder.c
>>> b/drivers/cpuidle/governors/ladder.c
>>> index fb396d6..c0b36a8 100644
>>> --- a/drivers/cpuidle/governors/ladder.c
>>> +++ b/drivers/cpuidle/governors/ladder.c
>>> @@ -165,8 +165,7 @@ static int ladder_enable_device(struct
>>> cpuidle_driver *drv,
>>>   static void ladder_reflect(struct cpuidle_device *dev, int index)
>>>   {
>>>  struct ladder_device *ldev = &__get_cpu_var(ladder_devices);
>>> -   if (index > 0)
>>> -   ldev->last_state_idx = index;
>>> +   ldev->last_state_idx = index;
>>>   }
>>>
>>>   static struct cpuidle_governor ladder_governor = {
>>> diff --git a/drivers/cpuidle/governors/menu.c
>>> b/drivers/cpuidle/governors/menu.c
>>> index a17515f..3907301 100644
>>> --- a/drivers/cpuidle/governors/menu.c
>>> +++ b/drivers/cpuidle/governors/menu.c
>>> @@ -365,9 +365,7 @@ static int menu_select(struct cpuidle_driver
>>> *drv, struct cpuidle_device *dev,
>>>   static void menu_reflect(struct cpuidle_device *dev, int index)
>>>   {
>>>  struct menu_device *data = &__get_cpu_var(menu_devices);
>>> -   data->last_state_idx = index;
>>> -   if (index >= 0)
>>> -   data->needs_update = 1;
>>> +   data->needs_update = 1;
>>
>> Why is the last_state_idx not getting updated ?
> 
> Oups, right. This is missing.
> 
> Thanks for pointing this out.
> 
> By the way, I don't think a back end driver is changing the selected
> state currently and I am not sure this is desirable since we want to
> trust the state we are going (as a best effort). So if the 'enter'
> function does not change the index, that means the last_state_idx has
> not to be changed since it has been assigned in the 'select' function.

Hmm Right. So you might want to remove the last_state_idx update in
ladder_reflect() also?

Regards
Preeti U Murthy
> 
> 
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 3/5] cpuidle: idle: menu: Don't reflect when a state selection failed

2014-10-28 Thread Daniel Lezcano

On 10/28/2014 03:01 AM, Len Brown wrote:

On Thu, Oct 23, 2014 at 5:01 AM, Daniel Lezcano
 wrote:

In the current code, the check to reflect or not the outcoming state is done
against the idle state which has been chosen and its value.

Instead of doing a check in each of the reflect functions, just don't call 
reflect
if something went wrong in the idle path.

Signed-off-by: Daniel Lezcano 
Acked-by: Nicolas Pitre 
---
  drivers/cpuidle/governors/ladder.c | 3 +--
  drivers/cpuidle/governors/menu.c   | 4 +---
  kernel/sched/idle.c| 3 ++-
  3 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/cpuidle/governors/ladder.c 
b/drivers/cpuidle/governors/ladder.c
index fb396d6..c0b36a8 100644
--- a/drivers/cpuidle/governors/ladder.c
+++ b/drivers/cpuidle/governors/ladder.c
@@ -165,8 +165,7 @@ static int ladder_enable_device(struct cpuidle_driver *drv,
  static void ladder_reflect(struct cpuidle_device *dev, int index)
  {
 struct ladder_device *ldev = &__get_cpu_var(ladder_devices);
-   if (index > 0)
-   ldev->last_state_idx = index;


Before this patch, last_state_idx was never set to 0 here.
After this patch, last_state_idx will be set to 0 when entered_state is 0.
Is that okay?


Yes, I think so because the state zero won't be never selected on x86 
but on the other arch it will. So before this patch, on the other archs, 
the state 0 was never reflected as it should do.


This is resulting from the CPUIDLE_DRIVER_STATE_START macro (I hope I 
can kill this macro in a couple of patchset after this one).



+   ldev->last_state_idx = index;
  }

  static struct cpuidle_governor ladder_governor = {
diff --git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c
index a17515f..3907301 100644
--- a/drivers/cpuidle/governors/menu.c
+++ b/drivers/cpuidle/governors/menu.c
@@ -365,9 +365,7 @@ static int menu_select(struct cpuidle_driver *drv, struct 
cpuidle_device *dev,
  static void menu_reflect(struct cpuidle_device *dev, int index)
  {
 struct menu_device *data = &__get_cpu_var(menu_devices);
-   data->last_state_idx = index;
-   if (index >= 0)
-   data->needs_update = 1;
+   data->needs_update = 1;
  }

  /**
diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c
index 58c7522..49dcc7d 100644
--- a/kernel/sched/idle.c
+++ b/kernel/sched/idle.c
@@ -162,7 +162,8 @@ use_default:
 /*
  * Give the governor an opportunity to reflect on the outcome
  */
-   cpuidle_reflect(dev, entered_state);
+   if (entered_state >= 0)
+   cpuidle_reflect(dev, entered_state);

  exit_idle:
 __current_set_polling();
--
1.9.1

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







--
  Linaro.org │ Open source software for ARM SoCs

Follow Linaro:   Facebook |
 Twitter |
 Blog

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 3/5] cpuidle: idle: menu: Don't reflect when a state selection failed

2014-10-28 Thread Daniel Lezcano

On 10/28/2014 08:01 AM, Preeti Murthy wrote:

On Thu, Oct 23, 2014 at 2:31 PM, Daniel Lezcano
 wrote:

In the current code, the check to reflect or not the outcoming state is done
against the idle state which has been chosen and its value.

Instead of doing a check in each of the reflect functions, just don't call 
reflect
if something went wrong in the idle path.

Signed-off-by: Daniel Lezcano 
Acked-by: Nicolas Pitre 
---
  drivers/cpuidle/governors/ladder.c | 3 +--
  drivers/cpuidle/governors/menu.c   | 4 +---
  kernel/sched/idle.c| 3 ++-
  3 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/cpuidle/governors/ladder.c 
b/drivers/cpuidle/governors/ladder.c
index fb396d6..c0b36a8 100644
--- a/drivers/cpuidle/governors/ladder.c
+++ b/drivers/cpuidle/governors/ladder.c
@@ -165,8 +165,7 @@ static int ladder_enable_device(struct cpuidle_driver *drv,
  static void ladder_reflect(struct cpuidle_device *dev, int index)
  {
 struct ladder_device *ldev = &__get_cpu_var(ladder_devices);
-   if (index > 0)
-   ldev->last_state_idx = index;
+   ldev->last_state_idx = index;
  }

  static struct cpuidle_governor ladder_governor = {
diff --git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c
index a17515f..3907301 100644
--- a/drivers/cpuidle/governors/menu.c
+++ b/drivers/cpuidle/governors/menu.c
@@ -365,9 +365,7 @@ static int menu_select(struct cpuidle_driver *drv, struct 
cpuidle_device *dev,
  static void menu_reflect(struct cpuidle_device *dev, int index)
  {
 struct menu_device *data = &__get_cpu_var(menu_devices);
-   data->last_state_idx = index;
-   if (index >= 0)
-   data->needs_update = 1;
+   data->needs_update = 1;


Why is the last_state_idx not getting updated ?


Oups, right. This is missing.

Thanks for pointing this out.

By the way, I don't think a back end driver is changing the selected 
state currently and I am not sure this is desirable since we want to 
trust the state we are going (as a best effort). So if the 'enter' 
function does not change the index, that means the last_state_idx has 
not to be changed since it has been assigned in the 'select' function.




--
  Linaro.org │ Open source software for ARM SoCs

Follow Linaro:   Facebook |
 Twitter |
 Blog

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 3/5] cpuidle: idle: menu: Don't reflect when a state selection failed

2014-10-28 Thread Preeti Murthy
On Thu, Oct 23, 2014 at 2:31 PM, Daniel Lezcano
 wrote:
> In the current code, the check to reflect or not the outcoming state is done
> against the idle state which has been chosen and its value.
>
> Instead of doing a check in each of the reflect functions, just don't call 
> reflect
> if something went wrong in the idle path.
>
> Signed-off-by: Daniel Lezcano 
> Acked-by: Nicolas Pitre 
> ---
>  drivers/cpuidle/governors/ladder.c | 3 +--
>  drivers/cpuidle/governors/menu.c   | 4 +---
>  kernel/sched/idle.c| 3 ++-
>  3 files changed, 4 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/cpuidle/governors/ladder.c 
> b/drivers/cpuidle/governors/ladder.c
> index fb396d6..c0b36a8 100644
> --- a/drivers/cpuidle/governors/ladder.c
> +++ b/drivers/cpuidle/governors/ladder.c
> @@ -165,8 +165,7 @@ static int ladder_enable_device(struct cpuidle_driver 
> *drv,
>  static void ladder_reflect(struct cpuidle_device *dev, int index)
>  {
> struct ladder_device *ldev = &__get_cpu_var(ladder_devices);
> -   if (index > 0)
> -   ldev->last_state_idx = index;
> +   ldev->last_state_idx = index;
>  }
>
>  static struct cpuidle_governor ladder_governor = {
> diff --git a/drivers/cpuidle/governors/menu.c 
> b/drivers/cpuidle/governors/menu.c
> index a17515f..3907301 100644
> --- a/drivers/cpuidle/governors/menu.c
> +++ b/drivers/cpuidle/governors/menu.c
> @@ -365,9 +365,7 @@ static int menu_select(struct cpuidle_driver *drv, struct 
> cpuidle_device *dev,
>  static void menu_reflect(struct cpuidle_device *dev, int index)
>  {
> struct menu_device *data = &__get_cpu_var(menu_devices);
> -   data->last_state_idx = index;
> -   if (index >= 0)
> -   data->needs_update = 1;
> +   data->needs_update = 1;

Why is the last_state_idx not getting updated ?

Regards
Preeti U Murthy
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 3/5] cpuidle: idle: menu: Don't reflect when a state selection failed

2014-10-28 Thread Preeti Murthy
On Thu, Oct 23, 2014 at 2:31 PM, Daniel Lezcano
daniel.lezc...@linaro.org wrote:
 In the current code, the check to reflect or not the outcoming state is done
 against the idle state which has been chosen and its value.

 Instead of doing a check in each of the reflect functions, just don't call 
 reflect
 if something went wrong in the idle path.

 Signed-off-by: Daniel Lezcano daniel.lezc...@linaro.org
 Acked-by: Nicolas Pitre n...@linaro.org
 ---
  drivers/cpuidle/governors/ladder.c | 3 +--
  drivers/cpuidle/governors/menu.c   | 4 +---
  kernel/sched/idle.c| 3 ++-
  3 files changed, 4 insertions(+), 6 deletions(-)

 diff --git a/drivers/cpuidle/governors/ladder.c 
 b/drivers/cpuidle/governors/ladder.c
 index fb396d6..c0b36a8 100644
 --- a/drivers/cpuidle/governors/ladder.c
 +++ b/drivers/cpuidle/governors/ladder.c
 @@ -165,8 +165,7 @@ static int ladder_enable_device(struct cpuidle_driver 
 *drv,
  static void ladder_reflect(struct cpuidle_device *dev, int index)
  {
 struct ladder_device *ldev = __get_cpu_var(ladder_devices);
 -   if (index  0)
 -   ldev-last_state_idx = index;
 +   ldev-last_state_idx = index;
  }

  static struct cpuidle_governor ladder_governor = {
 diff --git a/drivers/cpuidle/governors/menu.c 
 b/drivers/cpuidle/governors/menu.c
 index a17515f..3907301 100644
 --- a/drivers/cpuidle/governors/menu.c
 +++ b/drivers/cpuidle/governors/menu.c
 @@ -365,9 +365,7 @@ static int menu_select(struct cpuidle_driver *drv, struct 
 cpuidle_device *dev,
  static void menu_reflect(struct cpuidle_device *dev, int index)
  {
 struct menu_device *data = __get_cpu_var(menu_devices);
 -   data-last_state_idx = index;
 -   if (index = 0)
 -   data-needs_update = 1;
 +   data-needs_update = 1;

Why is the last_state_idx not getting updated ?

Regards
Preeti U Murthy
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 3/5] cpuidle: idle: menu: Don't reflect when a state selection failed

2014-10-28 Thread Daniel Lezcano

On 10/28/2014 08:01 AM, Preeti Murthy wrote:

On Thu, Oct 23, 2014 at 2:31 PM, Daniel Lezcano
daniel.lezc...@linaro.org wrote:

In the current code, the check to reflect or not the outcoming state is done
against the idle state which has been chosen and its value.

Instead of doing a check in each of the reflect functions, just don't call 
reflect
if something went wrong in the idle path.

Signed-off-by: Daniel Lezcano daniel.lezc...@linaro.org
Acked-by: Nicolas Pitre n...@linaro.org
---
  drivers/cpuidle/governors/ladder.c | 3 +--
  drivers/cpuidle/governors/menu.c   | 4 +---
  kernel/sched/idle.c| 3 ++-
  3 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/cpuidle/governors/ladder.c 
b/drivers/cpuidle/governors/ladder.c
index fb396d6..c0b36a8 100644
--- a/drivers/cpuidle/governors/ladder.c
+++ b/drivers/cpuidle/governors/ladder.c
@@ -165,8 +165,7 @@ static int ladder_enable_device(struct cpuidle_driver *drv,
  static void ladder_reflect(struct cpuidle_device *dev, int index)
  {
 struct ladder_device *ldev = __get_cpu_var(ladder_devices);
-   if (index  0)
-   ldev-last_state_idx = index;
+   ldev-last_state_idx = index;
  }

  static struct cpuidle_governor ladder_governor = {
diff --git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c
index a17515f..3907301 100644
--- a/drivers/cpuidle/governors/menu.c
+++ b/drivers/cpuidle/governors/menu.c
@@ -365,9 +365,7 @@ static int menu_select(struct cpuidle_driver *drv, struct 
cpuidle_device *dev,
  static void menu_reflect(struct cpuidle_device *dev, int index)
  {
 struct menu_device *data = __get_cpu_var(menu_devices);
-   data-last_state_idx = index;
-   if (index = 0)
-   data-needs_update = 1;
+   data-needs_update = 1;


Why is the last_state_idx not getting updated ?


Oups, right. This is missing.

Thanks for pointing this out.

By the way, I don't think a back end driver is changing the selected 
state currently and I am not sure this is desirable since we want to 
trust the state we are going (as a best effort). So if the 'enter' 
function does not change the index, that means the last_state_idx has 
not to be changed since it has been assigned in the 'select' function.




--
 http://www.linaro.org/ Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  http://www.facebook.com/pages/Linaro Facebook |
http://twitter.com/#!/linaroorg Twitter |
http://www.linaro.org/linaro-blog/ Blog

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


Re: [PATCH V2 3/5] cpuidle: idle: menu: Don't reflect when a state selection failed

2014-10-28 Thread Daniel Lezcano

On 10/28/2014 03:01 AM, Len Brown wrote:

On Thu, Oct 23, 2014 at 5:01 AM, Daniel Lezcano
daniel.lezc...@linaro.org wrote:

In the current code, the check to reflect or not the outcoming state is done
against the idle state which has been chosen and its value.

Instead of doing a check in each of the reflect functions, just don't call 
reflect
if something went wrong in the idle path.

Signed-off-by: Daniel Lezcano daniel.lezc...@linaro.org
Acked-by: Nicolas Pitre n...@linaro.org
---
  drivers/cpuidle/governors/ladder.c | 3 +--
  drivers/cpuidle/governors/menu.c   | 4 +---
  kernel/sched/idle.c| 3 ++-
  3 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/cpuidle/governors/ladder.c 
b/drivers/cpuidle/governors/ladder.c
index fb396d6..c0b36a8 100644
--- a/drivers/cpuidle/governors/ladder.c
+++ b/drivers/cpuidle/governors/ladder.c
@@ -165,8 +165,7 @@ static int ladder_enable_device(struct cpuidle_driver *drv,
  static void ladder_reflect(struct cpuidle_device *dev, int index)
  {
 struct ladder_device *ldev = __get_cpu_var(ladder_devices);
-   if (index  0)
-   ldev-last_state_idx = index;


Before this patch, last_state_idx was never set to 0 here.
After this patch, last_state_idx will be set to 0 when entered_state is 0.
Is that okay?


Yes, I think so because the state zero won't be never selected on x86 
but on the other arch it will. So before this patch, on the other archs, 
the state 0 was never reflected as it should do.


This is resulting from the CPUIDLE_DRIVER_STATE_START macro (I hope I 
can kill this macro in a couple of patchset after this one).



+   ldev-last_state_idx = index;
  }

  static struct cpuidle_governor ladder_governor = {
diff --git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c
index a17515f..3907301 100644
--- a/drivers/cpuidle/governors/menu.c
+++ b/drivers/cpuidle/governors/menu.c
@@ -365,9 +365,7 @@ static int menu_select(struct cpuidle_driver *drv, struct 
cpuidle_device *dev,
  static void menu_reflect(struct cpuidle_device *dev, int index)
  {
 struct menu_device *data = __get_cpu_var(menu_devices);
-   data-last_state_idx = index;
-   if (index = 0)
-   data-needs_update = 1;
+   data-needs_update = 1;
  }

  /**
diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c
index 58c7522..49dcc7d 100644
--- a/kernel/sched/idle.c
+++ b/kernel/sched/idle.c
@@ -162,7 +162,8 @@ use_default:
 /*
  * Give the governor an opportunity to reflect on the outcome
  */
-   cpuidle_reflect(dev, entered_state);
+   if (entered_state = 0)
+   cpuidle_reflect(dev, entered_state);

  exit_idle:
 __current_set_polling();
--
1.9.1

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







--
 http://www.linaro.org/ Linaro.org │ Open source software for ARM SoCs

Follow Linaro:  http://www.facebook.com/pages/Linaro Facebook |
http://twitter.com/#!/linaroorg Twitter |
http://www.linaro.org/linaro-blog/ Blog

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


Re: [PATCH V2 3/5] cpuidle: idle: menu: Don't reflect when a state selection failed

2014-10-28 Thread Preeti U Murthy
On 10/28/2014 11:58 PM, Daniel Lezcano wrote:
 On 10/28/2014 08:01 AM, Preeti Murthy wrote:
 On Thu, Oct 23, 2014 at 2:31 PM, Daniel Lezcano
 daniel.lezc...@linaro.org wrote:
 In the current code, the check to reflect or not the outcoming state
 is done
 against the idle state which has been chosen and its value.

 Instead of doing a check in each of the reflect functions, just don't
 call reflect
 if something went wrong in the idle path.

 Signed-off-by: Daniel Lezcano daniel.lezc...@linaro.org
 Acked-by: Nicolas Pitre n...@linaro.org
 ---
   drivers/cpuidle/governors/ladder.c | 3 +--
   drivers/cpuidle/governors/menu.c   | 4 +---
   kernel/sched/idle.c| 3 ++-
   3 files changed, 4 insertions(+), 6 deletions(-)

 diff --git a/drivers/cpuidle/governors/ladder.c
 b/drivers/cpuidle/governors/ladder.c
 index fb396d6..c0b36a8 100644
 --- a/drivers/cpuidle/governors/ladder.c
 +++ b/drivers/cpuidle/governors/ladder.c
 @@ -165,8 +165,7 @@ static int ladder_enable_device(struct
 cpuidle_driver *drv,
   static void ladder_reflect(struct cpuidle_device *dev, int index)
   {
  struct ladder_device *ldev = __get_cpu_var(ladder_devices);
 -   if (index  0)
 -   ldev-last_state_idx = index;
 +   ldev-last_state_idx = index;
   }

   static struct cpuidle_governor ladder_governor = {
 diff --git a/drivers/cpuidle/governors/menu.c
 b/drivers/cpuidle/governors/menu.c
 index a17515f..3907301 100644
 --- a/drivers/cpuidle/governors/menu.c
 +++ b/drivers/cpuidle/governors/menu.c
 @@ -365,9 +365,7 @@ static int menu_select(struct cpuidle_driver
 *drv, struct cpuidle_device *dev,
   static void menu_reflect(struct cpuidle_device *dev, int index)
   {
  struct menu_device *data = __get_cpu_var(menu_devices);
 -   data-last_state_idx = index;
 -   if (index = 0)
 -   data-needs_update = 1;
 +   data-needs_update = 1;

 Why is the last_state_idx not getting updated ?
 
 Oups, right. This is missing.
 
 Thanks for pointing this out.
 
 By the way, I don't think a back end driver is changing the selected
 state currently and I am not sure this is desirable since we want to
 trust the state we are going (as a best effort). So if the 'enter'
 function does not change the index, that means the last_state_idx has
 not to be changed since it has been assigned in the 'select' function.

Hmm Right. So you might want to remove the last_state_idx update in
ladder_reflect() also?

Regards
Preeti U Murthy
 
 
 

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


Re: [PATCH V2 3/5] cpuidle: idle: menu: Don't reflect when a state selection failed

2014-10-27 Thread Len Brown
On Thu, Oct 23, 2014 at 5:01 AM, Daniel Lezcano
 wrote:
> In the current code, the check to reflect or not the outcoming state is done
> against the idle state which has been chosen and its value.
>
> Instead of doing a check in each of the reflect functions, just don't call 
> reflect
> if something went wrong in the idle path.
>
> Signed-off-by: Daniel Lezcano 
> Acked-by: Nicolas Pitre 
> ---
>  drivers/cpuidle/governors/ladder.c | 3 +--
>  drivers/cpuidle/governors/menu.c   | 4 +---
>  kernel/sched/idle.c| 3 ++-
>  3 files changed, 4 insertions(+), 6 deletions(-)
>
> diff --git a/drivers/cpuidle/governors/ladder.c 
> b/drivers/cpuidle/governors/ladder.c
> index fb396d6..c0b36a8 100644
> --- a/drivers/cpuidle/governors/ladder.c
> +++ b/drivers/cpuidle/governors/ladder.c
> @@ -165,8 +165,7 @@ static int ladder_enable_device(struct cpuidle_driver 
> *drv,
>  static void ladder_reflect(struct cpuidle_device *dev, int index)
>  {
> struct ladder_device *ldev = &__get_cpu_var(ladder_devices);
> -   if (index > 0)
> -   ldev->last_state_idx = index;

Before this patch, last_state_idx was never set to 0 here.
After this patch, last_state_idx will be set to 0 when entered_state is 0.
Is that okay?

thanks,
-Len

> +   ldev->last_state_idx = index;
>  }
>
>  static struct cpuidle_governor ladder_governor = {
> diff --git a/drivers/cpuidle/governors/menu.c 
> b/drivers/cpuidle/governors/menu.c
> index a17515f..3907301 100644
> --- a/drivers/cpuidle/governors/menu.c
> +++ b/drivers/cpuidle/governors/menu.c
> @@ -365,9 +365,7 @@ static int menu_select(struct cpuidle_driver *drv, struct 
> cpuidle_device *dev,
>  static void menu_reflect(struct cpuidle_device *dev, int index)
>  {
> struct menu_device *data = &__get_cpu_var(menu_devices);
> -   data->last_state_idx = index;
> -   if (index >= 0)
> -   data->needs_update = 1;
> +   data->needs_update = 1;
>  }
>
>  /**
> diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c
> index 58c7522..49dcc7d 100644
> --- a/kernel/sched/idle.c
> +++ b/kernel/sched/idle.c
> @@ -162,7 +162,8 @@ use_default:
> /*
>  * Give the governor an opportunity to reflect on the outcome
>  */
> -   cpuidle_reflect(dev, entered_state);
> +   if (entered_state >= 0)
> +   cpuidle_reflect(dev, entered_state);
>
>  exit_idle:
> __current_set_polling();
> --
> 1.9.1
>
> --
> To unsubscribe from this list: send the line "unsubscribe linux-pm" in
> the body of a message to majord...@vger.kernel.org
> More majordomo info at  http://vger.kernel.org/majordomo-info.html



-- 
Len Brown, Intel Open Source Technology Center
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


Re: [PATCH V2 3/5] cpuidle: idle: menu: Don't reflect when a state selection failed

2014-10-27 Thread Len Brown
On Thu, Oct 23, 2014 at 5:01 AM, Daniel Lezcano
daniel.lezc...@linaro.org wrote:
 In the current code, the check to reflect or not the outcoming state is done
 against the idle state which has been chosen and its value.

 Instead of doing a check in each of the reflect functions, just don't call 
 reflect
 if something went wrong in the idle path.

 Signed-off-by: Daniel Lezcano daniel.lezc...@linaro.org
 Acked-by: Nicolas Pitre n...@linaro.org
 ---
  drivers/cpuidle/governors/ladder.c | 3 +--
  drivers/cpuidle/governors/menu.c   | 4 +---
  kernel/sched/idle.c| 3 ++-
  3 files changed, 4 insertions(+), 6 deletions(-)

 diff --git a/drivers/cpuidle/governors/ladder.c 
 b/drivers/cpuidle/governors/ladder.c
 index fb396d6..c0b36a8 100644
 --- a/drivers/cpuidle/governors/ladder.c
 +++ b/drivers/cpuidle/governors/ladder.c
 @@ -165,8 +165,7 @@ static int ladder_enable_device(struct cpuidle_driver 
 *drv,
  static void ladder_reflect(struct cpuidle_device *dev, int index)
  {
 struct ladder_device *ldev = __get_cpu_var(ladder_devices);
 -   if (index  0)
 -   ldev-last_state_idx = index;

Before this patch, last_state_idx was never set to 0 here.
After this patch, last_state_idx will be set to 0 when entered_state is 0.
Is that okay?

thanks,
-Len

 +   ldev-last_state_idx = index;
  }

  static struct cpuidle_governor ladder_governor = {
 diff --git a/drivers/cpuidle/governors/menu.c 
 b/drivers/cpuidle/governors/menu.c
 index a17515f..3907301 100644
 --- a/drivers/cpuidle/governors/menu.c
 +++ b/drivers/cpuidle/governors/menu.c
 @@ -365,9 +365,7 @@ static int menu_select(struct cpuidle_driver *drv, struct 
 cpuidle_device *dev,
  static void menu_reflect(struct cpuidle_device *dev, int index)
  {
 struct menu_device *data = __get_cpu_var(menu_devices);
 -   data-last_state_idx = index;
 -   if (index = 0)
 -   data-needs_update = 1;
 +   data-needs_update = 1;
  }

  /**
 diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c
 index 58c7522..49dcc7d 100644
 --- a/kernel/sched/idle.c
 +++ b/kernel/sched/idle.c
 @@ -162,7 +162,8 @@ use_default:
 /*
  * Give the governor an opportunity to reflect on the outcome
  */
 -   cpuidle_reflect(dev, entered_state);
 +   if (entered_state = 0)
 +   cpuidle_reflect(dev, entered_state);

  exit_idle:
 __current_set_polling();
 --
 1.9.1

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



-- 
Len Brown, Intel Open Source Technology Center
--
To unsubscribe from this list: send the line unsubscribe linux-kernel in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH V2 3/5] cpuidle: idle: menu: Don't reflect when a state selection failed

2014-10-23 Thread Daniel Lezcano
In the current code, the check to reflect or not the outcoming state is done
against the idle state which has been chosen and its value.

Instead of doing a check in each of the reflect functions, just don't call 
reflect
if something went wrong in the idle path.

Signed-off-by: Daniel Lezcano 
Acked-by: Nicolas Pitre 
---
 drivers/cpuidle/governors/ladder.c | 3 +--
 drivers/cpuidle/governors/menu.c   | 4 +---
 kernel/sched/idle.c| 3 ++-
 3 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/cpuidle/governors/ladder.c 
b/drivers/cpuidle/governors/ladder.c
index fb396d6..c0b36a8 100644
--- a/drivers/cpuidle/governors/ladder.c
+++ b/drivers/cpuidle/governors/ladder.c
@@ -165,8 +165,7 @@ static int ladder_enable_device(struct cpuidle_driver *drv,
 static void ladder_reflect(struct cpuidle_device *dev, int index)
 {
struct ladder_device *ldev = &__get_cpu_var(ladder_devices);
-   if (index > 0)
-   ldev->last_state_idx = index;
+   ldev->last_state_idx = index;
 }
 
 static struct cpuidle_governor ladder_governor = {
diff --git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c
index a17515f..3907301 100644
--- a/drivers/cpuidle/governors/menu.c
+++ b/drivers/cpuidle/governors/menu.c
@@ -365,9 +365,7 @@ static int menu_select(struct cpuidle_driver *drv, struct 
cpuidle_device *dev,
 static void menu_reflect(struct cpuidle_device *dev, int index)
 {
struct menu_device *data = &__get_cpu_var(menu_devices);
-   data->last_state_idx = index;
-   if (index >= 0)
-   data->needs_update = 1;
+   data->needs_update = 1;
 }
 
 /**
diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c
index 58c7522..49dcc7d 100644
--- a/kernel/sched/idle.c
+++ b/kernel/sched/idle.c
@@ -162,7 +162,8 @@ use_default:
/*
 * Give the governor an opportunity to reflect on the outcome
 */
-   cpuidle_reflect(dev, entered_state);
+   if (entered_state >= 0)
+   cpuidle_reflect(dev, entered_state);
 
 exit_idle:
__current_set_polling();
-- 
1.9.1

--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majord...@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Please read the FAQ at  http://www.tux.org/lkml/


[PATCH V2 3/5] cpuidle: idle: menu: Don't reflect when a state selection failed

2014-10-23 Thread Daniel Lezcano
In the current code, the check to reflect or not the outcoming state is done
against the idle state which has been chosen and its value.

Instead of doing a check in each of the reflect functions, just don't call 
reflect
if something went wrong in the idle path.

Signed-off-by: Daniel Lezcano daniel.lezc...@linaro.org
Acked-by: Nicolas Pitre n...@linaro.org
---
 drivers/cpuidle/governors/ladder.c | 3 +--
 drivers/cpuidle/governors/menu.c   | 4 +---
 kernel/sched/idle.c| 3 ++-
 3 files changed, 4 insertions(+), 6 deletions(-)

diff --git a/drivers/cpuidle/governors/ladder.c 
b/drivers/cpuidle/governors/ladder.c
index fb396d6..c0b36a8 100644
--- a/drivers/cpuidle/governors/ladder.c
+++ b/drivers/cpuidle/governors/ladder.c
@@ -165,8 +165,7 @@ static int ladder_enable_device(struct cpuidle_driver *drv,
 static void ladder_reflect(struct cpuidle_device *dev, int index)
 {
struct ladder_device *ldev = __get_cpu_var(ladder_devices);
-   if (index  0)
-   ldev-last_state_idx = index;
+   ldev-last_state_idx = index;
 }
 
 static struct cpuidle_governor ladder_governor = {
diff --git a/drivers/cpuidle/governors/menu.c b/drivers/cpuidle/governors/menu.c
index a17515f..3907301 100644
--- a/drivers/cpuidle/governors/menu.c
+++ b/drivers/cpuidle/governors/menu.c
@@ -365,9 +365,7 @@ static int menu_select(struct cpuidle_driver *drv, struct 
cpuidle_device *dev,
 static void menu_reflect(struct cpuidle_device *dev, int index)
 {
struct menu_device *data = __get_cpu_var(menu_devices);
-   data-last_state_idx = index;
-   if (index = 0)
-   data-needs_update = 1;
+   data-needs_update = 1;
 }
 
 /**
diff --git a/kernel/sched/idle.c b/kernel/sched/idle.c
index 58c7522..49dcc7d 100644
--- a/kernel/sched/idle.c
+++ b/kernel/sched/idle.c
@@ -162,7 +162,8 @@ use_default:
/*
 * Give the governor an opportunity to reflect on the outcome
 */
-   cpuidle_reflect(dev, entered_state);
+   if (entered_state = 0)
+   cpuidle_reflect(dev, entered_state);
 
 exit_idle:
__current_set_polling();
-- 
1.9.1

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