diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/gpu/vga/vgaarb.c | 14 | ||||
-rw-r--r-- | drivers/pci/bus.c | 6 | ||||
-rw-r--r-- | drivers/pci/probe.c | 6 |
3 files changed, 17 insertions, 9 deletions
diff --git a/drivers/gpu/vga/vgaarb.c b/drivers/gpu/vga/vgaarb.c index b6852b776931..e893f6e1937d 100644 --- a/drivers/gpu/vga/vgaarb.c +++ b/drivers/gpu/vga/vgaarb.c | |||
@@ -141,7 +141,11 @@ EXPORT_SYMBOL_GPL(vga_default_device); | |||
141 | 141 | ||
142 | void vga_set_default_device(struct pci_dev *pdev) | 142 | void vga_set_default_device(struct pci_dev *pdev) |
143 | { | 143 | { |
144 | vga_default = pdev; | 144 | if (vga_default == pdev) |
145 | return; | ||
146 | |||
147 | pci_dev_put(vga_default); | ||
148 | vga_default = pci_dev_get(pdev); | ||
145 | } | 149 | } |
146 | #endif | 150 | #endif |
147 | 151 | ||
@@ -577,7 +581,7 @@ static bool vga_arbiter_add_pci_device(struct pci_dev *pdev) | |||
577 | #ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE | 581 | #ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE |
578 | if (vga_default == NULL && | 582 | if (vga_default == NULL && |
579 | ((vgadev->owns & VGA_RSRC_LEGACY_MASK) == VGA_RSRC_LEGACY_MASK)) | 583 | ((vgadev->owns & VGA_RSRC_LEGACY_MASK) == VGA_RSRC_LEGACY_MASK)) |
580 | vga_default = pci_dev_get(pdev); | 584 | vga_set_default_device(pdev); |
581 | #endif | 585 | #endif |
582 | 586 | ||
583 | vga_arbiter_check_bridge_sharing(vgadev); | 587 | vga_arbiter_check_bridge_sharing(vgadev); |
@@ -613,10 +617,8 @@ static bool vga_arbiter_del_pci_device(struct pci_dev *pdev) | |||
613 | } | 617 | } |
614 | 618 | ||
615 | #ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE | 619 | #ifndef __ARCH_HAS_VGA_DEFAULT_DEVICE |
616 | if (vga_default == pdev) { | 620 | if (vga_default == pdev) |
617 | pci_dev_put(vga_default); | 621 | vga_set_default_device(NULL); |
618 | vga_default = NULL; | ||
619 | } | ||
620 | #endif | 622 | #endif |
621 | 623 | ||
622 | if (vgadev->decodes & (VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM)) | 624 | if (vgadev->decodes & (VGA_RSRC_LEGACY_IO | VGA_RSRC_LEGACY_MEM)) |
diff --git a/drivers/pci/bus.c b/drivers/pci/bus.c index 4b0970b46e0b..6241fd05bd41 100644 --- a/drivers/pci/bus.c +++ b/drivers/pci/bus.c | |||
@@ -87,11 +87,15 @@ EXPORT_SYMBOL_GPL(pci_bus_resource_n); | |||
87 | void pci_bus_remove_resources(struct pci_bus *bus) | 87 | void pci_bus_remove_resources(struct pci_bus *bus) |
88 | { | 88 | { |
89 | int i; | 89 | int i; |
90 | struct pci_bus_resource *bus_res, *tmp; | ||
90 | 91 | ||
91 | for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++) | 92 | for (i = 0; i < PCI_BRIDGE_RESOURCE_NUM; i++) |
92 | bus->resource[i] = NULL; | 93 | bus->resource[i] = NULL; |
93 | 94 | ||
94 | pci_free_resource_list(&bus->resources); | 95 | list_for_each_entry_safe(bus_res, tmp, &bus->resources, list) { |
96 | list_del(&bus_res->list); | ||
97 | kfree(bus_res); | ||
98 | } | ||
95 | } | 99 | } |
96 | 100 | ||
97 | /** | 101 | /** |
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 23961117663f..ec909afa90b6 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c | |||
@@ -729,8 +729,10 @@ int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev *dev, int max, | |||
729 | 729 | ||
730 | /* Check if setup is sensible at all */ | 730 | /* Check if setup is sensible at all */ |
731 | if (!pass && | 731 | if (!pass && |
732 | (primary != bus->number || secondary <= bus->number)) { | 732 | (primary != bus->number || secondary <= bus->number || |
733 | dev_dbg(&dev->dev, "bus configuration invalid, reconfiguring\n"); | 733 | secondary > subordinate)) { |
734 | dev_info(&dev->dev, "bridge configuration invalid ([bus %02x-%02x]), reconfiguring\n", | ||
735 | secondary, subordinate); | ||
734 | broken = 1; | 736 | broken = 1; |
735 | } | 737 | } |
736 | 738 | ||