From owner-freebsd-smp@FreeBSD.ORG Thu Jan 6 18:02:06 2005 Return-Path: Delivered-To: freebsd-smp@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id C08ED16A4CE for ; Thu, 6 Jan 2005 18:02:06 +0000 (GMT) Received: from mail4.speakeasy.net (mail4.speakeasy.net [216.254.0.204]) by mx1.FreeBSD.org (Postfix) with ESMTP id 6A4E243D31 for ; Thu, 6 Jan 2005 18:02:06 +0000 (GMT) (envelope-from jhb@FreeBSD.org) Received: (qmail 22253 invoked from network); 6 Jan 2005 18:02:06 -0000 Received: from dsl027-160-063.atl1.dsl.speakeasy.net (HELO server.baldwin.cx) ([216.27.160.63]) (envelope-sender ) encrypted SMTP for ; 6 Jan 2005 18:02:05 -0000 Received: from [10.50.41.243] (gw1.twc.weather.com [216.133.140.1]) (authenticated bits=0) by server.baldwin.cx (8.12.11/8.12.11) with ESMTP id j06I1uYO082673; Thu, 6 Jan 2005 13:02:01 -0500 (EST) (envelope-from jhb@FreeBSD.org) From: John Baldwin To: freebsd-smp@FreeBSD.org Date: Thu, 6 Jan 2005 13:00:31 -0500 User-Agent: KMail/1.6.2 References: <200501051621.32757.jhb@FreeBSD.org> <200501061403.15004.pvtrifonov@mail.ru> In-Reply-To: <200501061403.15004.pvtrifonov@mail.ru> MIME-Version: 1.0 Content-Disposition: inline Content-Type: text/plain; charset="koi8-r" Content-Transfer-Encoding: 7bit Message-Id: <200501061300.31415.jhb@FreeBSD.org> X-Spam-Checker-Version: SpamAssassin 2.63 (2004-01-11) on server.baldwin.cx cc: Peter Trifonov cc: kris@obsecurity.org Subject: Re: Lost interrupts on SMP systems X-BeenThere: freebsd-smp@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: FreeBSD SMP implementation group List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Thu, 06 Jan 2005 18:02:07 -0000 On Thursday 06 January 2005 06:03 am, Peter Trifonov wrote: > Hello John, > > On Thursday 06 January 2005 00:21, John Baldwin wrote: > > > > > ioapic0: Assuming intbase of 0 > > > > > MPTable: Ignoring global interrupt entry for pin 1 > > > > > MPTable: Ignoring global interrupt entry for pin 15 > > > > > > > > Ok, well, this is a bit of a problem here. Basically, this > > > > means you don't have any working interrupts as far as I can > > > > The error message is from the MP Table using an APIC ID of 255 instead of > > 16. Umm, an APIC ID of 16 isn't valid either. Is there an option in the > > BIOS to select MP 1.4 rather than 1.1? If so, can you please try that > > first? > > No. This is quite an old HP box. Its BIOS setup does not have any > multiprocessor-related options. > > > Also, can you try this patch. It changes the way we handle an errata on > > your CPU that I think may not work when we try to turn APIC mode back on > > after turning it off: > > I have recompiled the kernel with this patch, but it does not seem to > affect anything. mptable(8) still shows the same stuff, dmesg still > complains about ignored global interrupt entries. Ok, try this patch instead then, it should make the 'ignoring global interrupt entry' messages go away: --- //depot/vendor/freebsd/src/sys/i386/i386/mptable.c 2004/09/24 18:45:28 +++ //depot/user/jhb/acpipci/i386/i386/mptable.c 2005/01/06 17:56:36 @@ -624,23 +635,35 @@ mptable_parse_io_int(int_entry_ptr intr) { void *ioapic; - u_int pin; + u_int pin, apic_id; + apic_id = intr->dst_apic_id; if (intr->dst_apic_id == 0xff) { - printf("MPTable: Ignoring global interrupt entry for pin %d\n", - intr->dst_apic_int); - return; + /* + * Workaround some busted BIOSes that use a global APIC + * ID in systems with only one I/O APIC. + */ + if (mptable_nioapics == 1) { + apic_id = 0; + while (ioapics[apic_id] == NULL) + apic_id++; + } else { + printf( + "MPTable: Ignoring global interrupt entry for pin %d\n", + intr->dst_apic_int); + return; + } } if (intr->dst_apic_id >= NAPICID) { printf("MPTable: Ignoring interrupt entry for ioapic%d\n", intr->dst_apic_id); return; } - ioapic = ioapics[intr->dst_apic_id]; + ioapic = ioapics[apic_id]; if (ioapic == NULL) { printf( "MPTable: Ignoring interrupt entry for missing ioapic%d\n", - intr->dst_apic_id); + apic_id); return; } pin = intr->dst_apic_int; -- John Baldwin <>< http://www.FreeBSD.org/~jhb/ "Power Users Use the Power to Serve" = http://www.FreeBSD.org