diff options
author | Bjorn Helgaas <bhelgaas@google.com> | 2014-02-26 11:26:00 -0700 |
---|---|---|
committer | Bjorn Helgaas <bhelgaas@google.com> | 2014-03-19 15:00:14 -0600 |
commit | 3cedcc3621289d41bd21c5dbe0b886d57c83a1ea (patch) | |
tree | a746035791d4abbd0b9135e8e4bf46890799f6f1 /drivers/pci/setup-res.c | |
parent | c83bd900aac38552b0d903588bbb084d3b26fe71 (diff) | |
download | lwn-3cedcc3621289d41bd21c5dbe0b886d57c83a1ea.tar.gz lwn-3cedcc3621289d41bd21c5dbe0b886d57c83a1ea.zip |
PCI: Don't enable decoding if BAR hasn't been assigned an address
Don't enable memory or I/O decoding if we haven't assigned or claimed the
BAR's resource.
If we enable decoding for a BAR that hasn't been assigned an address, we'll
likely cause bus conflicts. This declines to enable decoding for resources
with IORESOURCE_UNSET.
Note that drivers can use pci_enable_device_io() or pci_enable_device_mem()
if they only care about specific types of BARs. In that case, we don't
bother checking whether the corresponding resources are assigned or
claimed.
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Diffstat (limited to 'drivers/pci/setup-res.c')
-rw-r--r-- | drivers/pci/setup-res.c | 10 |
1 files changed, 8 insertions, 2 deletions
diff --git a/drivers/pci/setup-res.c b/drivers/pci/setup-res.c index 6e443135ba24..7eed671d5586 100644 --- a/drivers/pci/setup-res.c +++ b/drivers/pci/setup-res.c @@ -343,9 +343,15 @@ int pci_enable_resources(struct pci_dev *dev, int mask) (!(r->flags & IORESOURCE_ROM_ENABLE))) continue; + if (r->flags & IORESOURCE_UNSET) { + dev_err(&dev->dev, "can't enable device: BAR %d %pR not assigned\n", + i, r); + return -EINVAL; + } + if (!r->parent) { - dev_err(&dev->dev, "device not available " - "(can't reserve %pR)\n", r); + dev_err(&dev->dev, "can't enable device: BAR %d %pR not claimed\n", + i, r); return -EINVAL; } |