Messages in this thread Patch in this message | | | Date | Sun, 25 Sep 2005 09:43:21 -0700 | From | David Brownell <> | Subject | Re: 2.6.14-rc2-ge484585e: kexec into same kernel: irq 11 nobody cared; but ehci_hcd should |
| |
> when i kexec into the same kernel i get this error message: > > [17179593.108000] ACPI: PCI Interrupt Link [LNKD] enabled at IRQ 11 > [17179593.108000] PCI: setting IRQ 11 as level-triggered > [17179593.108000] ACPI: PCI Interrupt 0000:00:10.3[D] -> Link [LNKD] -> GSI 11 (level, low) -> IRQ 11 > [17179593.108000] ehci_hcd 0000:00:10.3: EHCI Host Controller > [17179593.124000] ehci_hcd 0000:00:10.3: new USB bus registered, assigned bus number 4 > [17179593.936000] irq 11: nobody cared (try booting with the "irqpoll" option) > ... > > any ideas?
This patch (compile-tested only) ought to do it. Alternatively, try the "usb-handoff" kernel parameter; it happens that will also forcibly disable the IRQs.
(And notice how far that "usb-handoff" code has gotten out of sync with the HCDs ... for EHCI the bug is that only that "pci quirks" clone of the handoff code disables the IRQs, but for OHCI the bug is the other way around: only the HCD disables them. Bleech.)
- Dave
This tweaks the EHCI reboot notifier to also halt the EHCI controller, and makes that halt code force IRQs off. Both should always have been done.
Signed-off-by: David Brownell <dbrownell@users.sourceforge.net>
--- g26.orig/drivers/usb/host/ehci-hcd.c 2005-09-23 10:40:21.000000000 -0700 +++ g26/drivers/usb/host/ehci-hcd.c 2005-09-25 09:17:01.000000000 -0700 @@ -182,6 +182,9 @@ { u32 temp = readl (&ehci->regs->status); + /* disable any irqs left enabled by previous code */ + writel (0, &ehci->regs->intr_enable); + if ((temp & STS_HALT) != 0) return 0; @@ -297,12 +300,17 @@ spin_unlock_irqrestore (&ehci->lock, flags); } +/* Reboot notifiers kick in for silicon on any bus (not just pci, etc). + * This forcibly disables dma and IRQs, helping kexec and other cases + * where the next system software may expect clean state. + */ static int ehci_reboot (struct notifier_block *self, unsigned long code, void *null) { struct ehci_hcd *ehci; ehci = container_of (self, struct ehci_hcd, reboot_notifier); + (void) ehci_halt (ehci); /* make BIOS/etc use companion controller during reboot */ writel (0, &ehci->regs->configured_flag); - 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/
| |