diff options
Diffstat (limited to 'drivers/pci/probe.c')
| -rw-r--r-- | drivers/pci/probe.c | 10 | 
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index 334fd91f01e1..1779582fb500 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -904,6 +904,10 @@ static int pci_register_host_bridge(struct pci_host_bridge *bridge)  		bus->domain_nr = pci_bus_find_domain_nr(bus, parent);  	else  		bus->domain_nr = bridge->domain_nr; +	if (bus->domain_nr < 0) { +		err = bus->domain_nr; +		goto free; +	}  #endif  	b = pci_find_bus(pci_domain_nr(bus), bridge->busnr); @@ -1028,6 +1032,9 @@ unregister:  	device_del(&bridge->dev);  free: +#ifdef CONFIG_PCI_DOMAINS_GENERIC +	pci_bus_release_domain_nr(bus, parent); +#endif  	kfree(bus);  	return err;  } @@ -1889,9 +1896,6 @@ int pci_setup_device(struct pci_dev *dev)  	dev->broken_intx_masking = pci_intx_mask_broken(dev); -	/* Clear errors left from system firmware */ -	pci_write_config_word(dev, PCI_STATUS, 0xffff); -  	switch (dev->hdr_type) {		    /* header type */  	case PCI_HEADER_TYPE_NORMAL:		    /* standard header */  		if (class == PCI_CLASS_BRIDGE_PCI)  | 
