aboutsummaryrefslogtreecommitdiffstats
path: root/drivers
diff options
context:
space:
mode:
Diffstat (limited to 'drivers')
-rw-r--r--drivers/gpu/vga/vgaarb.c14
-rw-r--r--drivers/pci/bus.c6
-rw-r--r--drivers/pci/probe.c6
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
142void vga_set_default_device(struct pci_dev *pdev) 142void 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);
87void pci_bus_remove_resources(struct pci_bus *bus) 87void 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