Commit 296d93cd authored by Linus Torvalds's avatar Linus Torvalds

Revert "ACPI: Only use IPI on known broken machines (AMD, Dothan/BaniasPentium M)"

This reverts commit 25496cae, which
broke bootup on at least Ingo's ThinkPad T60.  Need to figure out
exactly what is wrong before we can re-do the logic.
Requested-by: default avatarIngo Molnar <mingo@elte.hu>
Acked-by: default avatarThomas Gleixner <tglx@linutronix.de>
Cc: Thomas Renninger <trenn@suse.de>
Cc: Len Brown <len.brown@intel.com>
Signed-off-by: default avatarLinus Torvalds <torvalds@linux-foundation.org>
parent 12998096
...@@ -89,12 +89,6 @@ module_param(nocst, uint, 0000); ...@@ -89,12 +89,6 @@ module_param(nocst, uint, 0000);
static unsigned int bm_history __read_mostly = static unsigned int bm_history __read_mostly =
(HZ >= 800 ? 0xFFFFFFFF : ((1U << (HZ / 25)) - 1)); (HZ >= 800 ? 0xFFFFFFFF : ((1U << (HZ / 25)) - 1));
module_param(bm_history, uint, 0644); module_param(bm_history, uint, 0644);
static unsigned use_ipi = 2;
module_param(use_ipi, uint, 0644);
MODULE_PARM_DESC(use_ipi, "IPI (vs. LAPIC) irqs for not waking up from C2/C3"
" machines. 0=apic, 1=ipi, 2=auto\n");
/* -------------------------------------------------------------------------- /* --------------------------------------------------------------------------
Power Management Power Management
-------------------------------------------------------------------------- */ -------------------------------------------------------------------------- */
...@@ -266,8 +260,9 @@ static void acpi_cstate_enter(struct acpi_processor_cx *cstate) ...@@ -266,8 +260,9 @@ static void acpi_cstate_enter(struct acpi_processor_cx *cstate)
/* /*
* Some BIOS implementations switch to C3 in the published C2 state. * Some BIOS implementations switch to C3 in the published C2 state.
* This seems to be a common problem on AMD boxen and Intel Dothan/Banias * This seems to be a common problem on AMD boxen, but other vendors
* Pentium M machines. * are affected too. We pick the most conservative approach: we assume
* that the local APIC stops in both C2 and C3.
*/ */
static void acpi_timer_check_state(int state, struct acpi_processor *pr, static void acpi_timer_check_state(int state, struct acpi_processor *pr,
struct acpi_processor_cx *cx) struct acpi_processor_cx *cx)
...@@ -281,17 +276,8 @@ static void acpi_timer_check_state(int state, struct acpi_processor *pr, ...@@ -281,17 +276,8 @@ static void acpi_timer_check_state(int state, struct acpi_processor *pr,
if (pwr->timer_broadcast_on_state < state) if (pwr->timer_broadcast_on_state < state)
return; return;
if (cx->type >= ACPI_STATE_C2) { if (cx->type >= ACPI_STATE_C2)
if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD) pr->power.timer_broadcast_on_state = state;
pr->power.timer_broadcast_on_state = state;
else if ((boot_cpu_data.x86_vendor == X86_VENDOR_INTEL &&
boot_cpu_data.x86 == 6) &&
(boot_cpu_data.x86_model == 13 ||
boot_cpu_data.x86_model == 9))
{
pr->power.timer_broadcast_on_state = state;
}
}
} }
static void acpi_propagate_timer_broadcast(struct acpi_processor *pr) static void acpi_propagate_timer_broadcast(struct acpi_processor *pr)
...@@ -306,16 +292,10 @@ static void acpi_propagate_timer_broadcast(struct acpi_processor *pr) ...@@ -306,16 +292,10 @@ static void acpi_propagate_timer_broadcast(struct acpi_processor *pr)
#else #else
cpumask_t mask = cpumask_of_cpu(pr->id); cpumask_t mask = cpumask_of_cpu(pr->id);
if (use_ipi == 0) if (pr->power.timer_broadcast_on_state < INT_MAX)
on_each_cpu(switch_APIC_timer_to_ipi, &mask, 1, 1); on_each_cpu(switch_APIC_timer_to_ipi, &mask, 1, 1);
else if (use_ipi == 1) else
on_each_cpu(switch_ipi_to_APIC_timer, &mask, 1, 1); on_each_cpu(switch_ipi_to_APIC_timer, &mask, 1, 1);
else {
if (pr->power.timer_broadcast_on_state < INT_MAX)
on_each_cpu(switch_APIC_timer_to_ipi, &mask, 1, 1);
else
on_each_cpu(switch_ipi_to_APIC_timer, &mask, 1, 1);
}
#endif #endif
} }
...@@ -1033,13 +1013,13 @@ static int acpi_processor_power_verify(struct acpi_processor *pr) ...@@ -1033,13 +1013,13 @@ static int acpi_processor_power_verify(struct acpi_processor *pr)
case ACPI_STATE_C2: case ACPI_STATE_C2:
acpi_processor_power_verify_c2(cx); acpi_processor_power_verify_c2(cx);
if (cx->valid && use_ipi != 0 && use_ipi != 1) if (cx->valid)
acpi_timer_check_state(i, pr, cx); acpi_timer_check_state(i, pr, cx);
break; break;
case ACPI_STATE_C3: case ACPI_STATE_C3:
acpi_processor_power_verify_c3(pr, cx); acpi_processor_power_verify_c3(pr, cx);
if (cx->valid && use_ipi != 0 && use_ipi != 1) if (cx->valid)
acpi_timer_check_state(i, pr, cx); acpi_timer_check_state(i, pr, cx);
break; break;
} }
......
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