diff options
| -rw-r--r-- | drivers/pci/probe.c | 15 |
1 files changed, 8 insertions, 7 deletions
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 63751a283817..3bc0fcd71d03 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c | |||
| @@ -456,7 +456,7 @@ int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max | |||
| 456 | * pass and just note the configuration. | 456 | * pass and just note the configuration. |
| 457 | */ | 457 | */ |
| 458 | if (pass) | 458 | if (pass) |
| 459 | return max; | 459 | goto out; |
| 460 | busnr = (buses >> 8) & 0xFF; | 460 | busnr = (buses >> 8) & 0xFF; |
| 461 | 461 | ||
| 462 | /* | 462 | /* |
| @@ -466,12 +466,12 @@ int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max | |||
| 466 | if (pci_find_bus(pci_domain_nr(bus), busnr)) { | 466 | if (pci_find_bus(pci_domain_nr(bus), busnr)) { |
| 467 | printk(KERN_INFO "PCI: Bus %04x:%02x already known\n", | 467 | printk(KERN_INFO "PCI: Bus %04x:%02x already known\n", |
| 468 | pci_domain_nr(bus), busnr); | 468 | pci_domain_nr(bus), busnr); |
| 469 | return max; | 469 | goto out; |
| 470 | } | 470 | } |
| 471 | 471 | ||
| 472 | child = pci_add_new_bus(bus, dev, busnr); | 472 | child = pci_add_new_bus(bus, dev, busnr); |
| 473 | if (!child) | 473 | if (!child) |
| 474 | return max; | 474 | goto out; |
| 475 | child->primary = buses & 0xFF; | 475 | child->primary = buses & 0xFF; |
| 476 | child->subordinate = (buses >> 16) & 0xFF; | 476 | child->subordinate = (buses >> 16) & 0xFF; |
| 477 | child->bridge_ctl = bctl; | 477 | child->bridge_ctl = bctl; |
| @@ -496,7 +496,7 @@ int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max | |||
| 496 | bus ranges. */ | 496 | bus ranges. */ |
| 497 | pci_write_config_dword(dev, PCI_PRIMARY_BUS, | 497 | pci_write_config_dword(dev, PCI_PRIMARY_BUS, |
| 498 | buses & ~0xffffff); | 498 | buses & ~0xffffff); |
| 499 | return max; | 499 | goto out; |
| 500 | } | 500 | } |
| 501 | 501 | ||
| 502 | /* Clear errors */ | 502 | /* Clear errors */ |
| @@ -505,7 +505,7 @@ int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max | |||
| 505 | /* Prevent assigning a bus number that already exists. | 505 | /* Prevent assigning a bus number that already exists. |
| 506 | * This can happen when a bridge is hot-plugged */ | 506 | * This can happen when a bridge is hot-plugged */ |
| 507 | if (pci_find_bus(pci_domain_nr(bus), max+1)) | 507 | if (pci_find_bus(pci_domain_nr(bus), max+1)) |
| 508 | return max; | 508 | goto out; |
| 509 | child = pci_add_new_bus(bus, dev, ++max); | 509 | child = pci_add_new_bus(bus, dev, ++max); |
| 510 | buses = (buses & 0xff000000) | 510 | buses = (buses & 0xff000000) |
| 511 | | ((unsigned int)(child->primary) << 0) | 511 | | ((unsigned int)(child->primary) << 0) |
| @@ -581,8 +581,6 @@ int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max | |||
| 581 | pci_write_config_byte(dev, PCI_SUBORDINATE_BUS, max); | 581 | pci_write_config_byte(dev, PCI_SUBORDINATE_BUS, max); |
| 582 | } | 582 | } |
| 583 | 583 | ||
| 584 | pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bctl); | ||
| 585 | |||
| 586 | sprintf(child->name, (is_cardbus ? "PCI CardBus #%02x" : "PCI Bus #%02x"), child->number); | 584 | sprintf(child->name, (is_cardbus ? "PCI CardBus #%02x" : "PCI Bus #%02x"), child->number); |
| 587 | 585 | ||
| 588 | while (bus->parent) { | 586 | while (bus->parent) { |
| @@ -601,6 +599,9 @@ int __devinit pci_scan_bridge(struct pci_bus *bus, struct pci_dev * dev, int max | |||
| 601 | bus = bus->parent; | 599 | bus = bus->parent; |
| 602 | } | 600 | } |
| 603 | 601 | ||
| 602 | out: | ||
| 603 | pci_write_config_word(dev, PCI_BRIDGE_CONTROL, bctl); | ||
| 604 | |||
| 604 | return max; | 605 | return max; |
| 605 | } | 606 | } |
| 606 | 607 | ||
