• T
    [PATCH] libata: implement ata_poll_qc_complete and use it in polling functions · 40e8c82c
    Tejun Heo 提交于
    [PATCH libata-dev-2.6:upstream] implement ata_poll_qc_complete and use it in polling functions
    
     Previously, libata polling functions turned irq back on and completed
    qc commands without holding host lock.  This creates a race condition
    between the polling task and interrupts from other ports on the same
    host set or spurious interrupt from itself.
    
     This patch implements ata_poll_qc_complete which enables irq and
    completes qc atomically and convert all polling functions.
    
     Note: atapi_packet_task() didn't use to turn irq back on or clear
    ATA_FLAG_NOINTR on error exits.  This patch makes it use
    ata_poll_qc_complete which does both.
    
     Note: With this change, ALL invocations of ata_qc_complete() are now
    done under host_set lock.
    Signed-off-by: NTejun Heo <htejun@gmail.com>
    Signed-off-by: NJeff Garzik <jgarzik@pobox.com>
    40e8c82c
libata-core.c 108.5 KB