Messages in this thread Patch in this message | | | From | Bjorn Helgaas <> | Subject | Re: 2.6.8-rc4-mm1 doesn't boot | Date | Tue, 10 Aug 2004 16:46:57 -0600 |
| |
On Tuesday 10 August 2004 11:32 am, Adrian Bunk wrote: > On Tue, Aug 10, 2004 at 09:59:18AM -0600, Bjorn Helgaas wrote: > > On Tuesday 10 August 2004 9:09 am, Adrian Bunk wrote: > > > 2.6.8-rc3-mm1 boots fine on my computer. > > > 2.6.8-rc4-mm1 doesn't boot. > > > 2.6.8-rc4-mm1 with pci=routeirq boots.
I'm confused. I think the hang is related to IDE, but that code all looks OK. I expected to see a note about ACPI routing the IDE interrupt, something like this:
> SIS5513: IDE controller at PCI slot 0000:00:02.5 ACPI: PCI interrupt 0000:00:02.5[A] -> GSI XX (level, low) -> IRQ YY > SIS5513: chipset revision 0
I don't see a path where the IDE device could be found without that "ACPI: PCI interrupt ..." message being printed.
I also would have expected the hang to occur somewhere after the "SIS5513: IDE controller at PCI slot 0000:00:02.5" message, but apparently it happens *before* that.
Can you apply the following patch to 2.6.8-rc4-mm1 and collect all the kernel output when booting with "pci=routeirq"? It won't fix the problem, but maybe it will give me some ideas.
--- 2.6.8-rc4-mm1/arch/i386/pci/common.c.orig 2004-08-10 16:26:07.430867199 -0600 +++ 2.6.8-rc4-mm1/arch/i386/pci/common.c 2004-08-10 16:26:47.012897964 -0600 @@ -247,5 +247,6 @@ if ((err = pcibios_enable_resources(dev, mask)) < 0) return err; + printk("%s: enable IRQ for %s using 0x%p\n", __FUNCTION__, pci_name(dev), pcibios_enable_irq); return pcibios_enable_irq(dev); } --- 2.6.8-rc4-mm1/drivers/acpi/pci_irq.c.orig 2004-08-10 16:34:49.656446739 -0600 +++ 2.6.8-rc4-mm1/drivers/acpi/pci_irq.c 2004-08-10 16:35:33.155469643 -0600 @@ -338,13 +338,13 @@ pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin); if (!pin) { - ACPI_DEBUG_PRINT((ACPI_DB_INFO, "No interrupt pin configured for device %s\n", pci_name(dev))); + printk("No interrupt pin configured for device %s\n", pci_name(dev)); return_VALUE(0); } pin--; if (!dev->bus) { - ACPI_DEBUG_PRINT((ACPI_DB_ERROR, "Invalid (NULL) 'bus' field\n")); + printk("Invalid (NULL) 'bus' field for %s\n", pci_name(dev)); return_VALUE(-ENODEV); } --- 2.6.8-rc4-mm1/arch/i386/pci/irq.c.orig 2004-08-10 16:23:45.801962683 -0600 +++ 2.6.8-rc4-mm1/arch/i386/pci/irq.c 2004-08-10 16:42:52.194526765 -0600 @@ -837,7 +837,7 @@ struct pci_dev *dev = NULL; u8 pin; - DBG("PCI: IRQ fixup\n"); + printk("PCI: IRQ fixup\n"); while ((dev = pci_find_device(PCI_ANY_ID, PCI_ANY_ID, dev)) != NULL) { /* * If the BIOS has set an out of range IRQ number, just ignore it. @@ -953,10 +953,11 @@ static int __init pcibios_irq_init(void) { - DBG("PCI: IRQ init\n"); - if (pcibios_enable_irq || raw_pci_ops == NULL) + if (pcibios_enable_irq || raw_pci_ops == NULL) { + printk("PCI: IRQ init returning early\n"); return 0; + } dmi_check_system(pciirq_dmi_table); @@ -966,6 +967,7 @@ if (!pirq_table && (pci_probe & PCI_BIOS_IRQ_SCAN)) pirq_table = pcibios_get_irq_routing_table(); #endif + printk("PCI: IRQ init pirq_table 0x%p\n", pirq_table); if (pirq_table) { pirq_peer_trick(); pirq_find_router(&pirq_router); @@ -1004,6 +1006,7 @@ extern int interrupt_line_quirk; struct pci_dev *temp_dev; + printk("%s: PCI slot %s\n", __FUNCTION__, pci_name(dev)); pci_read_config_byte(dev, PCI_INTERRUPT_PIN, &pin); if (pin && !pcibios_lookup_irq(dev, 1) && !dev->irq) { char *msg; - To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html Please read the FAQ at http://www.tux.org/lkml/
| |