cvs commit: src/sys/i386/i386 local_apic.c src/sys/amd64/amd64
local_apic.c
John Baldwin
jhb at freebsd.org
Tue Dec 13 11:36:52 PST 2005
On Tuesday 13 December 2005 01:29 pm, Bjoern A. Zeeb wrote:
> On Tue, 13 Dec 2005, John Baldwin wrote:
> > jhb 2005-12-13 15:09:40 UTC
> >
> > FreeBSD src repository
> >
> > Modified files:
> > sys/i386/i386 local_apic.c
> > sys/amd64/amd64 local_apic.c
> > Log:
> > Don't check the CPUID_APIC bit in the cpu_features flags field to
> > determine if the boot CPU has a local APIC because some BIOS vendors are
> > not competent enough to set this bit. Instead, just assume that we
> > always have a local APIC on amd64.
>
> ...
>
> > Reported by: bz
>
> 1) for the records find more information about the board/BIOS
> in question in PR 88251.
>
> 2) though the above initially sounded like it might be a good idea
> because FreeBSD is smart enough to find everything even if that bit
> isn't set:
>
> CPI APIC Table: <Nvidia AWRDACPI>
> APIC: CPU 0 has ACPI ID 0
> MADT: Found IO APIC ID 2, Interrupt 0 at 0xfec00000
> ioapic0: Changing APIC ID to 2
> ...
> ioapic0: intpin 15 polarity: high
> lapic0: Routing NMI -> LINT1
> MADT: Ignoring local NMI routed to ACPI CPU 1
None of this is problematic actually. The 'Ignoring' line indicates a bug in
your BIOS, but not one that is harmful.
> the next problem turned up later at boot time:
>
> ...
> procfs registered
> linprocfs registered
> panic: lapic: Divisor too big
> KDB: enter: panic
> [thread pid 0 tid 0 ]
> Stopped at kdb_enter+0x31: leave
> db> where
> Tracing pid 0 tid 0 td 0xffffffff808e1bc0
> kdb_enter() at kdb_enter+0x31
> panic() at panic+0x179
> lapic_setup_clock() at lapic_setup_clock+0x99
> cpu_initclocks() at cpu_initclocks+0xe
> initclocks() at initclocks+0x9
> mi_startup() at mi_startup+0xb6
> btext() at btext+0x2c
This means your local APIC doesn't actually work and is why I backed it out
altogether. :(
> The more I think about it the more I like the idea from obrien@ to
> panic if the CPUID_APIC bit isn't set on amd64 and tell the user to get
> their BIOS (settings) fixed. It will save us a lot of debugging trouble
> like I already caused and will hopefully make more users complain to
> their board/BIOS vendors to get it fixed. WinXP64 gives a nice text blob
> to tell the user exactly that. If we get too many reports it'll be a FAQ.
Well, what we have now would just work out of the box if atpic is in the
kernel. APIC is mandatory for amd64 though, and if Windows blows chunks on
it I'm sure BIOS vendors will eventually fix it.
--
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 cvs-src
mailing list