1
linux/drivers/pci
Bjorn Helgaas b126b4703a PCI: allocate bus resources from the top down
Allocate space from the highest-address PCI bus resource first, then work
downward.

Previously, we looked for space in PCI host bridge windows in the order
we discovered the windows.  For example, given the following windows
(discovered via an ACPI _CRS method):

    pci_root PNP0A03:00: host bridge window [mem 0x000a0000-0x000bffff]
    pci_root PNP0A03:00: host bridge window [mem 0x000c0000-0x000effff]
    pci_root PNP0A03:00: host bridge window [mem 0x000f0000-0x000fffff]
    pci_root PNP0A03:00: host bridge window [mem 0xbff00000-0xf7ffffff]
    pci_root PNP0A03:00: host bridge window [mem 0xff980000-0xff980fff]
    pci_root PNP0A03:00: host bridge window [mem 0xff97c000-0xff97ffff]
    pci_root PNP0A03:00: host bridge window [mem 0xfed20000-0xfed9ffff]

we attempted to allocate from [mem 0x000a0000-0x000bffff] first, then
[mem 0x000c0000-0x000effff], and so on.

With this patch, we allocate from [mem 0xff980000-0xff980fff] first, then
[mem 0xff97c000-0xff97ffff], [mem 0xfed20000-0xfed9ffff], etc.

Allocating top-down follows Windows practice, so we're less likely to
trip over BIOS defects in the _CRS description.

On the machine above (a Dell T3500), the [mem 0xbff00000-0xbfffffff] region
doesn't actually work and is likely a BIOS defect.  The symptom is that we
move the AHCI controller to 0xbff00000, which leads to "Boot has failed,
sleeping forever," a BUG in ahci_stop_engine(), or some other boot failure.

Reference: https://bugzilla.kernel.org/show_bug.cgi?id=16228#c43
Reference: https://bugzilla.redhat.com/show_bug.cgi?id=620313
Reference: https://bugzilla.redhat.com/show_bug.cgi?id=629933
Reported-by: Brian Bloniarz <phunge0@hotmail.com>
Reported-and-tested-by: Stefan Becker <chemobejk@gmail.com>
Reported-by: Denys Vlasenko <dvlasenk@redhat.com>
Signed-off-by: Bjorn Helgaas <bjorn.helgaas@hp.com>
Signed-off-by: Jesse Barnes <jbarnes@virtuousgeek.org>
2010-10-26 15:33:37 -07:00
..
hotplug PCI hotplug: ibmphp-hpc: semaphore cleanup 2010-10-15 13:09:48 -07:00
pcie PCI/PCIe/AER: Disable native AER service if BIOS has precedence 2010-10-15 13:09:50 -07:00
.gitignore
access.c PCI: output FW warning in pci_read/write_vpd 2010-05-18 15:00:25 -07:00
bus.c PCI: allocate bus resources from the top down 2010-10-26 15:33:37 -07:00
dmar.c Merge git://git.infradead.org/iommu-2.6 2010-05-21 17:25:01 -07:00
hotplug-pci.c
hotplug.c
htirq.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
intel-iommu.c Merge git://git.infradead.org/iommu-2.6 2010-09-27 12:25:10 -07:00
intr_remapping.c Merge git://git.infradead.org/iommu-2.6 2010-08-15 17:34:20 -07:00
intr_remapping.h
ioapic.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
iov.c PCI: fix pci_resource_alignment prototype 2010-09-09 13:41:25 -07:00
iova.c
irq.c
Kconfig PCI: change PCI_MSI help text to recommend enabling 2010-05-11 12:01:10 -07:00
Makefile PCI: use new ccflags variable in Makefile 2010-10-17 20:03:04 -07:00
msi.c PCI: MSI: Restore read_msi_msg_desc(); add get_cached_msi_msg_desc() 2010-07-30 09:41:39 -07:00
msi.h PCI: add PCI_MSIX_TABLE/PBA defines 2010-10-17 20:03:03 -07:00
pci-acpi.c Merge branch 'acpica' of git://git.kernel.org/pub/scm/linux/kernel/git/lenb/linux-acpi-2.6 2010-08-07 17:08:30 -07:00
pci-driver.c PCI: change device runtime PM settings for probe and remove 2010-07-30 09:29:09 -07:00
pci-label.c PCI: update for owner removal from struct device_attribute 2010-08-04 14:23:55 -07:00
pci-stub.c
pci-sysfs.c PCI: export SMBIOS provided firmware instance and label to sysfs 2010-07-30 09:36:01 -07:00
pci.c PCI: Add support for polling PME state on suspended legacy PCI devices 2010-10-17 20:03:06 -07:00
pci.h PCI: Export some PCI PM functionality 2010-10-17 20:03:06 -07:00
probe.c PCI: log vendor/device ID always 2010-10-17 20:03:05 -07:00
proc.c PCI: kill BKL in /proc/pci 2010-10-15 13:09:47 -07:00
quirks.c PCI: add quirk for non-symmetric-mode irq routing to versions 0 and 4 of the MCP55 northbridge 2010-10-15 13:09:50 -07:00
remove.c
rom.c
search.c PCI: use for_each_pci_dev() 2010-07-30 09:47:22 -07:00
setup-bus.c PCI hotplug: make sure child bridges are enabled at hotplug time 2010-07-30 09:29:16 -07:00
setup-irq.c PCI: use for_each_pci_dev() 2010-07-30 09:47:22 -07:00
setup-res.c PCI: fix message typo 2010-10-17 20:03:05 -07:00
slot.c PCI: bus speed strings should be const 2010-08-31 15:28:00 -07:00
syscall.c
vpd.c pci: Add helper to search for VPD keywords 2010-02-28 00:43:33 -08:00