summaryrefslogtreecommitdiff
path: root/drivers
diff options
context:
space:
mode:
authorBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-07-15 21:22:03 +0200
committerBartlomiej Zolnierkiewicz <bzolnier@gmail.com>2008-07-15 21:22:03 +0200
commit55d82bfa6763d6761670d740ab3bac2f1c042d87 (patch)
treedd5e13c6c4801a4853ee0ce5f11469ab05ba6c31 /drivers
parentcdca5c1f3b769eb2cdfc9cadc254cb74ba73c7d6 (diff)
downloadlinux-3.10-55d82bfa6763d6761670d740ab3bac2f1c042d87.tar.gz
linux-3.10-55d82bfa6763d6761670d740ab3bac2f1c042d87.tar.bz2
linux-3.10-55d82bfa6763d6761670d740ab3bac2f1c042d87.zip
ide-{floppy,scsi}: read Status Register before stopping DMA engine
Read Status Register before stopping DMA engine to match ide-tape device driver - it should be safe and shouldn't affect anything. This is a preparation for adding generic ide_pc_intr() helper. Cc: Borislav Petkov <petkovbb@gmail.com> Signed-off-by: Bartlomiej Zolnierkiewicz <bzolnier@gmail.com>
Diffstat (limited to 'drivers')
-rw-r--r--drivers/ide/ide-floppy.c6
-rw-r--r--drivers/scsi/ide-scsi.c7
2 files changed, 7 insertions, 6 deletions
diff --git a/drivers/ide/ide-floppy.c b/drivers/ide/ide-floppy.c
index 502ef9dcc5b..70aef97fb8b 100644
--- a/drivers/ide/ide-floppy.c
+++ b/drivers/ide/ide-floppy.c
@@ -399,6 +399,9 @@ static ide_startstop_t idefloppy_pc_intr(ide_drive_t *drive)
debug_log("Enter %s - interrupt handler\n", __func__);
+ /* Clear the interrupt */
+ stat = ide_read_status(drive);
+
if (pc->flags & PC_FLAG_DMA_IN_PROGRESS) {
dma_error = hwif->dma_ops->dma_end(drive);
if (dma_error) {
@@ -412,9 +415,6 @@ static ide_startstop_t idefloppy_pc_intr(ide_drive_t *drive)
debug_log("%s: DMA finished\n", drive->name);
}
- /* Clear the interrupt */
- stat = ide_read_status(drive);
-
/* No more interrupts */
if ((stat & DRQ_STAT) == 0) {
debug_log("Packet command completed, %d bytes transferred\n",
diff --git a/drivers/scsi/ide-scsi.c b/drivers/scsi/ide-scsi.c
index ec9a5de2e75..ada733ca672 100644
--- a/drivers/scsi/ide-scsi.c
+++ b/drivers/scsi/ide-scsi.c
@@ -370,6 +370,10 @@ static ide_startstop_t idescsi_pc_intr (ide_drive_t *drive)
pc->callback(drive);
return ide_stopped;
}
+
+ /* Clear the interrupt */
+ stat = ide_read_status(drive);
+
if (pc->flags & PC_FLAG_DMA_IN_PROGRESS) {
if (hwif->dma_ops->dma_end(drive))
pc->flags |= PC_FLAG_DMA_ERROR;
@@ -378,9 +382,6 @@ static ide_startstop_t idescsi_pc_intr (ide_drive_t *drive)
debug_log("%s: DMA finished\n", drive->name);
}
- /* Clear the interrupt */
- stat = ide_read_status(drive);
-
if ((stat & DRQ_STAT) == 0) {
/* No more interrupts */
debug_log("Packet command completed, %d bytes transferred\n",