diff options
Diffstat (limited to 'drivers/pci/setup-res.c')
| -rw-r--r-- | drivers/pci/setup-res.c | 11 | 
1 files changed, 11 insertions, 0 deletions
diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c index 439ac5f5907a..b492e67c3d87 100644 --- a/drivers/pci/setup-res.c +++ b/drivers/pci/setup-res.c @@ -214,6 +214,17 @@ static int pci_revert_fw_address(struct resource *res, struct pci_dev *dev,  	root = pci_find_parent_resource(dev, res);  	if (!root) { +		/* +		 * If dev is behind a bridge, accesses will only reach it +		 * if res is inside the relevant bridge window. +		 */ +		if (pci_upstream_bridge(dev)) +			return -ENXIO; + +		/* +		 * On the root bus, assume the host bridge will forward +		 * everything. +		 */  		if (res->flags & IORESOURCE_IO)  			root = &ioport_resource;  		else  |