[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Message-Id: <1174684121.10840.366.camel@localhost.localdomain>
Date: Fri, 23 Mar 2007 22:08:41 +0100
From: Thomas Gleixner <tglx@...utronix.de>
To: Adrian Bunk <bunk@...sta.de>
Cc: Linus Torvalds <torvalds@...ux-foundation.org>,
Andrew Morton <akpm@...ux-foundation.org>,
Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
Ray Lee <ray-lk@...rabbit.org>, Andi Kleen <ak@...e.de>,
Ingo Molnar <mingo@...e.hu>
Subject: Re: [2/5] 2.6.21-rc4: known regressions (v2)
On Fri, 2007-03-23 at 19:48 +0100, Adrian Bunk wrote:
> Subject : x86_64: ACPI regression with noapic (APICTIMER_STOPS_ON_C3?)
> References : http://lkml.org/lkml/2007/3/8/468
> http://lkml.org/lkml/2007/3/22/156
> Submitter : Ray Lee <ray-lk@...rabbit.org>
> Handled-By : Thomas Gleixner <tglx@...utronix.de>
> Status : problem is being debugged
Ray,
can you please test the patch below ?
Thanks,
tglx
------------------>
Subject: [PATCH] x86_64: avoid sending LOCAL_TIMER_VECTOR IPI to itself
Ray Lee reported, that on an UP kernel with "noapic" commandline option
set, the box locks hard during boot.
Adding some debug printks revieled, that the last action on the box
before stalling was "Send IPI" - a debug printk which was put into
smp_send_timer_broadcast_ipi().
It seems that send_IPI_mask(mask, LOCAL_TIMER_VECTOR) fails when
"noapic" is set on the commandline on an UP kernel.
Aside of that it does not make much sense to trigger an interrupt
instead of calling the function directly on the CPU which gets the
PIT/HPET interrupt in case of broadcasting.
Reported-by: Ray Lee <ray-lk@...rabbit.org>
Signed-off-by: Thomas Gleixner <tglx@...utronix.de>
diff --git a/arch/x86_64/kernel/apic.c b/arch/x86_64/kernel/apic.c
index 723417d..83328e1 100644
--- a/arch/x86_64/kernel/apic.c
+++ b/arch/x86_64/kernel/apic.c
@@ -930,9 +930,17 @@ EXPORT_SYMBOL(switch_APIC_timer_to_ipi);
void smp_send_timer_broadcast_ipi(void)
{
+ int cpu = smp_processor_id();
cpumask_t mask;
cpus_and(mask, cpu_online_map, timer_interrupt_broadcast_ipi_mask);
+
+ if (cpu_isset(cpu, mask)) {
+ cpu_clear(cpu, mask);
+ add_pda(apic_timer_irqs, 1);
+ smp_local_timer_interrupt();
+ }
+
if (!cpus_empty(mask)) {
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