summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--sys/src/9/pc/sdide.c14
1 files changed, 8 insertions, 6 deletions
diff --git a/sys/src/9/pc/sdide.c b/sys/src/9/pc/sdide.c
index ce7a391a3..892285ddf 100644
--- a/sys/src/9/pc/sdide.c
+++ b/sys/src/9/pc/sdide.c
@@ -1115,11 +1115,14 @@ atapktio0(Drive *drive, SDreq *r)
atadmastart(ctlr, drive->write);
iunlock(ctlr);
- if(iowait(drive, 30*1000, 0) <= 0){
- ilock(ctlr);
+ while(iowait(drive, 30*1000, 1) == 0)
+ ;
+
+ ilock(ctlr);
+ if(!ctlr->done){
+ rv = SDcheck;
ataabort(drive, 0);
- } else
- ilock(ctlr);
+ }
if(drive->error){
if(drive->pktdma)
atadmastop(ctlr);
@@ -1128,12 +1131,11 @@ atapktio0(Drive *drive, SDreq *r)
}
iunlock(ctlr);
- if(drive->status & Chk){
+ if(rv != SDcheck && drive->status & Chk){
rv = SDcheck;
if(drive->pktdma){
print("atapktio: disabling dma\n");
drive->dmactl = 0;
- rv = SDretry;
}
}
return rv;