patch-2.1.127 linux/drivers/char/ftape/lowlevel/fdc-io.c
Next file: linux/drivers/char/ftape/lowlevel/ftape-io.c
Previous file: linux/drivers/char/esp.c
Back to the patch index
Back to the overall index
- Lines: 39
- Date:
Wed Nov 4 09:56:37 1998
- Orig file:
v2.1.126/linux/drivers/char/ftape/lowlevel/fdc-io.c
- Orig date:
Sun Jun 7 11:16:29 1998
diff -u --recursive --new-file v2.1.126/linux/drivers/char/ftape/lowlevel/fdc-io.c linux/drivers/char/ftape/lowlevel/fdc-io.c
@@ -389,6 +389,7 @@
sigset_t old_sigmask;
static int resetting = 0;
TRACE_FUN(ft_t_fdc_dma);
+ long timeout;
#if LINUX_VERSION_CODE >= KERNEL_VER(2,0,16)
if (waitqueue_active(&ftape_wait_intr)) {
@@ -400,8 +401,7 @@
}
#endif
/* timeout time will be up to USPT microseconds too long ! */
- current->timeout = jiffies + (1000 * time + FT_USPT - 1) / FT_USPT;
- current->state = TASK_INTERRUPTIBLE;
+ timeout = (1000 * time + FT_USPT - 1) / FT_USPT;
spin_lock_irq(¤t->sigmask_lock);
old_sigmask = current->blocked;
@@ -409,9 +409,10 @@
recalc_sigpending(current);
spin_unlock_irq(¤t->sigmask_lock);
+ current->state = TASK_INTERRUPTIBLE;
add_wait_queue(&ftape_wait_intr, &wait);
- while (!ft_interrupt_seen && current->state != TASK_RUNNING) {
- schedule(); /* sets TASK_RUNNING on timeout */
+ while (!ft_interrupt_seen && (current->state == TASK_INTERRUPTIBLE)) {
+ timeout = schedule_timeout(timeout);
}
spin_lock_irq(¤t->sigmask_lock);
@@ -433,7 +434,6 @@
*/
current->state = TASK_RUNNING;
if (ft_interrupt_seen) { /* woken up by interrupt */
- current->timeout = 0; /* interrupt hasn't cleared this */
ft_interrupt_seen = 0;
TRACE_EXIT 0;
}
FUNET's LINUX-ADM group, linux-adm@nic.funet.fi
TCL-scripts by Sam Shen, slshen@lbl.gov