[3/3] cpuidle, ACPI: remove unused CPUIDLE_FLAG_TIME_INVALID
diff mbox

Message ID 2d1595ea66f8eadeb1e337354b311c4f5282e2a1.1418712225.git.len.brown@intel.com
State Accepted
Headers show

Commit Message

Len Brown Dec. 16, 2014, 6:52 a.m. UTC
From: Len Brown <len.brown@intel.com>

CPUIDLE_FLAG_TIME_INVALID is no longer checked
by menu or ladder cpuidle governors, so don't
bother setting or defining it.

It was originally invented to account for the fact that
acpi_safe_halt() enables interrupts to invoke HLT.
That would allow interrupt service routines to be included
in the last_idle duration measurements made in cpuidle_enter_state(),
potentially returning a duration much larger than reality.

But menu and ladder can gracefully handle erroneously large duration
intervals without checking for CPUIDLE_FLAG_TIME_INVALID.
Further, if they don't check CPUIDLE_FLAG_TIME_INVALID, they
can also benefit from the instances when the duration interval
is not erroneously large.

Signed-off-by: Len Brown <len.brown@intel.com>
Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 drivers/acpi/processor_idle.c | 2 --
 include/linux/cpuidle.h       | 3 ---
 2 files changed, 5 deletions(-)

Comments

Daniel Lezcano Dec. 16, 2014, 11:08 a.m. UTC | #1
On 12/16/2014 07:52 AM, Len Brown wrote:
> From: Len Brown <len.brown@intel.com>
>
> CPUIDLE_FLAG_TIME_INVALID is no longer checked
> by menu or ladder cpuidle governors, so don't
> bother setting or defining it.
>
> It was originally invented to account for the fact that
> acpi_safe_halt() enables interrupts to invoke HLT.
> That would allow interrupt service routines to be included
> in the last_idle duration measurements made in cpuidle_enter_state(),
> potentially returning a duration much larger than reality.
>
> But menu and ladder can gracefully handle erroneously large duration
> intervals without checking for CPUIDLE_FLAG_TIME_INVALID.
> Further, if they don't check CPUIDLE_FLAG_TIME_INVALID, they
> can also benefit from the instances when the duration interval
> is not erroneously large.
>
> Signed-off-by: Len Brown <len.brown@intel.com>
> Cc: Daniel Lezcano <daniel.lezcano@linaro.org>

Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>


> ---
>   drivers/acpi/processor_idle.c | 2 --
>   include/linux/cpuidle.h       | 3 ---
>   2 files changed, 5 deletions(-)
>
> diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
> index 4995365..87b704e 100644
> --- a/drivers/acpi/processor_idle.c
> +++ b/drivers/acpi/processor_idle.c
> @@ -985,8 +985,6 @@ static int acpi_processor_setup_cpuidle_states(struct acpi_processor *pr)
>   		state->flags = 0;
>   		switch (cx->type) {
>   			case ACPI_STATE_C1:
> -			if (cx->entry_method != ACPI_CSTATE_FFH)
> -				state->flags |= CPUIDLE_FLAG_TIME_INVALID;
>
>   			state->enter = acpi_idle_enter_c1;
>   			state->enter_dead = acpi_idle_play_dead;
> diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h
> index a07e087..ab70f3b 100644
> --- a/include/linux/cpuidle.h
> +++ b/include/linux/cpuidle.h
> @@ -53,7 +53,6 @@ struct cpuidle_state {
>   };
>
>   /* Idle State Flags */
> -#define CPUIDLE_FLAG_TIME_INVALID	(0x01) /* is residency time measurable? */
>   #define CPUIDLE_FLAG_COUPLED	(0x02) /* state applies to multiple cpus */
>   #define CPUIDLE_FLAG_TIMER_STOP (0x04)  /* timer is stopped on this state */
>
> @@ -89,8 +88,6 @@ DECLARE_PER_CPU(struct cpuidle_device, cpuidle_dev);
>   /**
>    * cpuidle_get_last_residency - retrieves the last state's residency time
>    * @dev: the target CPU
> - *
> - * NOTE: this value is invalid if CPUIDLE_FLAG_TIME_INVALID is set
>    */
>   static inline int cpuidle_get_last_residency(struct cpuidle_device *dev)
>   {
>
Rafael J. Wysocki Dec. 17, 2014, 12:28 a.m. UTC | #2
On Tuesday, December 16, 2014 12:08:25 PM Daniel Lezcano wrote:
> On 12/16/2014 07:52 AM, Len Brown wrote:
> > From: Len Brown <len.brown@intel.com>
> >
> > CPUIDLE_FLAG_TIME_INVALID is no longer checked
> > by menu or ladder cpuidle governors, so don't
> > bother setting or defining it.
> >
> > It was originally invented to account for the fact that
> > acpi_safe_halt() enables interrupts to invoke HLT.
> > That would allow interrupt service routines to be included
> > in the last_idle duration measurements made in cpuidle_enter_state(),
> > potentially returning a duration much larger than reality.
> >
> > But menu and ladder can gracefully handle erroneously large duration
> > intervals without checking for CPUIDLE_FLAG_TIME_INVALID.
> > Further, if they don't check CPUIDLE_FLAG_TIME_INVALID, they
> > can also benefit from the instances when the duration interval
> > is not erroneously large.
> >
> > Signed-off-by: Len Brown <len.brown@intel.com>
> > Cc: Daniel Lezcano <daniel.lezcano@linaro.org>
> 
> Acked-by: Daniel Lezcano <daniel.lezcano@linaro.org>

OK

Since the material for my next pull request is staged already, I'm going to
queue up this series for 3.19-rc, but I'll most likely push it for -rc2.

Thanks!

> > ---
> >   drivers/acpi/processor_idle.c | 2 --
> >   include/linux/cpuidle.h       | 3 ---
> >   2 files changed, 5 deletions(-)
> >
> > diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
> > index 4995365..87b704e 100644
> > --- a/drivers/acpi/processor_idle.c
> > +++ b/drivers/acpi/processor_idle.c
> > @@ -985,8 +985,6 @@ static int acpi_processor_setup_cpuidle_states(struct acpi_processor *pr)
> >   		state->flags = 0;
> >   		switch (cx->type) {
> >   			case ACPI_STATE_C1:
> > -			if (cx->entry_method != ACPI_CSTATE_FFH)
> > -				state->flags |= CPUIDLE_FLAG_TIME_INVALID;
> >
> >   			state->enter = acpi_idle_enter_c1;
> >   			state->enter_dead = acpi_idle_play_dead;
> > diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h
> > index a07e087..ab70f3b 100644
> > --- a/include/linux/cpuidle.h
> > +++ b/include/linux/cpuidle.h
> > @@ -53,7 +53,6 @@ struct cpuidle_state {
> >   };
> >
> >   /* Idle State Flags */
> > -#define CPUIDLE_FLAG_TIME_INVALID	(0x01) /* is residency time measurable? */
> >   #define CPUIDLE_FLAG_COUPLED	(0x02) /* state applies to multiple cpus */
> >   #define CPUIDLE_FLAG_TIMER_STOP (0x04)  /* timer is stopped on this state */
> >
> > @@ -89,8 +88,6 @@ DECLARE_PER_CPU(struct cpuidle_device, cpuidle_dev);
> >   /**
> >    * cpuidle_get_last_residency - retrieves the last state's residency time
> >    * @dev: the target CPU
> > - *
> > - * NOTE: this value is invalid if CPUIDLE_FLAG_TIME_INVALID is set
> >    */
> >   static inline int cpuidle_get_last_residency(struct cpuidle_device *dev)
> >   {
> >
> 
> 
>

Patch
diff mbox

diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index 4995365..87b704e 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -985,8 +985,6 @@  static int acpi_processor_setup_cpuidle_states(struct acpi_processor *pr)
 		state->flags = 0;
 		switch (cx->type) {
 			case ACPI_STATE_C1:
-			if (cx->entry_method != ACPI_CSTATE_FFH)
-				state->flags |= CPUIDLE_FLAG_TIME_INVALID;
 
 			state->enter = acpi_idle_enter_c1;
 			state->enter_dead = acpi_idle_play_dead;
diff --git a/include/linux/cpuidle.h b/include/linux/cpuidle.h
index a07e087..ab70f3b 100644
--- a/include/linux/cpuidle.h
+++ b/include/linux/cpuidle.h
@@ -53,7 +53,6 @@  struct cpuidle_state {
 };
 
 /* Idle State Flags */
-#define CPUIDLE_FLAG_TIME_INVALID	(0x01) /* is residency time measurable? */
 #define CPUIDLE_FLAG_COUPLED	(0x02) /* state applies to multiple cpus */
 #define CPUIDLE_FLAG_TIMER_STOP (0x04)  /* timer is stopped on this state */
 
@@ -89,8 +88,6 @@  DECLARE_PER_CPU(struct cpuidle_device, cpuidle_dev);
 /**
  * cpuidle_get_last_residency - retrieves the last state's residency time
  * @dev: the target CPU
- *
- * NOTE: this value is invalid if CPUIDLE_FLAG_TIME_INVALID is set
  */
 static inline int cpuidle_get_last_residency(struct cpuidle_device *dev)
 {