Messages in this thread | | | From | Paul Ashton <> | Subject | Shared interrupt (lack of) handling | Date | Thu, 02 Sep 1999 13:28:26 +0100 |
| |
When a device driver calls request_irq() with the SA_SHIRQ flag set, it is responsible for determining whether its device generated the interrupt, which the kernel dispatches to every driver registerd for that interrupt. I've just been running the maestro 2e driver in 2.3.16 and noticed that the USB UHCI driver is attempting to process every interrupt without determining whether it really is a USB one or not. In an attempt to fix it I searched many other drivers and couldn't find many that do.
The fix for uhci.c appears to be to modify drivers/usb/uhci.c:uhci_interrupt()
/* * Read the interrupt status, and write it back to clear the * interrupt cause */ status = inw(io_addr + USBSTS); + if (!status) /* interrupt not from UHCI, other shared device */ + return; outw(status, io_addr + USBSTS);
rest of processing
As, according to the UHCI specs, USBSTS is non-zero if any interrupt was generated.
How come I can find so little evidence of this type of interrupt handling for shared interrupts?
Paul
- To unsubscribe from this list: send the line "unsubscribe linux-kernel" in the body of a message to majordomo@vger.rutgers.edu Please read the FAQ at http://www.tux.org/lkml/
| |