diff options
-rw-r--r-- | sys/dev/fdc/fdc.c | 13 | ||||
-rw-r--r-- | sys/i386/isa/fd.c | 13 | ||||
-rw-r--r-- | sys/isa/fd.c | 13 |
3 files changed, 36 insertions, 3 deletions
diff --git a/sys/dev/fdc/fdc.c b/sys/dev/fdc/fdc.c index f755ad5..f62c6ba 100644 --- a/sys/dev/fdc/fdc.c +++ b/sys/dev/fdc/fdc.c @@ -43,7 +43,7 @@ * SUCH DAMAGE. * * from: @(#)fd.c 7.4 (Berkeley) 5/25/91 - * $Id: fd.c,v 1.78 1996/01/27 02:33:35 bde Exp $ + * $Id: fd.c,v 1.79 1996/01/27 04:17:50 bde Exp $ * */ @@ -843,6 +843,17 @@ fd_turnoff(void *arg1) fd_p fd = fd_data + fdu; TRACE1("[fd%d: turnoff]", fdu); + + /* + * Don't turn off the motor yet if the drive is active. + * XXX shouldn't even schedule turnoff until drive is inactive + * and nothing is queued on it. + */ + if (fd->fdc->state != DEVIDLE && fd->fdc->fdu == fdu) { + timeout(fd_turnoff, arg1, 4 * hz); + return; + } + s = splbio(); fd->flags &= ~FD_MOTOR; set_motor(fd->fdc->fdcu, fd->fdsu, TURNOFF); diff --git a/sys/i386/isa/fd.c b/sys/i386/isa/fd.c index f755ad5..f62c6ba 100644 --- a/sys/i386/isa/fd.c +++ b/sys/i386/isa/fd.c @@ -43,7 +43,7 @@ * SUCH DAMAGE. * * from: @(#)fd.c 7.4 (Berkeley) 5/25/91 - * $Id: fd.c,v 1.78 1996/01/27 02:33:35 bde Exp $ + * $Id: fd.c,v 1.79 1996/01/27 04:17:50 bde Exp $ * */ @@ -843,6 +843,17 @@ fd_turnoff(void *arg1) fd_p fd = fd_data + fdu; TRACE1("[fd%d: turnoff]", fdu); + + /* + * Don't turn off the motor yet if the drive is active. + * XXX shouldn't even schedule turnoff until drive is inactive + * and nothing is queued on it. + */ + if (fd->fdc->state != DEVIDLE && fd->fdc->fdu == fdu) { + timeout(fd_turnoff, arg1, 4 * hz); + return; + } + s = splbio(); fd->flags &= ~FD_MOTOR; set_motor(fd->fdc->fdcu, fd->fdsu, TURNOFF); diff --git a/sys/isa/fd.c b/sys/isa/fd.c index f755ad5..f62c6ba 100644 --- a/sys/isa/fd.c +++ b/sys/isa/fd.c @@ -43,7 +43,7 @@ * SUCH DAMAGE. * * from: @(#)fd.c 7.4 (Berkeley) 5/25/91 - * $Id: fd.c,v 1.78 1996/01/27 02:33:35 bde Exp $ + * $Id: fd.c,v 1.79 1996/01/27 04:17:50 bde Exp $ * */ @@ -843,6 +843,17 @@ fd_turnoff(void *arg1) fd_p fd = fd_data + fdu; TRACE1("[fd%d: turnoff]", fdu); + + /* + * Don't turn off the motor yet if the drive is active. + * XXX shouldn't even schedule turnoff until drive is inactive + * and nothing is queued on it. + */ + if (fd->fdc->state != DEVIDLE && fd->fdc->fdu == fdu) { + timeout(fd_turnoff, arg1, 4 * hz); + return; + } + s = splbio(); fd->flags &= ~FD_MOTOR; set_motor(fd->fdc->fdcu, fd->fdsu, TURNOFF); |