2.4.27-rc1 reintroduced the double-speed timer ACPI bug.
Both x86-64 and i386 are affected.
The patch below fixes it on my box. It's a backport of a
patch Hans-Frieder Vogt made for 2.6.7-bk2, extended to
also handle i386.
/Mikael Pettersson
diff -ruN linux-2.4.27-rc1/arch/i386/kernel/mpparse.c linux-2.4.27-rc1.mpparse-fix/arch/i386/kernel/mpparse.c
--- linux-2.4.27-rc1/arch/i386/kernel/mpparse.c 2004-06-21 00:39:30.000000000 +0200
+++ linux-2.4.27-rc1.mpparse-fix/arch/i386/kernel/mpparse.c 2004-06-21 00:50:01.000000000 +0200
@@ -1211,7 +1211,7 @@
for (idx = 0; idx < mp_irq_entries; idx++)
if (mp_irqs[idx].mpc_srcbus == MP_ISA_BUS &&
- (mp_irqs[idx].mpc_dstapic == ioapic) &&
+ (mp_irqs[idx].mpc_dstapic == mp_ioapics[ioapic].mpc_apicid) &&
(mp_irqs[idx].mpc_srcbusirq == i ||
mp_irqs[idx].mpc_dstirq == i))
break;
diff -ruN linux-2.4.27-rc1/arch/x86_64/kernel/mpparse.c linux-2.4.27-rc1.mpparse-fix/arch/x86_64/kernel/mpparse.c
--- linux-2.4.27-rc1/arch/x86_64/kernel/mpparse.c 2004-06-21 00:39:30.000000000 +0200
+++ linux-2.4.27-rc1.mpparse-fix/arch/x86_64/kernel/mpparse.c 2004-06-21 00:50:01.000000000 +0200
@@ -866,7 +866,7 @@
for (idx = 0; idx < mp_irq_entries; idx++)
if (mp_irqs[idx].mpc_srcbus == MP_ISA_BUS &&
- (mp_irqs[idx].mpc_dstapic == ioapic) &&
+ (mp_irqs[idx].mpc_dstapic == intsrc.mpc_dstapic) &&
(mp_irqs[idx].mpc_srcbusirq == i ||
mp_irqs[idx].mpc_dstirq == i))
break;
Thanks Mikael, Hans, you got it right.
-Len
On Sun, 2004-06-20 at 19:55, Mikael Pettersson wrote:
> 2.4.27-rc1 reintroduced the double-speed timer ACPI bug.
> Both x86-64 and i386 are affected.
>
> The patch below fixes it on my box. It's a backport of a
> patch Hans-Frieder Vogt made for 2.6.7-bk2, extended to
> also handle i386.
>
> /Mikael Pettersson
>
> diff -ruN linux-2.4.27-rc1/arch/i386/kernel/mpparse.c linux-2.4.27-rc1.mpparse-fix/arch/i386/kernel/mpparse.c
> --- linux-2.4.27-rc1/arch/i386/kernel/mpparse.c 2004-06-21 00:39:30.000000000 +0200
> +++ linux-2.4.27-rc1.mpparse-fix/arch/i386/kernel/mpparse.c 2004-06-21 00:50:01.000000000 +0200
> @@ -1211,7 +1211,7 @@
>
> for (idx = 0; idx < mp_irq_entries; idx++)
> if (mp_irqs[idx].mpc_srcbus == MP_ISA_BUS &&
> - (mp_irqs[idx].mpc_dstapic == ioapic) &&
> + (mp_irqs[idx].mpc_dstapic == mp_ioapics[ioapic].mpc_apicid) &&
> (mp_irqs[idx].mpc_srcbusirq == i ||
> mp_irqs[idx].mpc_dstirq == i))
> break;
> diff -ruN linux-2.4.27-rc1/arch/x86_64/kernel/mpparse.c linux-2.4.27-rc1.mpparse-fix/arch/x86_64/kernel/mpparse.c
> --- linux-2.4.27-rc1/arch/x86_64/kernel/mpparse.c 2004-06-21 00:39:30.000000000 +0200
> +++ linux-2.4.27-rc1.mpparse-fix/arch/x86_64/kernel/mpparse.c 2004-06-21 00:50:01.000000000 +0200
> @@ -866,7 +866,7 @@
>
> for (idx = 0; idx < mp_irq_entries; idx++)
> if (mp_irqs[idx].mpc_srcbus == MP_ISA_BUS &&
> - (mp_irqs[idx].mpc_dstapic == ioapic) &&
> + (mp_irqs[idx].mpc_dstapic == intsrc.mpc_dstapic) &&
> (mp_irqs[idx].mpc_srcbusirq == i ||
> mp_irqs[idx].mpc_dstirq == i))
> break;