• Robert Hancock's avatar
    sata_nv: don't rely on NV_INT_DEV indication with ADMA · f740d168
    Robert Hancock authored
    Several people reported issues with certain drive commands timing out on
    sata_nv controllers running in ADMA mode. The commands in question were
    non-DMA-mapped commands, usually FLUSH CACHE or FLUSH CACHE EXT.
    
     From experimentation it appears that the NV_INT_DEV indication isn't
    always set when a legitimate command completion interrupt is received on
    a legacy-mode command, at least not on these controllers in ADMA mode.
    When a command is pending on the port, force the flag on always in the
    irq_stat value before calling nv_host_intr so that the drive busy state
    is always checked by ata_host_intr.
    
    This also fixes some questionable code in nv_host_intr which called
    ata_check_status when a command was pending and ata_host_intr returned
    "unhandled". If the device interrupted at just the wrong time this could
    cause interrupts to be lost.
    Signed-off-by: default avatarRobert Hancock <hancockr@shaw.ca>
    Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
    f740d168
sata_nv.c 42.7 KB