Commit a3e945a6 authored by Len Brown's avatar Len Brown

merge

parents f710ef2d 0ca608f6
...@@ -1125,3 +1125,11 @@ acpi_wake_gpes_always_on_setup(char *str) ...@@ -1125,3 +1125,11 @@ acpi_wake_gpes_always_on_setup(char *str)
__setup("acpi_wake_gpes_always_on", acpi_wake_gpes_always_on_setup); __setup("acpi_wake_gpes_always_on", acpi_wake_gpes_always_on_setup);
/*
* acpi_cstate_limit is defined in the base kernel so modules can
* change it w/o depending on the state of the processor module.
*/
unsigned int acpi_cstate_limit = ACPI_C_STATES_MAX;
EXPORT_SYMBOL(acpi_cstate_limit);
...@@ -475,8 +475,9 @@ acpi_processor_idle (void) ...@@ -475,8 +475,9 @@ acpi_processor_idle (void)
* Track the number of longs (time asleep is greater than threshold) * Track the number of longs (time asleep is greater than threshold)
* and promote when the count threshold is reached. Note that bus * and promote when the count threshold is reached. Note that bus
* mastering activity may prevent promotions. * mastering activity may prevent promotions.
* Do not promote above acpi_cstate_limit.
*/ */
if (cx->promotion.state) { if (cx->promotion.state && (cx->promotion.state <= acpi_cstate_limit)) {
if (sleep_ticks > cx->promotion.threshold.ticks) { if (sleep_ticks > cx->promotion.threshold.ticks) {
cx->promotion.count++; cx->promotion.count++;
cx->demotion.count = 0; cx->demotion.count = 0;
...@@ -513,6 +514,13 @@ acpi_processor_idle (void) ...@@ -513,6 +514,13 @@ acpi_processor_idle (void)
} }
end: end:
/*
* Demote if current state exceeds acpi_cstate_limit
*/
if (pr->power.state > acpi_cstate_limit) {
next_state = acpi_cstate_limit;
}
/* /*
* New Cx State? * New Cx State?
* ------------- * -------------
...@@ -2543,5 +2551,6 @@ acpi_processor_exit (void) ...@@ -2543,5 +2551,6 @@ acpi_processor_exit (void)
module_init(acpi_processor_init); module_init(acpi_processor_init);
module_exit(acpi_processor_exit); module_exit(acpi_processor_exit);
module_param_named(acpi_cstate_limit, acpi_cstate_limit, uint, 0);
EXPORT_SYMBOL(acpi_processor_set_thermal_limit); EXPORT_SYMBOL(acpi_processor_set_thermal_limit);
...@@ -473,4 +473,30 @@ static inline int acpi_blacklisted(void) ...@@ -473,4 +473,30 @@ static inline int acpi_blacklisted(void)
#endif /*!CONFIG_ACPI_INTERPRETER*/ #endif /*!CONFIG_ACPI_INTERPRETER*/
#define ACPI_CSTATE_LIMIT_DEFINED /* for driver builds */
#ifdef CONFIG_ACPI
/*
* Set highest legal C-state
* 0: C0 okay, but not C1
* 1: C1 okay, but not C2
* 2: C2 okay, but not C3 etc.
*/
extern unsigned int acpi_cstate_limit;
static inline unsigned int acpi_get_cstate_limit(void)
{
return acpi_cstate_limit;
}
static inline void acpi_set_cstate_limit(unsigned int new_limit)
{
acpi_cstate_limit = new_limit;
return;
}
#else
static inline unsigned int acpi_get_cstate_limit(void) { return 0; }
static inline void acpi_set_cstate_limit(unsigned int new_limit) { return; }
#endif
#endif /*_LINUX_ACPI_H*/ #endif /*_LINUX_ACPI_H*/
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment