Re: "Multiple entries for PCI IRQ 16" and "xlock already held" panics on 5.3-BETA(3,4,5)

From: John Baldwin <jhb_at_FreeBSD.org>
Date: Thu, 23 Sep 2004 11:32:45 -0400
On Thursday 23 September 2004 10:29 am, John Baldwin wrote:
> On Thursday 23 September 2004 12:24 am, Pavel Gubin wrote:
> > On Wed, Sep 22, 2004 at 04:28:51PM -0400, John Baldwin wrote:
> > > > 1) When MPS 1.4 is enabled with the BIOS setting and ACPI disabled
> > > > either by BIOS or by unsetting `acpi_load' loader variable, the
> > > > kernel panices immediately with "panic: Multiple entries for PCI IRQ
> > > > 16" message. As one can see from #1 Bootlog, there are really two
> > > > entries for IRQ16. I think this is the BIOS bug, but I also think the
> > > > diagnostics for this situation should be more precise than that.
> > >
> > > There's not much more precise that can be done.  mptable output would
> > > be extremely helpful here.
> >
> > =========================================================================
> >== ====
> >
> > MPTable, version 2.0.15
> >
> > -------------------------------------------------------------------------
> >-- ----
> >
> > MP Floating Pointer Structure:
> >
> >   location:			BIOS
> >   physical address:		0x000fb960
> >   signature:			'_MP_'
> >   length:			16 bytes
> >   version:			1.4
> >   checksum:			0x7f
> >   mode:				Virtual Wire
> >
> > -------------------------------------------------------------------------
> >-- ----
> >
> > MP Config Table Header:
> >
> >   physical address:		0x000f62b0
> >   signature:			'PCMP'
> >   base table length:		256
> >   version:			1.4
> >   checksum:			0xcb
> >   OEM ID:			'SiS     '
> >   Product ID:			'740         '
> >   OEM table pointer:		0x00000000
> >   OEM table size:		0
> >   entry count:			25
> >   local APIC address:		0xfee00000
> >   extended table length:	0
> >   extended table checksum:	0
> >
> > -------------------------------------------------------------------------
> >-- ----
> >
> > MP Config Base Table Entries:
> >
> > --
> > I/O Ints:	Type	Polarity    Trigger	Bus ID	 IRQ	APIC ID	PIN#
> > 		INT	active-lo       level	     0	 2:A	      2	  16
> > 		INT	active-lo       level	     0	 2:A	      2	  23
>
> This is the real bug and I guess I can improve the message.  Then problem
> is not two lines for IRQ 16, but that the PCI interrrupt for bus 0, device
> 2, pin #A has two different IRQs listed, so we don't know which one we are
> supposed to use.  This is definitely a BIOS bug and your motherboard
> manufacturer needs to harassed into giving you a BIOS update.

Also, I have a patch to make the error message more useful if you want to try 
it:

--- //depot/vendor/freebsd/src/sys/i386/i386/mptable.c	2004/07/01 07:50:36
+++ //depot/user/jhb/acpipci/i386/i386/mptable.c	2004/09/23 14:34:52
_at__at_ -935,7 +935,9 _at__at_
 	if (args->vector == vector)
 		return;
 	KASSERT(args->vector == -1,
-	    ("Multiple entries for PCI IRQ %d", args->vector));
+	    ("Multiple IRQs for PCI interrupt %d.%d.INT%c: %d and %d\n",
+	    args->bus, args->irq >> 2, 'A' + (args->irq & 0x3), args->vector,
+	    vector));
 	args->vector = vector;
 }
 
-- 
John Baldwin <jhb_at_FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org
Received on Thu Sep 23 2004 - 14:53:09 UTC

This archive was generated by hypermail 2.4.0 : Wed May 19 2021 - 11:38:13 UTC