From: David Brownell > 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) > ... > 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 Signed-off-by: Andrew Morton --- drivers/usb/host/ehci-hcd.c | 8 ++++++++ 1 files changed, 8 insertions(+) diff -puN drivers/usb/host/ehci-hcd.c~ehci-kexec-reboot-fix drivers/usb/host/ehci-hcd.c --- devel/drivers/usb/host/ehci-hcd.c~ehci-kexec-reboot-fix 2005-09-25 15:36:14.000000000 -0700 +++ devel-akpm/drivers/usb/host/ehci-hcd.c 2005-09-25 15:36:14.000000000 -0700 @@ -182,6 +182,9 @@ static int ehci_halt (struct ehci_hcd *e { 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; @@ -335,12 +338,17 @@ static int bios_handoff (struct ehci_hcd #endif +/* 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); _