Messages in this thread Patches in this message |  | | Date | Sun, 31 Aug 2008 14:03:23 -0700 | | From | "Yinghai Lu" <> | | Subject | Re: Linux 2.6.27-rc5: System boot regression caused by commit a2bd7274b47124d2fc4dfdb8c0591f545ba749dd |
| |
On Sun, Aug 31, 2008 at 11:03 AM, Linus Torvalds <torvalds@linux-foundation.org> wrote: > > > On Sun, 31 Aug 2008, Yinghai Lu wrote: >> >> wonder how the probe could find out the size of is 1fff_ffff.. > > Heh. That's how PCI sizing works: you write all ones to the register, and > read back the result. The low bits won't change, and that indicates the > size. > > But if _none_ of the bits change, then that simply means that the size > will be calculated to be 0xffffffff-start. > > So the sizing will "work", it will just always report that the BAR covers > everything from start to the 4G limit.
how about
diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index cce2f4c..3b5269a 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -240,6 +240,11 @@ static int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type, pci_read_config_dword(dev, pos, &l); pci_write_config_dword(dev, pos, mask); pci_read_config_dword(dev, pos, &sz); + + /* sticky and non changable */ + if (sz == l) + goto fail; + pci_write_config_dword(dev, pos, l);
/*
Rafael,
can you check attach one to see if we still have warning ?
YH diff --git a/drivers/pci/probe.c b/drivers/pci/probe.c index cce2f4c..3b5269a 100644 --- a/drivers/pci/probe.c +++ b/drivers/pci/probe.c @@ -240,6 +240,11 @@ static int __pci_read_base(struct pci_dev *dev, enum pci_bar_type type, pci_read_config_dword(dev, pos, &l); pci_write_config_dword(dev, pos, mask); pci_read_config_dword(dev, pos, &sz); + + /* sticky and non changable */ + if (sz == l) + goto fail; + pci_write_config_dword(dev, pos, l); /* |  |