diff options
Diffstat (limited to 'arch/x86/pci')
| -rw-r--r-- | arch/x86/pci/acpi.c | 23 | ||||
| -rw-r--r-- | arch/x86/pci/common.c | 1 | ||||
| -rw-r--r-- | arch/x86/pci/i386.c | 5 | ||||
| -rw-r--r-- | arch/x86/pci/irq.c | 1 | ||||
| -rw-r--r-- | arch/x86/pci/mmconfig-shared.c | 1 | ||||
| -rw-r--r-- | arch/x86/pci/pcbios.c | 1 | 
6 files changed, 22 insertions, 10 deletions
diff --git a/arch/x86/pci/acpi.c b/arch/x86/pci/acpi.c index 6e22454bfaa6..c7b1ebfb7da7 100644 --- a/arch/x86/pci/acpi.c +++ b/arch/x86/pci/acpi.c  | |||
| @@ -3,6 +3,7 @@ | |||
| 3 | #include <linux/init.h> | 3 | #include <linux/init.h> | 
| 4 | #include <linux/irq.h> | 4 | #include <linux/irq.h> | 
| 5 | #include <linux/dmi.h> | 5 | #include <linux/dmi.h> | 
| 6 | #include <linux/slab.h> | ||
| 6 | #include <asm/numa.h> | 7 | #include <asm/numa.h> | 
| 7 | #include <asm/pci_x86.h> | 8 | #include <asm/pci_x86.h> | 
| 8 | 9 | ||
| @@ -122,8 +123,8 @@ setup_resource(struct acpi_resource *acpi_res, void *data) | |||
| 122 | struct acpi_resource_address64 addr; | 123 | struct acpi_resource_address64 addr; | 
| 123 | acpi_status status; | 124 | acpi_status status; | 
| 124 | unsigned long flags; | 125 | unsigned long flags; | 
| 125 | struct resource *root; | 126 | struct resource *root, *conflict; | 
| 126 | u64 start, end; | 127 | u64 start, end, max_len; | 
| 127 | 128 | ||
| 128 | status = resource_to_addr(acpi_res, &addr); | 129 | status = resource_to_addr(acpi_res, &addr); | 
| 129 | if (!ACPI_SUCCESS(status)) | 130 | if (!ACPI_SUCCESS(status)) | 
| @@ -140,6 +141,17 @@ setup_resource(struct acpi_resource *acpi_res, void *data) | |||
| 140 | } else | 141 | } else | 
| 141 | return AE_OK; | 142 | return AE_OK; | 
| 142 | 143 | ||
| 144 | max_len = addr.maximum - addr.minimum + 1; | ||
| 145 | if (addr.address_length > max_len) { | ||
| 146 | dev_printk(KERN_DEBUG, &info->bridge->dev, | ||
| 147 | "host bridge window length %#llx doesn't fit in " | ||
| 148 | "%#llx-%#llx, trimming\n", | ||
| 149 | (unsigned long long) addr.address_length, | ||
| 150 | (unsigned long long) addr.minimum, | ||
| 151 | (unsigned long long) addr.maximum); | ||
| 152 | addr.address_length = max_len; | ||
| 153 | } | ||
| 154 | |||
| 143 | start = addr.minimum + addr.translation_offset; | 155 | start = addr.minimum + addr.translation_offset; | 
| 144 | end = start + addr.address_length - 1; | 156 | end = start + addr.address_length - 1; | 
| 145 | 157 | ||
| @@ -157,9 +169,12 @@ setup_resource(struct acpi_resource *acpi_res, void *data) | |||
| 157 | return AE_OK; | 169 | return AE_OK; | 
| 158 | } | 170 | } | 
| 159 | 171 | ||
| 160 | if (insert_resource(root, res)) { | 172 | conflict = insert_resource_conflict(root, res); | 
| 173 | if (conflict) { | ||
| 161 | dev_err(&info->bridge->dev, | 174 | dev_err(&info->bridge->dev, | 
| 162 | "can't allocate host bridge window %pR\n", res); | 175 | "address space collision: host bridge window %pR " | 
| 176 | "conflicts with %s %pR\n", | ||
| 177 | res, conflict->name, conflict); | ||
| 163 | } else { | 178 | } else { | 
| 164 | pci_bus_add_resource(info->bus, res, 0); | 179 | pci_bus_add_resource(info->bus, res, 0); | 
| 165 | info->res_num++; | 180 | info->res_num++; | 
diff --git a/arch/x86/pci/common.c b/arch/x86/pci/common.c index 294e10cb11e1..cf2e93869c48 100644 --- a/arch/x86/pci/common.c +++ b/arch/x86/pci/common.c  | |||
| @@ -9,6 +9,7 @@ | |||
| 9 | #include <linux/ioport.h> | 9 | #include <linux/ioport.h> | 
| 10 | #include <linux/init.h> | 10 | #include <linux/init.h> | 
| 11 | #include <linux/dmi.h> | 11 | #include <linux/dmi.h> | 
| 12 | #include <linux/slab.h> | ||
| 12 | 13 | ||
| 13 | #include <asm/acpi.h> | 14 | #include <asm/acpi.h> | 
| 14 | #include <asm/segment.h> | 15 | #include <asm/segment.h> | 
diff --git a/arch/x86/pci/i386.c b/arch/x86/pci/i386.c index dece3eb9c906..46fd43f79103 100644 --- a/arch/x86/pci/i386.c +++ b/arch/x86/pci/i386.c  | |||
| @@ -127,9 +127,6 @@ static void __init pcibios_allocate_bus_resources(struct list_head *bus_list) | |||
| 127 | continue; | 127 | continue; | 
| 128 | if (!r->start || | 128 | if (!r->start || | 
| 129 | pci_claim_resource(dev, idx) < 0) { | 129 | pci_claim_resource(dev, idx) < 0) { | 
| 130 | dev_info(&dev->dev, | ||
| 131 | "can't reserve window %pR\n", | ||
| 132 | r); | ||
| 133 | /* | 130 | /* | 
| 134 | * Something is wrong with the region. | 131 | * Something is wrong with the region. | 
| 135 | * Invalidate the resource to prevent | 132 | * Invalidate the resource to prevent | 
| @@ -181,8 +178,6 @@ static void __init pcibios_allocate_resources(int pass) | |||
| 181 | "BAR %d: reserving %pr (d=%d, p=%d)\n", | 178 | "BAR %d: reserving %pr (d=%d, p=%d)\n", | 
| 182 | idx, r, disabled, pass); | 179 | idx, r, disabled, pass); | 
| 183 | if (pci_claim_resource(dev, idx) < 0) { | 180 | if (pci_claim_resource(dev, idx) < 0) { | 
| 184 | dev_info(&dev->dev, | ||
| 185 | "can't reserve %pR\n", r); | ||
| 186 | /* We'll assign a new address later */ | 181 | /* We'll assign a new address later */ | 
| 187 | r->end -= r->start; | 182 | r->end -= r->start; | 
| 188 | r->start = 0; | 183 | r->start = 0; | 
diff --git a/arch/x86/pci/irq.c b/arch/x86/pci/irq.c index 8b107521d24e..5d362b5ba06f 100644 --- a/arch/x86/pci/irq.c +++ b/arch/x86/pci/irq.c  | |||
| @@ -8,7 +8,6 @@ | |||
| 8 | #include <linux/kernel.h> | 8 | #include <linux/kernel.h> | 
| 9 | #include <linux/pci.h> | 9 | #include <linux/pci.h> | 
| 10 | #include <linux/init.h> | 10 | #include <linux/init.h> | 
| 11 | #include <linux/slab.h> | ||
| 12 | #include <linux/interrupt.h> | 11 | #include <linux/interrupt.h> | 
| 13 | #include <linux/dmi.h> | 12 | #include <linux/dmi.h> | 
| 14 | #include <linux/io.h> | 13 | #include <linux/io.h> | 
diff --git a/arch/x86/pci/mmconfig-shared.c b/arch/x86/pci/mmconfig-shared.c index 8f3f9a50b1e0..39b9ebe8f886 100644 --- a/arch/x86/pci/mmconfig-shared.c +++ b/arch/x86/pci/mmconfig-shared.c  | |||
| @@ -16,6 +16,7 @@ | |||
| 16 | #include <linux/sfi_acpi.h> | 16 | #include <linux/sfi_acpi.h> | 
| 17 | #include <linux/bitmap.h> | 17 | #include <linux/bitmap.h> | 
| 18 | #include <linux/dmi.h> | 18 | #include <linux/dmi.h> | 
| 19 | #include <linux/slab.h> | ||
| 19 | #include <asm/e820.h> | 20 | #include <asm/e820.h> | 
| 20 | #include <asm/pci_x86.h> | 21 | #include <asm/pci_x86.h> | 
| 21 | #include <asm/acpi.h> | 22 | #include <asm/acpi.h> | 
diff --git a/arch/x86/pci/pcbios.c b/arch/x86/pci/pcbios.c index 1c975cc9839e..59a225c17b84 100644 --- a/arch/x86/pci/pcbios.c +++ b/arch/x86/pci/pcbios.c  | |||
| @@ -4,6 +4,7 @@ | |||
| 4 | 4 | ||
| 5 | #include <linux/pci.h> | 5 | #include <linux/pci.h> | 
| 6 | #include <linux/init.h> | 6 | #include <linux/init.h> | 
| 7 | #include <linux/slab.h> | ||
| 7 | #include <linux/module.h> | 8 | #include <linux/module.h> | 
| 8 | #include <linux/uaccess.h> | 9 | #include <linux/uaccess.h> | 
| 9 | #include <asm/pci_x86.h> | 10 | #include <asm/pci_x86.h> | 
