/* Delay (msec) routine. */ void ftape_sleep(unsigned int time) { TRACE_FUN(ft_t_any); time *= 1000; /* msecs -> usecs */ if (time < FT_USPT) { /* Time too small for scheduler, do a busy wait ! */ ftape_udelay(time); } else { long timeout; unsigned long flags; unsigned int ticks = (time + FT_USPT - 1) / FT_USPT; TRACE(ft_t_any, "%d msec, %d ticks", time/1000, ticks); timeout = ticks; save_flags(flags); sti(); set_current_state(TASK_INTERRUPTIBLE); do { /* Mmm. Isn't current->blocked == 0xffffffff ? */ if (signal_pending(current)) { TRACE(ft_t_err, "awoken by non-blocked signal :-("); break; /* exit on signal */ } while (current->state != TASK_RUNNING) { timeout = schedule_timeout(timeout); } } while (timeout); restore_flags(flags); } TRACE_EXIT; }
/* Delay (msec) routine. */ void ftape_sleep(unsigned int time) { TRACE_FUN(ft_t_any); time *= 1000; /* msecs -> usecs */ if (time < FT_USPT) { /* Time too small for scheduler, do a busy wait ! */ ftape_udelay(time); } else { long timeout; unsigned long flags; unsigned int ticks = (time + FT_USPT - 1) / FT_USPT; TRACE(ft_t_any, "%d msec, %d ticks", time/1000, ticks); timeout = ticks; save_flags(flags); sti(); msleep_interruptible(jiffies_to_msecs(timeout)); /* Mmm. Isn't current->blocked == 0xffffffff ? */ if (signal_pending(current)) { TRACE(ft_t_err, "awoken by non-blocked signal :-("); } restore_flags(flags); } TRACE_EXIT; }