[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1174576601.10840.189.camel@localhost.localdomain>
Date: Thu, 22 Mar 2007 16:16:41 +0100
From: Thomas Gleixner <tglx@...utronix.de>
To: Adrian Bunk <bunk@...sta.de>
Cc: Ray Lee <ray-lk@...rabbit.org>,
LKML <linux-kernel@...r.kernel.org>, Ingo Molnar <mingo@...e.hu>,
john stultz <johnstul@...ibm.com>,
Len Brown <len.brown@...el.com>, Andi Kleen <ak@...e.de>,
linux-acpi@...r.kernel.org
Subject: Re: 2.6.21-rc[123] regression with NOAPIC
On Thu, 2007-03-22 at 15:16 +0100, Adrian Bunk wrote:
> > > Does it work if you do _not_ revert the commits, and instead replace in
> > > drivers/acpi/processor_idle.c the
> > > #ifdef ARCH_APICTIMER_STOPS_ON_C3
> > > with an
> > > #if 0
> > > ?
> >
> > Then NOAPIC probably works again, but booting w/o NOAPIC fails.
>
> But we'll know that it's this code that has a problen with noapic
> in the CONFIG_GENERIC_CLOCKEVENTS=n case.
Nope. This code does not have a problem. It causes a problem elsewhere:
It calls switch_ipi_to_APIC_timer() or switch_APIC_timer_to_ipi(), which
sets/clears a bit in the broadcast mask and enables / disables the local
APIC timer.
I don't see right now, why this causes the box to lock up hard, but
maybe the debug printk's below give us some hint.
tglx
diff --git a/arch/x86_64/kernel/apic.c b/arch/x86_64/kernel/apic.c
index 723417d..29376e2 100644
--- a/arch/x86_64/kernel/apic.c
+++ b/arch/x86_64/kernel/apic.c
@@ -886,6 +886,8 @@ void disable_APIC_timer(void)
if (using_apic_timer) {
unsigned long v;
+ printk("Disabling local APIC timer %d\n", apic_runs_main_timer);
+
v = apic_read(APIC_LVTT);
/*
* When an illegal vector value (0-15) is written to an LVT
@@ -910,6 +912,7 @@ void enable_APIC_timer(void)
!cpu_isset(cpu, timer_interrupt_broadcast_ipi_mask)) {
unsigned long v;
+ printk("Enabling local APIC timer: %d\n", apic_runs_main_timer);
v = apic_read(APIC_LVTT);
apic_write(APIC_LVTT, v & ~APIC_LVT_MASKED);
}
@@ -934,6 +937,7 @@ void smp_send_timer_broadcast_ipi(void)
cpus_and(mask, cpu_online_map, timer_interrupt_broadcast_ipi_mask);
if (!cpus_empty(mask)) {
+ printk("Send IPI\n");
send_IPI_mask(mask, LOCAL_TIMER_VECTOR);
}
}
-
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@...r.kernel.org
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/
Powered by blists - more mailing lists