diff mbox

[2/5] acpi : remove index from acpi_processor_cx structure

Message ID 1342127026-1526-2-git-send-email-daniel.lezcano@linaro.org (mailing list archive)
State New, archived
Headers show

Commit Message

Daniel Lezcano July 12, 2012, 9:03 p.m. UTC
Remove the index field. It could be given without adding extra
information in the cx structure.

Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
---
 arch/x86/kernel/acpi/cstate.c |   18 +++++++++---------
 drivers/acpi/processor_idle.c |   15 +++++++--------
 include/acpi/processor.h      |   11 +++++------
 3 files changed, 21 insertions(+), 23 deletions(-)

Comments

Rafael Wysocki July 12, 2012, 9:44 p.m. UTC | #1
On Thursday, July 12, 2012, Daniel Lezcano wrote:
> Remove the index field. It could be given without adding extra
> information in the cx structure.
> 
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>

I'm not sure about this one.

The code seems to be more straightforward without it, actually.

Why exactly do you need to remove the field?

Rafael


> ---
>  arch/x86/kernel/acpi/cstate.c |   18 +++++++++---------
>  drivers/acpi/processor_idle.c |   15 +++++++--------
>  include/acpi/processor.h      |   11 +++++------
>  3 files changed, 21 insertions(+), 23 deletions(-)
> 
> diff --git a/arch/x86/kernel/acpi/cstate.c b/arch/x86/kernel/acpi/cstate.c
> index d2b7f27..faa7f50 100644
> --- a/arch/x86/kernel/acpi/cstate.c
> +++ b/arch/x86/kernel/acpi/cstate.c
> @@ -112,8 +112,8 @@ out:
>  	return retval;
>  }
>  
> -int acpi_processor_ffh_cstate_probe(unsigned int cpu,
> -		struct acpi_processor_cx *cx, struct acpi_power_register *reg)
> +int acpi_processor_ffh_cstate_probe(unsigned int cpu, struct acpi_processor_cx *cx,
> +				    int index, struct acpi_power_register *reg)
>  {
>  	struct cstate_entry *percpu_entry;
>  	struct cpuinfo_x86 *c = &cpu_data(cpu);
> @@ -126,16 +126,16 @@ int acpi_processor_ffh_cstate_probe(unsigned int cpu,
>  		return -1;
>  
>  	percpu_entry = per_cpu_ptr(cpu_cstate_entry, cpu);
> -	percpu_entry->states[cx->index].eax = 0;
> -	percpu_entry->states[cx->index].ecx = 0;
> +	percpu_entry->states[index].eax = 0;
> +	percpu_entry->states[index].ecx = 0;
>  
>  	/* Make sure we are running on right CPU */
>  
>  	retval = work_on_cpu(cpu, acpi_processor_ffh_cstate_probe_cpu, cx);
>  	if (retval == 0) {
>  		/* Use the hint in CST */
> -		percpu_entry->states[cx->index].eax = cx->address;
> -		percpu_entry->states[cx->index].ecx = MWAIT_ECX_INTERRUPT_BREAK;
> +		percpu_entry->states[index].eax = cx->address;
> +		percpu_entry->states[index].ecx = MWAIT_ECX_INTERRUPT_BREAK;
>  	}
>  
>  	/*
> @@ -173,14 +173,14 @@ void mwait_idle_with_hints(unsigned long ax, unsigned long cx)
>  	}
>  }
>  
> -void acpi_processor_ffh_cstate_enter(struct acpi_processor_cx *cx)
> +void acpi_processor_ffh_cstate_enter(int index)
>  {
>  	unsigned int cpu = smp_processor_id();
>  	struct cstate_entry *percpu_entry;
>  
>  	percpu_entry = per_cpu_ptr(cpu_cstate_entry, cpu);
> -	mwait_idle_with_hints(percpu_entry->states[cx->index].eax,
> -	                      percpu_entry->states[cx->index].ecx);
> +	mwait_idle_with_hints(percpu_entry->states[index].eax,
> +	                      percpu_entry->states[index].ecx);
>  }
>  EXPORT_SYMBOL_GPL(acpi_processor_ffh_cstate_enter);
>  
> diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
> index da92c65..9808e60 100644
> --- a/drivers/acpi/processor_idle.c
> +++ b/drivers/acpi/processor_idle.c
> @@ -433,12 +433,11 @@ static int acpi_processor_get_power_info_cst(struct acpi_processor *pr)
>  			current_count++;
>  
>  		cx.address = reg->address;
> -		cx.index = current_count + 1;
>  
>  		cx.entry_method = ACPI_CSTATE_SYSTEMIO;
>  		if (reg->space_id == ACPI_ADR_SPACE_FIXED_HARDWARE) {
> -			if (acpi_processor_ffh_cstate_probe
> -					(pr->id, &cx, reg) == 0) {
> +			if (acpi_processor_ffh_cstate_probe(
> +				    pr->id, &cx, current_count + 1, reg) == 0) {
>  				cx.entry_method = ACPI_CSTATE_FFH;
>  			} else if (cx.type == ACPI_STATE_C1) {
>  				/*
> @@ -707,13 +706,13 @@ static int acpi_idle_bm_check(void)
>   *
>   * Caller disables interrupt before call and enables interrupt after return.
>   */
> -static inline void acpi_idle_do_entry(struct acpi_processor_cx *cx)
> +static inline void acpi_idle_do_entry(struct acpi_processor_cx *cx, int index)
>  {
>  	/* Don't trace irqs off for idle */
>  	stop_critical_timings();
>  	if (cx->entry_method == ACPI_CSTATE_FFH) {
>  		/* Call into architectural FFH based C-state */
> -		acpi_processor_ffh_cstate_enter(cx);
> +		acpi_processor_ffh_cstate_enter(index);
>  	} else if (cx->entry_method == ACPI_CSTATE_HALT) {
>  		acpi_safe_halt();
>  	} else {
> @@ -754,7 +753,7 @@ static int acpi_idle_enter_c1(struct cpuidle_device *dev,
>  
>  	lapic_timer_state_broadcast(pr, cx, 1);
>  	kt1 = ktime_get_real();
> -	acpi_idle_do_entry(cx);
> +	acpi_idle_do_entry(cx, index);
>  	kt2 = ktime_get_real();
>  	idle_time =  ktime_to_us(ktime_sub(kt2, kt1));
>  
> @@ -848,7 +847,7 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev,
>  	kt1 = ktime_get_real();
>  	/* Tell the scheduler that we are going deep-idle: */
>  	sched_clock_idle_sleep_event();
> -	acpi_idle_do_entry(cx);
> +	acpi_idle_do_entry(cx, index);
>  	kt2 = ktime_get_real();
>  	idle_time_ns = ktime_to_ns(ktime_sub(kt2, kt1));
>  	idle_time = idle_time_ns;
> @@ -960,7 +959,7 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
>  		ACPI_FLUSH_CPU_CACHE();
>  	}
>  
> -	acpi_idle_do_entry(cx);
> +	acpi_idle_do_entry(cx, index);
>  
>  	/* Re-enable bus master arbitration */
>  	if (pr->flags.bm_check && pr->flags.bm_control) {
> diff --git a/include/acpi/processor.h b/include/acpi/processor.h
> index a70cbcc..d09c94f 100644
> --- a/include/acpi/processor.h
> +++ b/include/acpi/processor.h
> @@ -57,7 +57,6 @@ struct acpi_processor_cx {
>  	u8 type;
>  	u32 address;
>  	u8 entry_method;
> -	u8 index;
>  	u32 latency;
>  	u32 power;
>  	u32 usage;
> @@ -249,8 +248,9 @@ void acpi_processor_power_init_bm_check(struct acpi_processor_flags *flags,
>  					unsigned int cpu);
>  int acpi_processor_ffh_cstate_probe(unsigned int cpu,
>  				    struct acpi_processor_cx *cx,
> +				    int index,
>  				    struct acpi_power_register *reg);
> -void acpi_processor_ffh_cstate_enter(struct acpi_processor_cx *cstate);
> +void acpi_processor_ffh_cstate_enter(int index);
>  #else
>  static inline void acpi_processor_power_init_bm_check(struct
>  						      acpi_processor_flags
> @@ -261,13 +261,12 @@ static inline void acpi_processor_power_init_bm_check(struct
>  }
>  static inline int acpi_processor_ffh_cstate_probe(unsigned int cpu,
>  						  struct acpi_processor_cx *cx,
> -						  struct acpi_power_register
> -						  *reg)
> +						  int index,
> +						  struct acpi_power_register *reg)
>  {
>  	return -1;
>  }
> -static inline void acpi_processor_ffh_cstate_enter(struct acpi_processor_cx
> -						   *cstate)
> +static inline void acpi_processor_ffh_cstate_enter(int index)
>  {
>  	return;
>  }
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Daniel Lezcano July 12, 2012, 9:57 p.m. UTC | #2
On 07/12/2012 11:44 PM, Rafael J. Wysocki wrote:
> On Thursday, July 12, 2012, Daniel Lezcano wrote:
>> Remove the index field. It could be given without adding extra
>> information in the cx structure.
>>
>> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> 
> I'm not sure about this one.
> 
> The code seems to be more straightforward without it, actually.
> 
> Why exactly do you need to remove the field?

Actually, I am trying to cleaning up the different structure in the acpi
and clearly separate what is for cpuidle and what is for acpi.

I noticed there are some duplicated informations like the index and what
is described in the cx state.

I am trying to consolidate the code of the cpuidle drivers across the
different platform and I have to admit the processor_idle is the most
complicated as the cpuidle code is spreaded across different files
(processor_driver.c, processor.h, arch/x86/kernel/acpi/cstate.c, etc
...). So these small patches are to litlle by little separate these two
subsystems (acpi and cpuidle) and have everything related to cpuidle
into the processor_idle file.

For this patch, it is right it seems to introduce more complexity but
the objective is to consolidate the code. I hope by cleaning the
different structures we will gain in readability.
Rafael Wysocki July 13, 2012, 6:13 p.m. UTC | #3
On Thursday, July 12, 2012, Daniel Lezcano wrote:
> On 07/12/2012 11:44 PM, Rafael J. Wysocki wrote:
> > On Thursday, July 12, 2012, Daniel Lezcano wrote:
> >> Remove the index field. It could be given without adding extra
> >> information in the cx structure.
> >>
> >> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> > 
> > I'm not sure about this one.
> > 
> > The code seems to be more straightforward without it, actually.
> > 
> > Why exactly do you need to remove the field?
> 
> Actually, I am trying to cleaning up the different structure in the acpi
> and clearly separate what is for cpuidle and what is for acpi.
> 
> I noticed there are some duplicated informations like the index and what
> is described in the cx state.
> 
> I am trying to consolidate the code of the cpuidle drivers across the
> different platform and I have to admit the processor_idle is the most
> complicated as the cpuidle code is spreaded across different files
> (processor_driver.c, processor.h, arch/x86/kernel/acpi/cstate.c, etc
> ...). So these small patches are to litlle by little separate these two
> subsystems (acpi and cpuidle) and have everything related to cpuidle
> into the processor_idle file.
> 
> For this patch, it is right it seems to introduce more complexity but
> the objective is to consolidate the code. I hope by cleaning the
> different structures we will gain in readability.

OK, I'm generally fine with that, but I'd prefer to defer this kind of
changes to 3.7 so as to avoid rushing them in.

Removing unused fields is entirely fine at this point, I don't see how
someone may see that objectionable, but let's just avoid playing with fields
that are used for now.

Thanks,
Rafael
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Rafael Wysocki July 17, 2012, 8:32 p.m. UTC | #4
On Thursday, July 12, 2012, Daniel Lezcano wrote:
> Remove the index field. It could be given without adding extra
> information in the cx structure.
> 
> Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>

Applied to the 'pm-cpuidle' branch of the linux-pm.git tree.

Thanks,
Rafael


> ---
>  arch/x86/kernel/acpi/cstate.c |   18 +++++++++---------
>  drivers/acpi/processor_idle.c |   15 +++++++--------
>  include/acpi/processor.h      |   11 +++++------
>  3 files changed, 21 insertions(+), 23 deletions(-)
> 
> diff --git a/arch/x86/kernel/acpi/cstate.c b/arch/x86/kernel/acpi/cstate.c
> index d2b7f27..faa7f50 100644
> --- a/arch/x86/kernel/acpi/cstate.c
> +++ b/arch/x86/kernel/acpi/cstate.c
> @@ -112,8 +112,8 @@ out:
>  	return retval;
>  }
>  
> -int acpi_processor_ffh_cstate_probe(unsigned int cpu,
> -		struct acpi_processor_cx *cx, struct acpi_power_register *reg)
> +int acpi_processor_ffh_cstate_probe(unsigned int cpu, struct acpi_processor_cx *cx,
> +				    int index, struct acpi_power_register *reg)
>  {
>  	struct cstate_entry *percpu_entry;
>  	struct cpuinfo_x86 *c = &cpu_data(cpu);
> @@ -126,16 +126,16 @@ int acpi_processor_ffh_cstate_probe(unsigned int cpu,
>  		return -1;
>  
>  	percpu_entry = per_cpu_ptr(cpu_cstate_entry, cpu);
> -	percpu_entry->states[cx->index].eax = 0;
> -	percpu_entry->states[cx->index].ecx = 0;
> +	percpu_entry->states[index].eax = 0;
> +	percpu_entry->states[index].ecx = 0;
>  
>  	/* Make sure we are running on right CPU */
>  
>  	retval = work_on_cpu(cpu, acpi_processor_ffh_cstate_probe_cpu, cx);
>  	if (retval == 0) {
>  		/* Use the hint in CST */
> -		percpu_entry->states[cx->index].eax = cx->address;
> -		percpu_entry->states[cx->index].ecx = MWAIT_ECX_INTERRUPT_BREAK;
> +		percpu_entry->states[index].eax = cx->address;
> +		percpu_entry->states[index].ecx = MWAIT_ECX_INTERRUPT_BREAK;
>  	}
>  
>  	/*
> @@ -173,14 +173,14 @@ void mwait_idle_with_hints(unsigned long ax, unsigned long cx)
>  	}
>  }
>  
> -void acpi_processor_ffh_cstate_enter(struct acpi_processor_cx *cx)
> +void acpi_processor_ffh_cstate_enter(int index)
>  {
>  	unsigned int cpu = smp_processor_id();
>  	struct cstate_entry *percpu_entry;
>  
>  	percpu_entry = per_cpu_ptr(cpu_cstate_entry, cpu);
> -	mwait_idle_with_hints(percpu_entry->states[cx->index].eax,
> -	                      percpu_entry->states[cx->index].ecx);
> +	mwait_idle_with_hints(percpu_entry->states[index].eax,
> +	                      percpu_entry->states[index].ecx);
>  }
>  EXPORT_SYMBOL_GPL(acpi_processor_ffh_cstate_enter);
>  
> diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
> index da92c65..9808e60 100644
> --- a/drivers/acpi/processor_idle.c
> +++ b/drivers/acpi/processor_idle.c
> @@ -433,12 +433,11 @@ static int acpi_processor_get_power_info_cst(struct acpi_processor *pr)
>  			current_count++;
>  
>  		cx.address = reg->address;
> -		cx.index = current_count + 1;
>  
>  		cx.entry_method = ACPI_CSTATE_SYSTEMIO;
>  		if (reg->space_id == ACPI_ADR_SPACE_FIXED_HARDWARE) {
> -			if (acpi_processor_ffh_cstate_probe
> -					(pr->id, &cx, reg) == 0) {
> +			if (acpi_processor_ffh_cstate_probe(
> +				    pr->id, &cx, current_count + 1, reg) == 0) {
>  				cx.entry_method = ACPI_CSTATE_FFH;
>  			} else if (cx.type == ACPI_STATE_C1) {
>  				/*
> @@ -707,13 +706,13 @@ static int acpi_idle_bm_check(void)
>   *
>   * Caller disables interrupt before call and enables interrupt after return.
>   */
> -static inline void acpi_idle_do_entry(struct acpi_processor_cx *cx)
> +static inline void acpi_idle_do_entry(struct acpi_processor_cx *cx, int index)
>  {
>  	/* Don't trace irqs off for idle */
>  	stop_critical_timings();
>  	if (cx->entry_method == ACPI_CSTATE_FFH) {
>  		/* Call into architectural FFH based C-state */
> -		acpi_processor_ffh_cstate_enter(cx);
> +		acpi_processor_ffh_cstate_enter(index);
>  	} else if (cx->entry_method == ACPI_CSTATE_HALT) {
>  		acpi_safe_halt();
>  	} else {
> @@ -754,7 +753,7 @@ static int acpi_idle_enter_c1(struct cpuidle_device *dev,
>  
>  	lapic_timer_state_broadcast(pr, cx, 1);
>  	kt1 = ktime_get_real();
> -	acpi_idle_do_entry(cx);
> +	acpi_idle_do_entry(cx, index);
>  	kt2 = ktime_get_real();
>  	idle_time =  ktime_to_us(ktime_sub(kt2, kt1));
>  
> @@ -848,7 +847,7 @@ static int acpi_idle_enter_simple(struct cpuidle_device *dev,
>  	kt1 = ktime_get_real();
>  	/* Tell the scheduler that we are going deep-idle: */
>  	sched_clock_idle_sleep_event();
> -	acpi_idle_do_entry(cx);
> +	acpi_idle_do_entry(cx, index);
>  	kt2 = ktime_get_real();
>  	idle_time_ns = ktime_to_ns(ktime_sub(kt2, kt1));
>  	idle_time = idle_time_ns;
> @@ -960,7 +959,7 @@ static int acpi_idle_enter_bm(struct cpuidle_device *dev,
>  		ACPI_FLUSH_CPU_CACHE();
>  	}
>  
> -	acpi_idle_do_entry(cx);
> +	acpi_idle_do_entry(cx, index);
>  
>  	/* Re-enable bus master arbitration */
>  	if (pr->flags.bm_check && pr->flags.bm_control) {
> diff --git a/include/acpi/processor.h b/include/acpi/processor.h
> index a70cbcc..d09c94f 100644
> --- a/include/acpi/processor.h
> +++ b/include/acpi/processor.h
> @@ -57,7 +57,6 @@ struct acpi_processor_cx {
>  	u8 type;
>  	u32 address;
>  	u8 entry_method;
> -	u8 index;
>  	u32 latency;
>  	u32 power;
>  	u32 usage;
> @@ -249,8 +248,9 @@ void acpi_processor_power_init_bm_check(struct acpi_processor_flags *flags,
>  					unsigned int cpu);
>  int acpi_processor_ffh_cstate_probe(unsigned int cpu,
>  				    struct acpi_processor_cx *cx,
> +				    int index,
>  				    struct acpi_power_register *reg);
> -void acpi_processor_ffh_cstate_enter(struct acpi_processor_cx *cstate);
> +void acpi_processor_ffh_cstate_enter(int index);
>  #else
>  static inline void acpi_processor_power_init_bm_check(struct
>  						      acpi_processor_flags
> @@ -261,13 +261,12 @@ static inline void acpi_processor_power_init_bm_check(struct
>  }
>  static inline int acpi_processor_ffh_cstate_probe(unsigned int cpu,
>  						  struct acpi_processor_cx *cx,
> -						  struct acpi_power_register
> -						  *reg)
> +						  int index,
> +						  struct acpi_power_register *reg)
>  {
>  	return -1;
>  }
> -static inline void acpi_processor_ffh_cstate_enter(struct acpi_processor_cx
> -						   *cstate)
> +static inline void acpi_processor_ffh_cstate_enter(int index)
>  {
>  	return;
>  }
> 

--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" in
the body of a message to majordomo@vger.kernel.org
More majordomo info at  http://vger.kernel.org/majordomo-info.html
Rafael Wysocki July 17, 2012, 8:34 p.m. UTC | #5
On Tuesday, July 17, 2012, Rafael J. Wysocki wrote:
> On Thursday, July 12, 2012, Daniel Lezcano wrote:
> > Remove the index field. It could be given without adding extra
> > information in the cx structure.
> > 
> > Signed-off-by: Daniel Lezcano <daniel.lezcano@linaro.org>
> 
> Applied to the 'pm-cpuidle' branch of the linux-pm.git tree.

This patch wasn't applied in fact, for reasons given elsewhere.

Sorry for sending a misleading message.

Rafael
--
To unsubscribe from this list: send the line "unsubscribe linux-acpi" 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/arch/x86/kernel/acpi/cstate.c b/arch/x86/kernel/acpi/cstate.c
index d2b7f27..faa7f50 100644
--- a/arch/x86/kernel/acpi/cstate.c
+++ b/arch/x86/kernel/acpi/cstate.c
@@ -112,8 +112,8 @@  out:
 	return retval;
 }
 
-int acpi_processor_ffh_cstate_probe(unsigned int cpu,
-		struct acpi_processor_cx *cx, struct acpi_power_register *reg)
+int acpi_processor_ffh_cstate_probe(unsigned int cpu, struct acpi_processor_cx *cx,
+				    int index, struct acpi_power_register *reg)
 {
 	struct cstate_entry *percpu_entry;
 	struct cpuinfo_x86 *c = &cpu_data(cpu);
@@ -126,16 +126,16 @@  int acpi_processor_ffh_cstate_probe(unsigned int cpu,
 		return -1;
 
 	percpu_entry = per_cpu_ptr(cpu_cstate_entry, cpu);
-	percpu_entry->states[cx->index].eax = 0;
-	percpu_entry->states[cx->index].ecx = 0;
+	percpu_entry->states[index].eax = 0;
+	percpu_entry->states[index].ecx = 0;
 
 	/* Make sure we are running on right CPU */
 
 	retval = work_on_cpu(cpu, acpi_processor_ffh_cstate_probe_cpu, cx);
 	if (retval == 0) {
 		/* Use the hint in CST */
-		percpu_entry->states[cx->index].eax = cx->address;
-		percpu_entry->states[cx->index].ecx = MWAIT_ECX_INTERRUPT_BREAK;
+		percpu_entry->states[index].eax = cx->address;
+		percpu_entry->states[index].ecx = MWAIT_ECX_INTERRUPT_BREAK;
 	}
 
 	/*
@@ -173,14 +173,14 @@  void mwait_idle_with_hints(unsigned long ax, unsigned long cx)
 	}
 }
 
-void acpi_processor_ffh_cstate_enter(struct acpi_processor_cx *cx)
+void acpi_processor_ffh_cstate_enter(int index)
 {
 	unsigned int cpu = smp_processor_id();
 	struct cstate_entry *percpu_entry;
 
 	percpu_entry = per_cpu_ptr(cpu_cstate_entry, cpu);
-	mwait_idle_with_hints(percpu_entry->states[cx->index].eax,
-	                      percpu_entry->states[cx->index].ecx);
+	mwait_idle_with_hints(percpu_entry->states[index].eax,
+	                      percpu_entry->states[index].ecx);
 }
 EXPORT_SYMBOL_GPL(acpi_processor_ffh_cstate_enter);
 
diff --git a/drivers/acpi/processor_idle.c b/drivers/acpi/processor_idle.c
index da92c65..9808e60 100644
--- a/drivers/acpi/processor_idle.c
+++ b/drivers/acpi/processor_idle.c
@@ -433,12 +433,11 @@  static int acpi_processor_get_power_info_cst(struct acpi_processor *pr)
 			current_count++;
 
 		cx.address = reg->address;
-		cx.index = current_count + 1;
 
 		cx.entry_method = ACPI_CSTATE_SYSTEMIO;
 		if (reg->space_id == ACPI_ADR_SPACE_FIXED_HARDWARE) {
-			if (acpi_processor_ffh_cstate_probe
-					(pr->id, &cx, reg) == 0) {
+			if (acpi_processor_ffh_cstate_probe(
+				    pr->id, &cx, current_count + 1, reg) == 0) {
 				cx.entry_method = ACPI_CSTATE_FFH;
 			} else if (cx.type == ACPI_STATE_C1) {
 				/*
@@ -707,13 +706,13 @@  static int acpi_idle_bm_check(void)
  *
  * Caller disables interrupt before call and enables interrupt after return.
  */
-static inline void acpi_idle_do_entry(struct acpi_processor_cx *cx)
+static inline void acpi_idle_do_entry(struct acpi_processor_cx *cx, int index)
 {
 	/* Don't trace irqs off for idle */
 	stop_critical_timings();
 	if (cx->entry_method == ACPI_CSTATE_FFH) {
 		/* Call into architectural FFH based C-state */
-		acpi_processor_ffh_cstate_enter(cx);
+		acpi_processor_ffh_cstate_enter(index);
 	} else if (cx->entry_method == ACPI_CSTATE_HALT) {
 		acpi_safe_halt();
 	} else {
@@ -754,7 +753,7 @@  static int acpi_idle_enter_c1(struct cpuidle_device *dev,
 
 	lapic_timer_state_broadcast(pr, cx, 1);
 	kt1 = ktime_get_real();
-	acpi_idle_do_entry(cx);
+	acpi_idle_do_entry(cx, index);
 	kt2 = ktime_get_real();
 	idle_time =  ktime_to_us(ktime_sub(kt2, kt1));
 
@@ -848,7 +847,7 @@  static int acpi_idle_enter_simple(struct cpuidle_device *dev,
 	kt1 = ktime_get_real();
 	/* Tell the scheduler that we are going deep-idle: */
 	sched_clock_idle_sleep_event();
-	acpi_idle_do_entry(cx);
+	acpi_idle_do_entry(cx, index);
 	kt2 = ktime_get_real();
 	idle_time_ns = ktime_to_ns(ktime_sub(kt2, kt1));
 	idle_time = idle_time_ns;
@@ -960,7 +959,7 @@  static int acpi_idle_enter_bm(struct cpuidle_device *dev,
 		ACPI_FLUSH_CPU_CACHE();
 	}
 
-	acpi_idle_do_entry(cx);
+	acpi_idle_do_entry(cx, index);
 
 	/* Re-enable bus master arbitration */
 	if (pr->flags.bm_check && pr->flags.bm_control) {
diff --git a/include/acpi/processor.h b/include/acpi/processor.h
index a70cbcc..d09c94f 100644
--- a/include/acpi/processor.h
+++ b/include/acpi/processor.h
@@ -57,7 +57,6 @@  struct acpi_processor_cx {
 	u8 type;
 	u32 address;
 	u8 entry_method;
-	u8 index;
 	u32 latency;
 	u32 power;
 	u32 usage;
@@ -249,8 +248,9 @@  void acpi_processor_power_init_bm_check(struct acpi_processor_flags *flags,
 					unsigned int cpu);
 int acpi_processor_ffh_cstate_probe(unsigned int cpu,
 				    struct acpi_processor_cx *cx,
+				    int index,
 				    struct acpi_power_register *reg);
-void acpi_processor_ffh_cstate_enter(struct acpi_processor_cx *cstate);
+void acpi_processor_ffh_cstate_enter(int index);
 #else
 static inline void acpi_processor_power_init_bm_check(struct
 						      acpi_processor_flags
@@ -261,13 +261,12 @@  static inline void acpi_processor_power_init_bm_check(struct
 }
 static inline int acpi_processor_ffh_cstate_probe(unsigned int cpu,
 						  struct acpi_processor_cx *cx,
-						  struct acpi_power_register
-						  *reg)
+						  int index,
+						  struct acpi_power_register *reg)
 {
 	return -1;
 }
-static inline void acpi_processor_ffh_cstate_enter(struct acpi_processor_cx
-						   *cstate)
+static inline void acpi_processor_ffh_cstate_enter(int index)
 {
 	return;
 }