提交 87ad57ba 编写于 作者: S Shaohua Li 提交者: Len Brown

cpuidle: makes AMD C1E work in acpi_idle

When AMD C1E is enabled, local APIC timer will stop even in C1.
This patch uses broadcast IPI to replace local APIC timer in C1.

http://bugzilla.kernel.org/show_bug.cgi?id=13233

[ impact: avoid boot hang in AMD CPU with C1E enabled ]
Tested-by: NDmitry Lyzhyn <thisistempbox@yahoo.com>
Signed-off-by: NShaohua Li <shaohua.li@intel.com>
Signed-off-by: NLen Brown <len.brown@intel.com>
上级 cd86a536
...@@ -148,6 +148,9 @@ static void acpi_timer_check_state(int state, struct acpi_processor *pr, ...@@ -148,6 +148,9 @@ static void acpi_timer_check_state(int state, struct acpi_processor *pr,
if (cpu_has(&cpu_data(pr->id), X86_FEATURE_ARAT)) if (cpu_has(&cpu_data(pr->id), X86_FEATURE_ARAT))
return; return;
if (boot_cpu_has(X86_FEATURE_AMDC1E))
type = ACPI_STATE_C1;
/* /*
* Check, if one of the previous states already marked the lapic * Check, if one of the previous states already marked the lapic
* unstable * unstable
...@@ -611,6 +614,7 @@ static int acpi_processor_power_verify(struct acpi_processor *pr) ...@@ -611,6 +614,7 @@ static int acpi_processor_power_verify(struct acpi_processor *pr)
switch (cx->type) { switch (cx->type) {
case ACPI_STATE_C1: case ACPI_STATE_C1:
cx->valid = 1; cx->valid = 1;
acpi_timer_check_state(i, pr, cx);
break; break;
case ACPI_STATE_C2: case ACPI_STATE_C2:
...@@ -835,6 +839,7 @@ static int acpi_idle_enter_c1(struct cpuidle_device *dev, ...@@ -835,6 +839,7 @@ static int acpi_idle_enter_c1(struct cpuidle_device *dev,
return 0; return 0;
} }
acpi_state_timer_broadcast(pr, cx, 1);
kt1 = ktime_get_real(); kt1 = ktime_get_real();
acpi_idle_do_entry(cx); acpi_idle_do_entry(cx);
kt2 = ktime_get_real(); kt2 = ktime_get_real();
...@@ -842,6 +847,7 @@ static int acpi_idle_enter_c1(struct cpuidle_device *dev, ...@@ -842,6 +847,7 @@ static int acpi_idle_enter_c1(struct cpuidle_device *dev,
local_irq_enable(); local_irq_enable();
cx->usage++; cx->usage++;
acpi_state_timer_broadcast(pr, cx, 0);
return idle_time; return idle_time;
} }
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册