void schedule_usleep(unsigned long us) { struct fast_timer t; wait_queue_head_t sleep_wait; init_waitqueue_head(&sleep_wait); D1(printk("schedule_usleep(%d)\n", us)); start_one_shot_timer(&t, wake_up_func, (unsigned long)&sleep_wait, us, "usleep"); wait_event(sleep_wait, !fast_timer_pending(&t)); D1(printk("done schedule_usleep(%d)\n", us)); }
void schedule_usleep(unsigned long us) { struct fast_timer t; wait_queue_head_t sleep_wait; init_waitqueue_head(&sleep_wait); D1(printk("schedule_usleep(%d)\n", us)); start_one_shot_timer(&t, wake_up_func, (unsigned long)&sleep_wait, us, "usleep"); /* Uninterruptible sleep on the fast timer. (The condition is * somewhat redundant since the timer is what wakes us up.) */ wait_event(sleep_wait, !fast_timer_pending(&t)); D1(printk("done schedule_usleep(%d)\n", us)); }
static inline int detach_fast_timer (struct fast_timer *t) { struct fast_timer *next, *prev; if (!fast_timer_pending(t)) return 0; next = t->next; prev = t->prev; if (next) next->prev = prev; if (prev) prev->next = next; else fast_timer_list = next; fast_timers_deleted++; return 1; }