ide-scsi: fix race in idescsi_transfer_pc()
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Tue, 15 Jul 2008 19:21:51 +0000 (21:21 +0200)
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Tue, 15 Jul 2008 19:21:51 +0000 (21:21 +0200)
Start DMA engine before sending content of packet command (otherwise
it is possible that IRQ will happen before DMA engine is started).

Cc: Borislav Petkov <petkovbb@gmail.com>
Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
drivers/scsi/ide-scsi.c

index 569ffde6d04701650cead81af3a02a84c7006794..2553ef4d5a9106fec5be81a4770897bc6b75747d 100644 (file)
@@ -494,13 +494,14 @@ static ide_startstop_t idescsi_transfer_pc(ide_drive_t *drive)
        /* Set the interrupt routine */
        ide_set_handler(drive, &idescsi_pc_intr, get_timeout(pc), idescsi_expiry);
 
-       /* Send the actual packet */
-       hwif->output_data(drive, NULL, scsi->pc->c, 12);
-
        if (pc->flags & PC_FLAG_DMA_OK) {
                pc->flags |= PC_FLAG_DMA_IN_PROGRESS;
                hwif->dma_ops->dma_start(drive);
        }
+
+       /* Send the actual packet */
+       hwif->output_data(drive, NULL, scsi->pc->c, 12);
+
        return ide_started;
 }