linux/arch/x86/kernel/apic
Eric W. Biederman 5989cd6a1c x86, apic: Map the local apic when parsing the MP table.
This fixes a regression in 2.6.35 from 2.6.34, that is
present for select models of Intel cpus when people are
using an MP table.

The commit cf7500c0ea
"x86, ioapic: In mpparse use mp_register_ioapic" started
calling mp_register_ioapic from MP_ioapic_info.  An extremely
simple change that was obviously correct.  Unfortunately
mp_register_ioapic did just a little more than the previous
hand crafted code and so we gained this call path.

The problem call path is:
MP_ioapic_info()
  mp_register_ioapic()
   io_apic_unique_id()
     io_apic_get_unique_id()
       get_physical_broadcast()
         modern_apic()
           lapic_get_version()
             apic_read(APIC_LVR)

Which turned out to be a problem because the local apic
was not mapped, at that point, unlike the similar point
in the ACPI parsing code.

This problem is fixed by mapping the local apic when
parsing the mptable as soon as we reasonably can.

Looking at the number of places we setup the fixmap for
the local apic, I see some serious simplification opportunities.
For the moment except for not duplicating the setting up of the
fixmap in init_apic_mappings, I have not acted on them.

The regression from 2.6.34 is tracked in bug
https://bugzilla.kernel.org/show_bug.cgi?id=16173

Cc: <stable@kernel.org> 2.6.35
Reported-by: David Hill <hilld@binarystorm.net>
Reported-by: Tvrtko Ursulin <tvrtko.ursulin@sophos.com>
Tested-by: Tvrtko Ursulin <tvrtko.ursulin@sophos.com>
Signed-off-by: Eric W. Biederman <ebiederm@xmission.com>
LKML-Reference: <m1eiee86jg.fsf_-_@fess.ebiederm.org>
Signed-off-by: H. Peter Anvin <hpa@linux.intel.com>
2010-08-05 16:26:42 -07:00
..
apic_flat_64.c arch/x86/kernel/apic/apic_flat_64.c: Make comment match the code 2010-02-04 11:55:47 +01:00
apic_noop.c x86: Fix bogus warning in apic_noop.apic_write() 2009-12-07 13:16:37 +01:00
apic.c x86, apic: Map the local apic when parsing the MP table. 2010-08-05 16:26:42 -07:00
bigsmp_32.c x86, irq: Allow 0xff for /proc/irq/[n]/smp_affinity on an 8-cpu system 2009-12-17 22:03:06 -08:00
es7000_32.c x86, irq: Kill io_apic_renumber_irq 2010-05-04 13:35:20 -07:00
io_apic.c x86, irq: Rename gsi_end gsi_top, and fix off by one errors 2010-06-09 13:34:06 -07:00
ipi.c Merge commit 'v2.6.31-rc7' into x86/cleanups 2009-08-24 12:25:54 +02:00
Makefile x86, apic: Introduce the NOOP apic driver 2009-10-14 09:17:00 +02:00
nmi.c include cleanup: Update gfp.h and slab.h includes to prepare for breaking implicit slab.h inclusion from percpu.h 2010-03-30 22:02:32 +09:00
numaq_32.c Merge branch 'x86-mrst-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2010-03-07 15:59:39 -08:00
probe_32.c x86, apic: Don't use logical-flat mode when CPU hotplug may exceed 8 CPUs 2010-02-09 20:51:11 -08:00
probe_64.c x86, apic: Don't use logical-flat mode when CPU hotplug may exceed 8 CPUs 2010-02-09 20:51:11 -08:00
summit_32.c x86: apic: Do not use stacked physid_mask_t 2009-11-10 05:52:07 +01:00
x2apic_cluster.c x86, irq: Allow 0xff for /proc/irq/[n]/smp_affinity on an 8-cpu system 2009-12-17 22:03:06 -08:00
x2apic_phys.c x86, irq: Allow 0xff for /proc/irq/[n]/smp_affinity on an 8-cpu system 2009-12-17 22:03:06 -08:00
x2apic_uv_x.c Merge branch 'x86-uv-for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/tip/linux-2.6-tip 2010-05-18 09:46:35 -07:00