Exemple #1
0
/*      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;
}