From cf8175c365c64039789878e62bc435a4acc34028 Mon Sep 17 00:00:00 2001 From: Bjorn Helgaas Date: Thu, 22 Apr 2010 09:02:43 -0600 Subject: [PATCH] --- yaml --- r: 190216 b: refs/heads/master c: 45aa23b4cbd37408678c96cd113241860d3321f6 h: refs/heads/master v: v3 --- [refs] | 2 +- trunk/drivers/pci/probe.c | 23 +++++++---------------- 2 files changed, 8 insertions(+), 17 deletions(-) diff --git a/[refs] b/[refs] index a73a4c16707e..cac3ee7a9834 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: 4352aa5bbf1d0080c2dcf904ce1e4be0a1cb5937 +refs/heads/master: 45aa23b4cbd37408678c96cd113241860d3321f6 diff --git a/trunk/drivers/pci/probe.c b/trunk/drivers/pci/probe.c index 882bd8d29fe3..c82548afcd5c 100644 --- a/trunk/drivers/pci/probe.c +++ b/trunk/drivers/pci/probe.c @@ -174,19 +174,14 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type, pci_read_config_dword(dev, pos, &sz); pci_write_config_dword(dev, pos, l); - if (!sz) - goto fail; /* BAR not implemented */ - /* * All bits set in sz means the device isn't working properly. - * If it's a memory BAR or a ROM, bit 0 must be clear; if it's - * an io BAR, bit 1 must be clear. + * If the BAR isn't implemented, all bits must be 0. If it's a + * memory BAR or a ROM, bit 0 must be clear; if it's an io BAR, bit + * 1 must be clear. */ - if (sz == 0xffffffff) { - dev_err(&dev->dev, "reg %x: invalid size %#x; broken device?\n", - pos, sz); + if (!sz || sz == 0xffffffff) goto fail; - } /* * I don't know how l can have all bits set. Copied from old code. @@ -249,17 +244,13 @@ int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type, pos, res); } } else { - u32 size = pci_size(l, sz, mask); + sz = pci_size(l, sz, mask); - if (!size) { - dev_err(&dev->dev, "reg %x: invalid size " - "(l %#x sz %#x mask %#x); broken device?", - pos, l, sz, mask); + if (!sz) goto fail; - } res->start = l; - res->end = l + size; + res->end = l + sz; dev_printk(KERN_DEBUG, &dev->dev, "reg %x: %pR\n", pos, res); }