Re: Linux 2.6.27-rc5: System boot regression caused by commit a2bd7274b47124d2fc4dfdb8c0591f545ba749dd

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Sun, Aug 31, 2008 at 11:03 AM, Linus Torvalds
<torvalds@xxxxxxxxxxxxxxxxxxxx> 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);
 
 	/*

[Index of Archives]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux