linux/drivers/acpi
Robert Hancock 7752d5cfe3 x86: validate against acpi motherboard resources
This path adds validation of the MMCONFIG table against the ACPI reserved
motherboard resources.  If the MMCONFIG table is found to be reserved in
ACPI, we don't bother checking the E820 table.  The PCI Express firmware
spec apparently tells BIOS developers that reservation in ACPI is required
and E820 reservation is optional, so checking against ACPI first makes
sense.  Many BIOSes don't reserve the MMCONFIG region in E820 even though
it is perfectly functional, the existing check needlessly disables MMCONFIG
in these cases.

In order to do this, MMCONFIG setup has been split into two phases.  If PCI
configuration type 1 is not available then MMCONFIG is enabled early as
before.  Otherwise, it is enabled later after the ACPI interpreter is
enabled, since we need to be able to execute control methods in order to
check the ACPI reserved resources.  Presently this is just triggered off
the end of ACPI interpreter initialization.

There are a few other behavioral changes here:

- Validate all MMCONFIG configurations provided, not just the first one.

- Validate the entire required length of each configuration according to
  the provided ending bus number is reserved, not just the minimum required
  allocation.

- Validate that the area is reserved even if we read it from the chipset
  directly and not from the MCFG table.  This catches the case where the
  BIOS didn't set the location properly in the chipset and has mapped it
  over other things it shouldn't have.

This also cleans up the MMCONFIG initialization functions so that they
simply do nothing if MMCONFIG is not compiled in.

Based on an original patch by Rajesh Shah from Intel.

[akpm@linux-foundation.org: many fixes and cleanups]
Signed-off-by: Robert Hancock <hancockr@shaw.ca>
Signed-off-by: Andi Kleen <ak@suse.de>
Cc: Andrew Morton <akpm@linux-foundation.org>
Cc: Greg KH <greg@kroah.com>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
Tested-by: Andi Kleen <ak@suse.de>
Cc: Rajesh Shah <rajesh.shah@intel.com>
Cc: Jesse Barnes <jbarnes@virtuousgeek.org>
Acked-by: Linus Torvalds <torvalds@linux-foundation.org>
Cc: Andi Kleen <ak@suse.de>
Cc: Greg KH <greg@kroah.com>
Signed-off-by: Ingo Molnar <mingo@elte.hu>
Signed-off-by: Andrew Morton <akpm@linux-foundation.org>
Signed-off-by: Thomas Gleixner <tglx@linutronix.de>
2008-04-26 23:41:03 +02:00
..
dispatcher
events
executer ACPI: fix build warning 2008-02-21 02:01:30 -05:00
hardware ACPI suspend: Execute _WAK with the right argument 2008-02-14 00:28:05 -05:00
namespace
parser
resources
sleep ACPI PM: Restore the 2.6.24 suspend ordering 2008-04-01 11:21:08 -07:00
tables
utilities Merge branches 'release', 'button-sysfs', 'misc', 'mismatch', 'randconfig' and 'toshiba' into release 2008-03-13 01:59:49 -04:00
Kconfig ACPI: Remove ACPI_CUSTOM_DSDT_INITRD option 2008-03-15 11:58:04 -07:00
Makefile ACPI: SBS: Host controller must initialize before SBS. 2008-02-09 03:22:13 -05:00
ac.c acpi: Storage class should be before const qualifier 2008-04-21 22:24:53 +00:00
acpi_memhotplug.c
asus_acpi.c asus_acpi: remove misleading mask 2008-03-18 02:31:34 -04:00
battery.c ACPI: battery: Don't return -EFAIL on broken packages. 2008-03-17 22:37:42 -04:00
bay.c Merge branches 'release' and 'fluff' into release 2008-02-07 03:38:22 -05:00
blacklist.c ACPI: DMI: quirk for FSC ESPRIMO Mobile V5505 2008-02-14 02:43:39 -05:00
bus.c x86: validate against acpi motherboard resources 2008-04-26 23:41:03 +02:00
button.c ACPI: button: make real parent for input devices in device tree 2008-03-11 13:38:49 -04:00
cm_sbs.c
container.c
debug.c
dock.c ACPI: Set flag DOCK_UNDOCKING when triggered via sysfs 2008-03-18 05:16:38 -04:00
ec.c Revert "ACPI: EC: Handle IRQ storm on Acer laptops" 2008-03-18 21:32:24 -07:00
event.c ACPI: static acpi_chain_head 2008-02-14 01:04:18 -05:00
fan.c revert "ACPI: drivers/acpi: elide a non-zero test on a result that is never 0" 2008-03-28 10:16:53 -07:00
glue.c ACPI: misc cleanups 2008-02-07 03:33:23 -05:00
numa.c ACPI: misc cleanups 2008-02-07 03:33:23 -05:00
osl.c Add down_timeout and change ACPI to use it 2008-04-17 10:42:46 -04:00
pci_bind.c ACPI: misc cleanups 2008-02-07 03:33:23 -05:00
pci_irq.c ACPI: fix Medion _PRT quirk (use "ISA_", not "ISA") 2008-03-25 15:21:30 -07:00
pci_link.c ACPI: misc cleanups 2008-02-07 03:33:23 -05:00
pci_root.c ACPI: fix section mismatch in acpi_pci_root_add 2008-02-21 02:56:32 -05:00
power.c
processor_core.c acpi: fix "buggy BIOS check" when CPUs are hot removed 2008-04-08 18:25:53 -07:00
processor_idle.c cpuidle: fix 100% C0 statistics regression 2008-03-26 00:58:19 -04:00
processor_perflib.c ACPI: cpufreq: Print _PPC changes via cpufreq debug layer 2008-02-07 14:47:40 -05:00
processor_thermal.c
processor_throttling.c generic: use new set_cpus_allowed_ptr function 2008-04-19 19:44:58 +02:00
sbs.c ACPI: SBS: Host controller must initialize before SBS. 2008-02-09 03:22:13 -05:00
sbshc.c ACPI: SBS: remove typo from sbchc.c 2008-03-18 05:13:14 -04:00
sbshc.h
scan.c ACPI: fix a regression of ACPI device driver autoloading 2008-03-25 22:48:37 -04:00
system.c ACPI: buffer array too short in drivers/acpi/system.c 2008-03-12 17:57:22 -04:00
tables.c
thermal.c acpi thermal: fix result check 2008-04-08 18:25:52 -07:00
toshiba_acpi.c toshiba_acpi: Enable autoloading 2008-03-11 13:35:08 -04:00
utils.c ACPICA: Warn if packages with invalid references are evaluated 2008-03-11 23:57:20 -04:00
video.c Revert "ACPI: Ignore _BQC object when registering backlight device" 2008-04-05 12:14:13 -07:00
wmi.c ACPI: WMI: Clean up handling of spec violating data blocks 2008-03-11 17:59:05 -04:00