• Jeff Garzik's avatar
    [libata] PCI IDE command-end/irq-acknowledge cleanup · 5ae20cc7
    Jeff Garzik authored
    Restruct default irq handler (used for many PCI IDE-like SATA
    controllers) to obtain device status and acknowledge interrupts
    a bit differently.
    
    In an attempt to better attack the "ich5 screaming interrupt" problem,
    acknowledge and clear the device's INTRQ by reading the Status register
    _before_ ack'ing the controller's irq status.  This is a deviation
    from how the Linux IDE driver acknowledges interrupts, but it may
    be the best method, since the ICH5 appears to continue to assert
    the interrupt bit in the BMDMA until the device INTRQ line is cleared.
    
    Of course, SATA has no INTRQ line per se, so ICH5 essentially has
    new interrupt behavior not seen before in the PCI IDE world, while
    pretending that it's compatible with PCI IDE.  Sigh.
    
    This change affects all SATA controllers (for which there are libata
    drivers) except for sata_promise and sata_sx4.
    5ae20cc7
libata-core.c 77.5 KB