diff mbox

[1/3] ACPI / idle: Move idle_boot_override out of the arch directory

Message ID 1389924207-7360-2-git-send-email-hanjun.guo@linaro.org (mailing list archive)
State New, archived
Headers show

Commit Message

Hanjun Guo Jan. 17, 2014, 2:03 a.m. UTC
Move idle_boot_override out of the arch directory to be a single enum
including both platforms values, this will make it rather easier to
avoid ifdefs around which definitions are for which processor in
generally used ACPI code.

IDLE_FORCE_MWAIT for IA64 is not used anywhere, so romove it.

No functional change in this patch.

Suggested-by: Alan <gnomes@lxorguk.ukuu.org.uk>
Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
---
 arch/ia64/include/asm/processor.h    | 3 ---
 arch/powerpc/include/asm/processor.h | 1 -
 arch/x86/include/asm/processor.h     | 3 ---
 arch/x86/kernel/process.c            | 1 +
 include/linux/cpu.h                  | 8 ++++++++
 5 files changed, 9 insertions(+), 7 deletions(-)

Comments

Sudeep Holla Jan. 17, 2014, 12:06 p.m. UTC | #1
On 17/01/14 02:03, Hanjun Guo wrote:
> Move idle_boot_override out of the arch directory to be a single enum
> including both platforms values, this will make it rather easier to
> avoid ifdefs around which definitions are for which processor in
> generally used ACPI code.
> 
> IDLE_FORCE_MWAIT for IA64 is not used anywhere, so romove it.
> 
> No functional change in this patch.
> 
> Suggested-by: Alan <gnomes@lxorguk.ukuu.org.uk>
> Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
> ---
>  arch/ia64/include/asm/processor.h    | 3 ---
>  arch/powerpc/include/asm/processor.h | 1 -
>  arch/x86/include/asm/processor.h     | 3 ---
>  arch/x86/kernel/process.c            | 1 +
>  include/linux/cpu.h                  | 8 ++++++++
>  5 files changed, 9 insertions(+), 7 deletions(-)
> 
> diff --git a/arch/ia64/include/asm/processor.h b/arch/ia64/include/asm/processor.h
> index 5a84b3a..ccd63a0 100644
> --- a/arch/ia64/include/asm/processor.h
> +++ b/arch/ia64/include/asm/processor.h
> @@ -698,9 +698,6 @@ prefetchw (const void *x)
>  
>  extern unsigned long boot_option_idle_override;
>  
> -enum idle_boot_override {IDLE_NO_OVERRIDE=0, IDLE_HALT, IDLE_FORCE_MWAIT,
> -			 IDLE_NOMWAIT, IDLE_POLL};
> -
>  void default_idle(void);
>  
>  #define ia64_platform_is(x) (strcmp(x, ia64_platform_name) == 0)
> diff --git a/arch/powerpc/include/asm/processor.h b/arch/powerpc/include/asm/processor.h
> index fc14a38..06689c0 100644
> --- a/arch/powerpc/include/asm/processor.h
> +++ b/arch/powerpc/include/asm/processor.h
> @@ -440,7 +440,6 @@ static inline unsigned long get_clean_sp(unsigned long sp, int is_32)
>  #endif
>  
>  extern unsigned long cpuidle_disable;
> -enum idle_boot_override {IDLE_NO_OVERRIDE = 0, IDLE_POWERSAVE_OFF};
>  

I don't think it is used in the context of ACPI. Though it's same variable name,
it looks like it just used as boot to override the cpuidle option.
Does it still make any sense to combine this ?

>  extern int powersave_nap;	/* set if nap mode can be used in idle loop */
>  extern void power7_nap(void);
> diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
> index 7b034a4..4bee51a 100644
> --- a/arch/x86/include/asm/processor.h
> +++ b/arch/x86/include/asm/processor.h
> @@ -729,9 +729,6 @@ extern void init_amd_e400_c1e_mask(void);
>  extern unsigned long		boot_option_idle_override;
>  extern bool			amd_e400_c1e_detected;
>  
> -enum idle_boot_override {IDLE_NO_OVERRIDE=0, IDLE_HALT, IDLE_NOMWAIT,
> -			 IDLE_POLL};
> -
>  extern void enable_sep_cpu(void);
>  extern int sysenter_setup(void);
>  
> diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
> index 3fb8d95..62764ff 100644
> --- a/arch/x86/kernel/process.c
> +++ b/arch/x86/kernel/process.c
> @@ -17,6 +17,7 @@
>  #include <linux/stackprotector.h>
>  #include <linux/tick.h>
>  #include <linux/cpuidle.h>
> +#include <linux/cpu.h>
>  #include <trace/events/power.h>
>  #include <linux/hw_breakpoint.h>
>  #include <asm/cpu.h>
> diff --git a/include/linux/cpu.h b/include/linux/cpu.h
> index 03e235ad..e324561 100644
> --- a/include/linux/cpu.h
> +++ b/include/linux/cpu.h
> @@ -220,6 +220,14 @@ void cpu_idle(void);
>  
>  void cpu_idle_poll_ctrl(bool enable);
>  
> +enum idle_boot_override {
> +	IDLE_NO_OVERRIDE = 0,
> +	IDLE_HALT,
> +	IDLE_NOMWAIT,
> +	IDLE_POLL,
> +	IDLE_POWERSAVE_OFF
> +};
> +

I do understand the idea behind this change, but IMO HALT and MWAIT are x86
specific and may not make sense for other architectures.

It will also require every architecture using ACPI to export
boot_option_idle_override which may not be really required.

Further the only users of boot_option_idle_override(outside x86) are:

1. drivers/acpi/processor_core.c
   Your second patch is moving this to x86 specific code anyway

2. drivers/acpi/processor_idle.c
   Currently idle driver is bit x86 specific and needs modifications to get it
   working on ARM

Regards,
Sudeep
Hanjun Guo Jan. 18, 2014, 3:45 a.m. UTC | #2
On 2014-1-17 20:06, Sudeep Holla wrote:
> On 17/01/14 02:03, Hanjun Guo wrote:
>> Move idle_boot_override out of the arch directory to be a single enum
>> including both platforms values, this will make it rather easier to
>> avoid ifdefs around which definitions are for which processor in
>> generally used ACPI code.
>>
>> IDLE_FORCE_MWAIT for IA64 is not used anywhere, so romove it.
>>
>> No functional change in this patch.
>>
>> Suggested-by: Alan <gnomes@lxorguk.ukuu.org.uk>
>> Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
>> ---
>>  arch/ia64/include/asm/processor.h    | 3 ---
>>  arch/powerpc/include/asm/processor.h | 1 -
>>  arch/x86/include/asm/processor.h     | 3 ---
>>  arch/x86/kernel/process.c            | 1 +
>>  include/linux/cpu.h                  | 8 ++++++++
>>  5 files changed, 9 insertions(+), 7 deletions(-)
>>
>> diff --git a/arch/ia64/include/asm/processor.h b/arch/ia64/include/asm/processor.h
>> index 5a84b3a..ccd63a0 100644
>> --- a/arch/ia64/include/asm/processor.h
>> +++ b/arch/ia64/include/asm/processor.h
>> @@ -698,9 +698,6 @@ prefetchw (const void *x)
>>  
>>  extern unsigned long boot_option_idle_override;
>>  
>> -enum idle_boot_override {IDLE_NO_OVERRIDE=0, IDLE_HALT, IDLE_FORCE_MWAIT,
>> -			 IDLE_NOMWAIT, IDLE_POLL};
>> -
>>  void default_idle(void);
>>  
>>  #define ia64_platform_is(x) (strcmp(x, ia64_platform_name) == 0)
>> diff --git a/arch/powerpc/include/asm/processor.h b/arch/powerpc/include/asm/processor.h
>> index fc14a38..06689c0 100644
>> --- a/arch/powerpc/include/asm/processor.h
>> +++ b/arch/powerpc/include/asm/processor.h
>> @@ -440,7 +440,6 @@ static inline unsigned long get_clean_sp(unsigned long sp, int is_32)
>>  #endif
>>  
>>  extern unsigned long cpuidle_disable;
>> -enum idle_boot_override {IDLE_NO_OVERRIDE = 0, IDLE_POWERSAVE_OFF};
>>  
> 
> I don't think it is used in the context of ACPI. Though it's same variable name,
> it looks like it just used as boot to override the cpuidle option.
> Does it still make any sense to combine this ?

Yes, it is not related to ACPI on powerpc, I will investigate it will cause
compile warning or not if I don't combine this.

> 
>>  extern int powersave_nap;	/* set if nap mode can be used in idle loop */
>>  extern void power7_nap(void);
>> diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
>> index 7b034a4..4bee51a 100644
>> --- a/arch/x86/include/asm/processor.h
>> +++ b/arch/x86/include/asm/processor.h
>> @@ -729,9 +729,6 @@ extern void init_amd_e400_c1e_mask(void);
>>  extern unsigned long		boot_option_idle_override;
>>  extern bool			amd_e400_c1e_detected;
>>  
>> -enum idle_boot_override {IDLE_NO_OVERRIDE=0, IDLE_HALT, IDLE_NOMWAIT,
>> -			 IDLE_POLL};
>> -
>>  extern void enable_sep_cpu(void);
>>  extern int sysenter_setup(void);
>>  
>> diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
>> index 3fb8d95..62764ff 100644
>> --- a/arch/x86/kernel/process.c
>> +++ b/arch/x86/kernel/process.c
>> @@ -17,6 +17,7 @@
>>  #include <linux/stackprotector.h>
>>  #include <linux/tick.h>
>>  #include <linux/cpuidle.h>
>> +#include <linux/cpu.h>
>>  #include <trace/events/power.h>
>>  #include <linux/hw_breakpoint.h>
>>  #include <asm/cpu.h>
>> diff --git a/include/linux/cpu.h b/include/linux/cpu.h
>> index 03e235ad..e324561 100644
>> --- a/include/linux/cpu.h
>> +++ b/include/linux/cpu.h
>> @@ -220,6 +220,14 @@ void cpu_idle(void);
>>  
>>  void cpu_idle_poll_ctrl(bool enable);
>>  
>> +enum idle_boot_override {
>> +	IDLE_NO_OVERRIDE = 0,
>> +	IDLE_HALT,
>> +	IDLE_NOMWAIT,
>> +	IDLE_POLL,
>> +	IDLE_POWERSAVE_OFF
>> +};
>> +
> 
> I do understand the idea behind this change, but IMO HALT and MWAIT are x86
> specific and may not make sense for other architectures.

yes, this is the strange part, the value is arch-dependent.

> 
> It will also require every architecture using ACPI to export
> boot_option_idle_override which may not be really required.

so, how about forget this patch and move boot_option_idle_override
related code into arch directory such as arch/x86/acpi/boot.c for
x86?

> 
> Further the only users of boot_option_idle_override(outside x86) are:
> 
> 1. drivers/acpi/processor_core.c
>    Your second patch is moving this to x86 specific code anyway
> 
> 2. drivers/acpi/processor_idle.c
>    Currently idle driver is bit x86 specific and needs modifications to get it
>    working on ARM

Yes, That's why I did not enable acpi idle driver on ARM64 for now.

Thanks
Hanjun
Hanjun Guo Jan. 18, 2014, 3:52 a.m. UTC | #3
On 2014-1-18 11:45, Hanjun Guo wrote:
> On 2014-1-17 20:06, Sudeep Holla wrote:
>> On 17/01/14 02:03, Hanjun Guo wrote:
>>> Move idle_boot_override out of the arch directory to be a single enum
>>> including both platforms values, this will make it rather easier to
>>> avoid ifdefs around which definitions are for which processor in
>>> generally used ACPI code.
>>>
>>> IDLE_FORCE_MWAIT for IA64 is not used anywhere, so romove it.
>>>
>>> No functional change in this patch.
>>>
>>> Suggested-by: Alan <gnomes@lxorguk.ukuu.org.uk>
>>> Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
>>> ---
[...]
>>> diff --git a/include/linux/cpu.h b/include/linux/cpu.h
>>> index 03e235ad..e324561 100644
>>> --- a/include/linux/cpu.h
>>> +++ b/include/linux/cpu.h
>>> @@ -220,6 +220,14 @@ void cpu_idle(void);
>>>  
>>>  void cpu_idle_poll_ctrl(bool enable);
>>>  
>>> +enum idle_boot_override {
>>> +	IDLE_NO_OVERRIDE = 0,
>>> +	IDLE_HALT,
>>> +	IDLE_NOMWAIT,
>>> +	IDLE_POLL,
>>> +	IDLE_POWERSAVE_OFF
>>> +};
>>> +
>>
>> I do understand the idea behind this change, but IMO HALT and MWAIT are x86
>> specific and may not make sense for other architectures.
> 
> yes, this is the strange part, the value is arch-dependent.
> 
>>
>> It will also require every architecture using ACPI to export
>> boot_option_idle_override which may not be really required.
> 
> so, how about forget this patch and move boot_option_idle_override
> related code into arch directory such as arch/x86/acpi/boot.c for
> x86?

The general idea is that we can move all the arch-dependent codes
in ACPI driver to arch directory, then make codes in drivers/acpi/
arch independent.

Thanks
Hanjun
Rafael J. Wysocki Jan. 18, 2014, 1:47 p.m. UTC | #4
On Saturday, January 18, 2014 11:52:18 AM Hanjun Guo wrote:
> On 2014-1-18 11:45, Hanjun Guo wrote:
> > On 2014-1-17 20:06, Sudeep Holla wrote:
> >> On 17/01/14 02:03, Hanjun Guo wrote:
> >>> Move idle_boot_override out of the arch directory to be a single enum
> >>> including both platforms values, this will make it rather easier to
> >>> avoid ifdefs around which definitions are for which processor in
> >>> generally used ACPI code.
> >>>
> >>> IDLE_FORCE_MWAIT for IA64 is not used anywhere, so romove it.
> >>>
> >>> No functional change in this patch.
> >>>
> >>> Suggested-by: Alan <gnomes@lxorguk.ukuu.org.uk>
> >>> Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
> >>> ---
> [...]
> >>> diff --git a/include/linux/cpu.h b/include/linux/cpu.h
> >>> index 03e235ad..e324561 100644
> >>> --- a/include/linux/cpu.h
> >>> +++ b/include/linux/cpu.h
> >>> @@ -220,6 +220,14 @@ void cpu_idle(void);
> >>>  
> >>>  void cpu_idle_poll_ctrl(bool enable);
> >>>  
> >>> +enum idle_boot_override {
> >>> +	IDLE_NO_OVERRIDE = 0,
> >>> +	IDLE_HALT,
> >>> +	IDLE_NOMWAIT,
> >>> +	IDLE_POLL,
> >>> +	IDLE_POWERSAVE_OFF
> >>> +};
> >>> +
> >>
> >> I do understand the idea behind this change, but IMO HALT and MWAIT are x86
> >> specific and may not make sense for other architectures.
> > 
> > yes, this is the strange part, the value is arch-dependent.
> > 
> >>
> >> It will also require every architecture using ACPI to export
> >> boot_option_idle_override which may not be really required.
> > 
> > so, how about forget this patch and move boot_option_idle_override
> > related code into arch directory such as arch/x86/acpi/boot.c for
> > x86?
> 
> The general idea is that we can move all the arch-dependent codes
> in ACPI driver to arch directory, then make codes in drivers/acpi/
> arch independent.

Well, MWAIT is arch-dependent, so I'm not sure how IDLE_NOMWAIT fits into
include/linux/cpu.h?
Hanjun Guo Jan. 20, 2014, 2:08 p.m. UTC | #5
On 2014?01?18? 21:47, Rafael J. Wysocki wrote:
> On Saturday, January 18, 2014 11:52:18 AM Hanjun Guo wrote:
>> On 2014-1-18 11:45, Hanjun Guo wrote:
>>> On 2014-1-17 20:06, Sudeep Holla wrote:
>>>> On 17/01/14 02:03, Hanjun Guo wrote:
>>>>> Move idle_boot_override out of the arch directory to be a single enum
>>>>> including both platforms values, this will make it rather easier to
>>>>> avoid ifdefs around which definitions are for which processor in
>>>>> generally used ACPI code.
>>>>>
>>>>> IDLE_FORCE_MWAIT for IA64 is not used anywhere, so romove it.
>>>>>
>>>>> No functional change in this patch.
>>>>>
>>>>> Suggested-by: Alan <gnomes@lxorguk.ukuu.org.uk>
>>>>> Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
>>>>> ---
>> [...]
>>>>> diff --git a/include/linux/cpu.h b/include/linux/cpu.h
>>>>> index 03e235ad..e324561 100644
>>>>> --- a/include/linux/cpu.h
>>>>> +++ b/include/linux/cpu.h
>>>>> @@ -220,6 +220,14 @@ void cpu_idle(void);
>>>>>   
>>>>>   void cpu_idle_poll_ctrl(bool enable);
>>>>>   
>>>>> +enum idle_boot_override {
>>>>> +	IDLE_NO_OVERRIDE = 0,
>>>>> +	IDLE_HALT,
>>>>> +	IDLE_NOMWAIT,
>>>>> +	IDLE_POLL,
>>>>> +	IDLE_POWERSAVE_OFF
>>>>> +};
>>>>> +
>>>> I do understand the idea behind this change, but IMO HALT and MWAIT are x86
>>>> specific and may not make sense for other architectures.
>>> yes, this is the strange part, the value is arch-dependent.
>>>
>>>> It will also require every architecture using ACPI to export
>>>> boot_option_idle_override which may not be really required.
>>> so, how about forget this patch and move boot_option_idle_override
>>> related code into arch directory such as arch/x86/acpi/boot.c for
>>> x86?
>> The general idea is that we can move all the arch-dependent codes
>> in ACPI driver to arch directory, then make codes in drivers/acpi/
>> arch independent.
> Well, MWAIT is arch-dependent, so I'm not sure how IDLE_NOMWAIT fits into
> include/linux/cpu.h?

So you will not happy with this patch and should find another solution?

Thanks
Hanjun
Rafael J. Wysocki Jan. 20, 2014, 11:34 p.m. UTC | #6
On Monday, January 20, 2014 10:08:41 PM Hanjun Guo wrote:
> On 2014?01?18? 21:47, Rafael J. Wysocki wrote:
> > On Saturday, January 18, 2014 11:52:18 AM Hanjun Guo wrote:
> >> On 2014-1-18 11:45, Hanjun Guo wrote:
> >>> On 2014-1-17 20:06, Sudeep Holla wrote:
> >>>> On 17/01/14 02:03, Hanjun Guo wrote:
> >>>>> Move idle_boot_override out of the arch directory to be a single enum
> >>>>> including both platforms values, this will make it rather easier to
> >>>>> avoid ifdefs around which definitions are for which processor in
> >>>>> generally used ACPI code.
> >>>>>
> >>>>> IDLE_FORCE_MWAIT for IA64 is not used anywhere, so romove it.
> >>>>>
> >>>>> No functional change in this patch.
> >>>>>
> >>>>> Suggested-by: Alan <gnomes@lxorguk.ukuu.org.uk>
> >>>>> Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
> >>>>> ---
> >> [...]
> >>>>> diff --git a/include/linux/cpu.h b/include/linux/cpu.h
> >>>>> index 03e235ad..e324561 100644
> >>>>> --- a/include/linux/cpu.h
> >>>>> +++ b/include/linux/cpu.h
> >>>>> @@ -220,6 +220,14 @@ void cpu_idle(void);
> >>>>>   
> >>>>>   void cpu_idle_poll_ctrl(bool enable);
> >>>>>   
> >>>>> +enum idle_boot_override {
> >>>>> +	IDLE_NO_OVERRIDE = 0,
> >>>>> +	IDLE_HALT,
> >>>>> +	IDLE_NOMWAIT,
> >>>>> +	IDLE_POLL,
> >>>>> +	IDLE_POWERSAVE_OFF
> >>>>> +};
> >>>>> +
> >>>> I do understand the idea behind this change, but IMO HALT and MWAIT are x86
> >>>> specific and may not make sense for other architectures.
> >>> yes, this is the strange part, the value is arch-dependent.
> >>>
> >>>> It will also require every architecture using ACPI to export
> >>>> boot_option_idle_override which may not be really required.
> >>> so, how about forget this patch and move boot_option_idle_override
> >>> related code into arch directory such as arch/x86/acpi/boot.c for
> >>> x86?
> >> The general idea is that we can move all the arch-dependent codes
> >> in ACPI driver to arch directory, then make codes in drivers/acpi/
> >> arch independent.
> > Well, MWAIT is arch-dependent, so I'm not sure how IDLE_NOMWAIT fits into
> > include/linux/cpu.h?
> 
> So you will not happy with this patch and should find another solution?

No, I'm not happy with it.

If you want to move that to an arch-agnostic header, the symbol names cannot
be arch-dependent any more.

Thanks!
Hanjun Guo Jan. 21, 2014, 3:38 a.m. UTC | #7
On 2014-1-21 7:34, Rafael J. Wysocki wrote:
> On Monday, January 20, 2014 10:08:41 PM Hanjun Guo wrote:
>> On 2014?01?18? 21:47, Rafael J. Wysocki wrote:
>>> On Saturday, January 18, 2014 11:52:18 AM Hanjun Guo wrote:
>>>> On 2014-1-18 11:45, Hanjun Guo wrote:
>>>>> On 2014-1-17 20:06, Sudeep Holla wrote:
>>>>>> On 17/01/14 02:03, Hanjun Guo wrote:
>>>>>>> Move idle_boot_override out of the arch directory to be a single enum
>>>>>>> including both platforms values, this will make it rather easier to
>>>>>>> avoid ifdefs around which definitions are for which processor in
>>>>>>> generally used ACPI code.
>>>>>>>
>>>>>>> IDLE_FORCE_MWAIT for IA64 is not used anywhere, so romove it.
>>>>>>>
>>>>>>> No functional change in this patch.
>>>>>>>
>>>>>>> Suggested-by: Alan <gnomes@lxorguk.ukuu.org.uk>
>>>>>>> Signed-off-by: Hanjun Guo <hanjun.guo@linaro.org>
>>>>>>> ---
>>>> [...]
>>>>>>> diff --git a/include/linux/cpu.h b/include/linux/cpu.h
>>>>>>> index 03e235ad..e324561 100644
>>>>>>> --- a/include/linux/cpu.h
>>>>>>> +++ b/include/linux/cpu.h
>>>>>>> @@ -220,6 +220,14 @@ void cpu_idle(void);
>>>>>>>   
>>>>>>>   void cpu_idle_poll_ctrl(bool enable);
>>>>>>>   
>>>>>>> +enum idle_boot_override {
>>>>>>> +	IDLE_NO_OVERRIDE = 0,
>>>>>>> +	IDLE_HALT,
>>>>>>> +	IDLE_NOMWAIT,
>>>>>>> +	IDLE_POLL,
>>>>>>> +	IDLE_POWERSAVE_OFF
>>>>>>> +};
>>>>>>> +
>>>>>> I do understand the idea behind this change, but IMO HALT and MWAIT are x86
>>>>>> specific and may not make sense for other architectures.
>>>>> yes, this is the strange part, the value is arch-dependent.
>>>>>
>>>>>> It will also require every architecture using ACPI to export
>>>>>> boot_option_idle_override which may not be really required.
>>>>> so, how about forget this patch and move boot_option_idle_override
>>>>> related code into arch directory such as arch/x86/acpi/boot.c for
>>>>> x86?
>>>> The general idea is that we can move all the arch-dependent codes
>>>> in ACPI driver to arch directory, then make codes in drivers/acpi/
>>>> arch independent.
>>> Well, MWAIT is arch-dependent, so I'm not sure how IDLE_NOMWAIT fits into
>>> include/linux/cpu.h?
>>
>> So you will not happy with this patch and should find another solution?
> 
> No, I'm not happy with it.
> 
> If you want to move that to an arch-agnostic header, the symbol names cannot
> be arch-dependent any more.

Ok, will find another solution for that, thanks for your comments :)

Hanjun
diff mbox

Patch

diff --git a/arch/ia64/include/asm/processor.h b/arch/ia64/include/asm/processor.h
index 5a84b3a..ccd63a0 100644
--- a/arch/ia64/include/asm/processor.h
+++ b/arch/ia64/include/asm/processor.h
@@ -698,9 +698,6 @@  prefetchw (const void *x)
 
 extern unsigned long boot_option_idle_override;
 
-enum idle_boot_override {IDLE_NO_OVERRIDE=0, IDLE_HALT, IDLE_FORCE_MWAIT,
-			 IDLE_NOMWAIT, IDLE_POLL};
-
 void default_idle(void);
 
 #define ia64_platform_is(x) (strcmp(x, ia64_platform_name) == 0)
diff --git a/arch/powerpc/include/asm/processor.h b/arch/powerpc/include/asm/processor.h
index fc14a38..06689c0 100644
--- a/arch/powerpc/include/asm/processor.h
+++ b/arch/powerpc/include/asm/processor.h
@@ -440,7 +440,6 @@  static inline unsigned long get_clean_sp(unsigned long sp, int is_32)
 #endif
 
 extern unsigned long cpuidle_disable;
-enum idle_boot_override {IDLE_NO_OVERRIDE = 0, IDLE_POWERSAVE_OFF};
 
 extern int powersave_nap;	/* set if nap mode can be used in idle loop */
 extern void power7_nap(void);
diff --git a/arch/x86/include/asm/processor.h b/arch/x86/include/asm/processor.h
index 7b034a4..4bee51a 100644
--- a/arch/x86/include/asm/processor.h
+++ b/arch/x86/include/asm/processor.h
@@ -729,9 +729,6 @@  extern void init_amd_e400_c1e_mask(void);
 extern unsigned long		boot_option_idle_override;
 extern bool			amd_e400_c1e_detected;
 
-enum idle_boot_override {IDLE_NO_OVERRIDE=0, IDLE_HALT, IDLE_NOMWAIT,
-			 IDLE_POLL};
-
 extern void enable_sep_cpu(void);
 extern int sysenter_setup(void);
 
diff --git a/arch/x86/kernel/process.c b/arch/x86/kernel/process.c
index 3fb8d95..62764ff 100644
--- a/arch/x86/kernel/process.c
+++ b/arch/x86/kernel/process.c
@@ -17,6 +17,7 @@ 
 #include <linux/stackprotector.h>
 #include <linux/tick.h>
 #include <linux/cpuidle.h>
+#include <linux/cpu.h>
 #include <trace/events/power.h>
 #include <linux/hw_breakpoint.h>
 #include <asm/cpu.h>
diff --git a/include/linux/cpu.h b/include/linux/cpu.h
index 03e235ad..e324561 100644
--- a/include/linux/cpu.h
+++ b/include/linux/cpu.h
@@ -220,6 +220,14 @@  void cpu_idle(void);
 
 void cpu_idle_poll_ctrl(bool enable);
 
+enum idle_boot_override {
+	IDLE_NO_OVERRIDE = 0,
+	IDLE_HALT,
+	IDLE_NOMWAIT,
+	IDLE_POLL,
+	IDLE_POWERSAVE_OFF
+};
+
 void arch_cpu_idle(void);
 void arch_cpu_idle_prepare(void);
 void arch_cpu_idle_enter(void);