Messages in this thread Patches in this message | | | Date | Fri, 11 Apr 2008 13:26:06 -0700 | From | "Yinghai Lu" <> | Subject | Re: x86 git tree broken (bisected) |
| |
On Fri, Apr 11, 2008 at 12:26 PM, Rafael J. Wysocki <rjw@sisk.pl> wrote: > On Friday, 11 of April 2008, Rafael J. Wysocki wrote: > > On Thursday, 10 of April 2008, Ingo Molnar wrote: > > > > > > * Ingo Molnar <mingo@elte.hu> wrote: > > > > > > > > > > First, the X server doesn't want to start (it says it couldn't > > > > > > > mmap the framebuffer). > > > > > > > > > > > > could you send your .config? > > > > > > > > > > Attached. > > > > > > > > could you disable this option: > > > > > > > > CONFIG_NONPROMISC_DEVMEM=y > > > > > > > > does it help with the X problem? > > > > That didn't help. > > > > > btw., Xorg works fine here on a comparable AMD system - but i use a > > > rather new distro (Fedora 8) which has Xorg 7.2. > > > > My system is an OpenSUSE 10.3 and it has Xorg 7.2 as well. > > > > I think the problem is somehow related to the Radeon. > > The bisection turned up commit ea1441bdf53692c3dc1fd2658addcf1205629661 > "x86: use bus conf in NB conf fun1 to get bus range on, on 64-bit" as the one > causing problems. > > Unfortunately, I can't revert cleanly it, because there are two more commits > depending on it in a highly nontrivial fashion, so I have reverted all three > commits > > a365998cd2cecfb827469dbd57c29602c106cb83 > 44f7f90fbe7a3a99aab082f765346514b7b5c705 > ea1441bdf53692c3dc1fd2658addcf1205629661 > > and X starts again. Also, suspend to RAM works from under X.
please keep the three patches and applied the two attached debug patches.
i wonder if there is some io allocation overlapping with your system.
YH Index: linux-2.6/drivers/pci/setup-bus.c =================================================================== --- linux-2.6.orig/drivers/pci/setup-bus.c +++ linux-2.6/drivers/pci/setup-bus.c @@ -536,6 +536,36 @@ void __ref pci_bus_assign_resources(stru } EXPORT_SYMBOL(pci_bus_assign_resources); +static void pci_bus_dump_res(struct pci_bus *bus) +{ + int i; + + for (i = 0; i < PCI_BUS_NUM_RESOURCES; i++) { + struct resource *res = bus->resource[i]; + if (!res) + continue; + + printk(KERN_INFO "bus: %02x index %x %s: [%llx, %llx]\n", bus->number, i, (res->flags & IORESOURCE_IO)? "io port":"mmio", res->start, res->end); + } +} + +static void pci_bus_dump_resources(struct pci_bus *bus) +{ + struct pci_bus *b; + struct pci_dev *dev; + + + pci_bus_dump_res(bus); + + list_for_each_entry(dev, &bus->devices, bus_list) { + b = dev->subordinate; + if (!b) + continue; + + pci_bus_dump_resources(b); + } +} + void __init pci_assign_unassigned_resources(void) { @@ -551,4 +581,9 @@ pci_assign_unassigned_resources(void) pci_bus_assign_resources(bus); pci_enable_bridges(bus); } + + /* dump the resource on buses */ + list_for_each_entry(bus, &pci_root_buses, node) { + pci_bus_dump_resources(bus); + } }Index: linux-2.6/drivers/pci/probe.c =================================================================== --- linux-2.6.orig/drivers/pci/probe.c +++ linux-2.6/drivers/pci/probe.c @@ -246,6 +246,7 @@ static void pci_read_bases(struct pci_de } res->start = l64 & PCI_BASE_ADDRESS_MEM_MASK; res->end = res->start + sz64; + printk(KERN_INFO "PCI: %s reg %x 64bit mmio: [%llx, %llx]\n", pci_name(dev), reg, res->start, res->end); #else if (sz64 > 0x100000000ULL) { printk(KERN_ERR "PCI: Unable to handle 64-bit " @@ -261,6 +262,8 @@ static void pci_read_bases(struct pci_de res->end = sz; } #endif + } else { + printk(KERN_INFO "PCI: %s reg %x %s: [%llx, %llx]\n", pci_name(dev), reg, (res->flags & IORESOURCE_IO)? "io port":"32bit mmio", res->start, res->end); } } if (rom) { @@ -327,6 +330,7 @@ void __devinit pci_read_bridge_bases(str res->start = base; if (!res->end) res->end = limit + 0xfff; + printk(KERN_INFO "PCI: bridge %s io port: [%llx, %llx]\n", pci_name(dev), res->start, res->end); } res = child->resource[1]; @@ -338,6 +342,7 @@ void __devinit pci_read_bridge_bases(str res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM; res->start = base; res->end = limit + 0xfffff; + printk(KERN_INFO "PCI: bridge %s 32bit mmio: [%llx, %llx]\n", pci_name(dev), res->start, res->end); } res = child->resource[2]; @@ -372,6 +377,7 @@ void __devinit pci_read_bridge_bases(str res->flags = (mem_base_lo & PCI_MEMORY_RANGE_TYPE_MASK) | IORESOURCE_MEM | IORESOURCE_PREFETCH; res->start = base; res->end = limit + 0xfffff; + printk(KERN_INFO "PCI: bridge %s %sbit mmio pref: [%llx, %llx]\n", pci_name(dev), (res->flags & PCI_PREF_RANGE_TYPE_64)?"64":"32",res->start, res->end); } } | |