• Mikael Pettersson's avatar
    sata_promise: add ATA engine reset to reset ops · cadef677
    Mikael Pettersson authored
    Promise ATA engines need to be reset when errors occur.
    That's currently done for errors detected by sata_promise itself,
    but it's not done for errors like timeouts detected outside of
    the low-level driver.
    
    The effect of this omission is that a timeout tends to result
    in a sequence of failed COMRESETs after which libata EH gives
    up and disables the port. At that point the port's ATA engine
    hangs and even reloading the driver will not resume it.
    
    To fix this, make sata_promise override ->hardreset on SATA
    ports with code which calls pdc_reset_port() on the port in
    question before calling libata's hardreset. PATA ports don't
    use ->hardreset, so for those we override ->softreset instead.
    Signed-off-by: default avatarMikael Pettersson <mikpe@it.uu.se>
    Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
    cadef677
sata_promise.c 30.7 KB