Skip to content

Commit

Permalink
Revert "ACPI: Only use IPI on known broken machines (AMD, Dothan/Bani…
Browse files Browse the repository at this point in the history
…asPentium M)"

This reverts commit 25496ca, 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: Ingo Molnar <mingo@elte.hu>
Acked-by: Thomas Gleixner <tglx@linutronix.de>
Cc: Thomas Renninger <trenn@suse.de>
Cc: Len Brown <len.brown@intel.com>
Signed-off-by: Linus Torvalds <torvalds@linux-foundation.org>
  • Loading branch information
Linus Torvalds committed Mar 23, 2007
1 parent 1299809 commit 296d93c
Showing 1 changed file with 9 additions and 29 deletions.
38 changes: 9 additions & 29 deletions drivers/acpi/processor_idle.c
Expand Up @@ -89,12 +89,6 @@ module_param(nocst, uint, 0000);
static unsigned int bm_history __read_mostly =
(HZ >= 800 ? 0xFFFFFFFF : ((1U << (HZ / 25)) - 1));
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
-------------------------------------------------------------------------- */
Expand Down Expand Up @@ -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.
* This seems to be a common problem on AMD boxen and Intel Dothan/Banias
* Pentium M machines.
* This seems to be a common problem on AMD boxen, but other vendors
* 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,
struct acpi_processor_cx *cx)
Expand All @@ -281,17 +276,8 @@ static void acpi_timer_check_state(int state, struct acpi_processor *pr,
if (pwr->timer_broadcast_on_state < state)
return;

if (cx->type >= ACPI_STATE_C2) {
if (boot_cpu_data.x86_vendor == X86_VENDOR_AMD)
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;
}
}
if (cx->type >= ACPI_STATE_C2)
pr->power.timer_broadcast_on_state = state;
}

static void acpi_propagate_timer_broadcast(struct acpi_processor *pr)
Expand All @@ -306,16 +292,10 @@ static void acpi_propagate_timer_broadcast(struct acpi_processor *pr)
#else
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);
else if (use_ipi == 1)
else
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
}

Expand Down Expand Up @@ -1033,13 +1013,13 @@ static int acpi_processor_power_verify(struct acpi_processor *pr)

case ACPI_STATE_C2:
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);
break;

case ACPI_STATE_C3:
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);
break;
}
Expand Down

0 comments on commit 296d93c

Please sign in to comment.