Skip site navigation (1)Skip section navigation (2)
Date:      Wed, 5 Oct 2005 12:52:12 +0930
From:      "Wilkinson, Alex" <alex.wilkinson@dsto.defence.gov.au>
To:        freebsd-current@freebsd.org, current@freebsd.org
Subject:   Re: Broken MP table detected ...
Message-ID:  <20051005032211.GB67868@squash.dsto.defence.gov.au>
In-Reply-To: <200509261611.36343.jhb@FreeBSD.org>
References:  <20050920004358.GA76462@squash.dsto.defence.gov.au>  <200509211640.38493.jhb@FreeBSD.org>  <20050923024615.GT91606@squash.dsto.defence.gov.au>  <200509261611.36343.jhb@FreeBSD.org>

next in thread | previous in thread | raw e-mail | index | archive | help
    0n Mon, Sep 26, 2005 at 04:11:35PM -0400, John Baldwin wrote: 

    >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.

As usual an awesome explanation. Thanks for taking the time to explain this to me !

 - aW



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?20051005032211.GB67868>