From: Bjorn H. <bjo...@hp...> - 2004-01-21 20:18:22
|
On Wednesday 21 January 2004 9:39 am, Bjorn Helgaas wrote: > There's also something fishy in this area that neither the -mm5 > code nor my patch addresses. In the acpi_os_install_interrupt_handler() > fragment above, we do the "acpi interrupt->irq" conversion and save > the resulting irq in acpi_irq_irq. The only place acpi_irq_irq is > used is in acpi_os_terminate(), where it is passed to acpi_os_remove_ > interupt_handler(), where we apply the "acpi interrupt->irq" conversion > AGAIN. This seems wrong. OK, I think I understand what's wrong there. acpi_irq_irq needs to be the PRE-CONVERSION interrupt, like this: acpi_status acpi_os_install_interrupt_handler(u32 interrupt, OSD_HANDLER handler, void *context) { unsigned int irq; interrupt = acpi_fadt.sci_int; irq = acpi_irq_to_vector(interrupt); ... acpi_irq_irq = interrupt; ... if (request_irq(irq, ...)) Then acpi_os_terminate() will pass the pre-conversion value to acpi_os_remove_interrupt_handler(), which will apply acpi_irq_to_vector() and everything will match. I'll make a note to clean this up after the previous issues in the area are straightened out. Bjorn |