Broken MP table detected ...

John Baldwin jhb at FreeBSD.org
Mon Sep 26 13:51:37 PDT 2005


On Thursday 22 September 2005 10:46 pm, Wilkinson, Alex wrote:
>     0n Wed, Sep 21, 2005 at 04:40:36PM -0400, John Baldwin wrote:
>     >On Monday 19 September 2005 08:55 pm, Scott Long wrote:
>     >> Wilkinson, Alex wrote:
>     >> > Can anyone tell me what the following means, and how to fix it:
>     >> >
>     >> >     APIC_IO: Testing 8254 interrupt delivery
>     >> >     APIC_IO: Broken MP table detected: 8254 is not connected to
>     >> > IOAPIC #0 intpin 2 APIC_IO: routing 8254 via 8259 and IOAPIC #0
>     >> > intpin 0
>     >> >
>     >> >  - aW
>     >>
>     >> It means that you need to use 6.0 instead of 5.x =-)  It represents
>     >> the old way that we connected the timecounters, which apparently
>     >> isn't well supported with newer amd64 boards.  6.0 solves this
>     >> problem by using a better supported mechanism.
>     >
>     >Actually, this is a 4.x method and it basically means that it has
>     > fallen back to mixed mode for IRQ0.  6.0 certainly does this better. 
>     > 5.x just uses mixed mode by default.
>
> John, what is mixed mode ?

Normally when you use the APICs, you don't use the older 8259A AT-PICs at all.  
However, the 8259A's are hooked up to pin 0 on the first I/O APIC, so if you 
enable pin 0 and enable interruput pins on the 8259As, then if they get an 
interrupt, they will forward it to the first I/O APIC which will then forward 
it to the CPUs as directed.  Using both the old PICs and the APICs at the 
same time using pin 0 in the first I/O APIC is known as mixed mode.  The 
reason FreeBSD uses it is that some motherboard manufacturers chose to not 
connect an IRQ0 input from the ISA timer to pin 2 on the first I/O APIC, even 
though the MP Table said that they did.  The reason they could get away with 
that is that Windows didn't use IRQ0 when it used the APICs, so the 
motherboards still passed WHQL certification ok (or so I've been told).  
Linux also doesn't use IRQ0, but uses the built-in countdown periodic timer 
that each CPU has in its local APIC.  In 4.x, the kernel would try to get 
IRQ0 interrupts via pin 2 on the first I/O APIC and if it didn't work, it 
printed out the message you saw and enabled mixed mode and enabled IRQ0 in 
the 8259A AT-PIC.  In 5.x, we just always use mixed mode without the runtime 
test and have a hint for forcing it to not use mixed mode.  In 6.x we use the 
countdown timer in the local APIC like Linux and Windows when using the APICs 
and don't use IRQ0 at all.

-- 
John Baldwin <jhb at FreeBSD.org>  <><  http://www.FreeBSD.org/~jhb/
"Power Users Use the Power to Serve"  =  http://www.FreeBSD.org


More information about the freebsd-current mailing list