diff options
| -rw-r--r-- | sys/src/9/pc/sdide.c | 14 |
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; |
