apic, x86: Check if EILVT APIC registers are available (AMD only)
authorRobert Richter <robert.richter@amd.com>
Wed, 6 Oct 2010 10:27:53 +0000 (12:27 +0200)
committerIngo Molnar <mingo@elte.hu>
Wed, 20 Oct 2010 02:42:13 +0000 (04:42 +0200)
commita68c439b1966c91f0ef474e2bf275d6792312726
tree9a49f060ee7d20a23fa8d3990e7f733aef60b15c
parent14d4962dc863ab42e898d66d4837aa6c3afedc3b
apic, x86: Check if EILVT APIC registers are available (AMD only)

This patch implements checks for the availability of LVT entries
(APIC500-530) and reserves it if used. The check becomes
necessary since we want to let the BIOS provide the LVT offsets.
 The offsets should be determined by the subsystems using it
like those for MCE threshold or IBS.  On K8 only offset 0
(APIC500) and MCE interrupts are supported. Beginning with
family 10h at least 4 offsets are available.

Since offsets must be consistent for all cores, we keep track of
the LVT offsets in software and reserve the offset for the same
vector also to be used on other cores. An offset is freed by
setting the entry to APIC_EILVT_MASKED.

If the BIOS is right, there should be no conflicts. Otherwise a
"[Firmware Bug]: ..." error message is generated. However, if
software does not properly determines the offsets, it is not
necessarily a BIOS bug.

Signed-off-by: Robert Richter <robert.richter@amd.com>
LKML-Reference: <1286360874-1471-2-git-send-email-robert.richter@amd.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
arch/x86/include/asm/apicdef.h
arch/x86/kernel/apic/apic.c