X-Git-Url: https://git.whamcloud.com/?p=fs%2Flustre-release.git;a=blobdiff_plain;f=libcfs%2Flibcfs%2Flinux%2Flinux-prim.c;h=2f1eec14020600acc54971595ad9c58f685d0708;hp=27d95e937d2e6508b41c69473a9164ea08f4b50a;hb=a3850a044ef7cc2658b355672338b9865ed59fe4;hpb=d38d331fa6525ffc02665f48fa52f94626360631 diff --git a/libcfs/libcfs/linux/linux-prim.c b/libcfs/libcfs/linux/linux-prim.c index 27d95e9..2f1eec1 100644 --- a/libcfs/libcfs/linux/linux-prim.c +++ b/libcfs/libcfs/linux/linux-prim.c @@ -46,207 +46,47 @@ #include #endif -#define LINUX_WAITQ(w) ((wait_queue_t *) w) -#define LINUX_WAITQ_HEAD(w) ((wait_queue_head_t *) w) - -void -cfs_waitq_init(cfs_waitq_t *waitq) -{ - init_waitqueue_head(LINUX_WAITQ_HEAD(waitq)); -} -EXPORT_SYMBOL(cfs_waitq_init); - -void -cfs_waitlink_init(cfs_waitlink_t *link) +void cfs_init_timer(struct timer_list *t) { - init_waitqueue_entry(LINUX_WAITQ(link), current); -} -EXPORT_SYMBOL(cfs_waitlink_init); - -void -cfs_waitq_add(cfs_waitq_t *waitq, cfs_waitlink_t *link) -{ - add_wait_queue(LINUX_WAITQ_HEAD(waitq), LINUX_WAITQ(link)); -} -EXPORT_SYMBOL(cfs_waitq_add); - -#ifndef HAVE___ADD_WAIT_QUEUE_EXCLUSIVE - -static inline void __add_wait_queue_exclusive(wait_queue_head_t *q, - wait_queue_t *wait) -{ - wait->flags |= WQ_FLAG_EXCLUSIVE; - __add_wait_queue(q, wait); -} - -#endif /* HAVE___ADD_WAIT_QUEUE_EXCLUSIVE */ - -void -cfs_waitq_add_exclusive(cfs_waitq_t *waitq, - cfs_waitlink_t *link) -{ - add_wait_queue_exclusive(LINUX_WAITQ_HEAD(waitq), LINUX_WAITQ(link)); -} -EXPORT_SYMBOL(cfs_waitq_add_exclusive); - -/** - * wait_queue_t of Linux (version < 2.6.34) is a FIFO list for exclusively - * waiting threads, which is not always desirable because all threads will - * be waken up again and again, even user only needs a few of them to be - * active most time. This is not good for performance because cache can - * be polluted by different threads. - * - * LIFO list can resolve this problem because we always wakeup the most - * recent active thread by default. - * - * NB: please don't call non-exclusive & exclusive wait on the same - * waitq if cfs_waitq_add_exclusive_head is used. - */ -void -cfs_waitq_add_exclusive_head(cfs_waitq_t *waitq, cfs_waitlink_t *link) -{ - unsigned long flags; - - spin_lock_irqsave(&LINUX_WAITQ_HEAD(waitq)->lock, flags); - __add_wait_queue_exclusive(LINUX_WAITQ_HEAD(waitq), LINUX_WAITQ(link)); - spin_unlock_irqrestore(&LINUX_WAITQ_HEAD(waitq)->lock, flags); -} -EXPORT_SYMBOL(cfs_waitq_add_exclusive_head); - -void -cfs_waitq_del(cfs_waitq_t *waitq, cfs_waitlink_t *link) -{ - remove_wait_queue(LINUX_WAITQ_HEAD(waitq), LINUX_WAITQ(link)); -} -EXPORT_SYMBOL(cfs_waitq_del); - -int -cfs_waitq_active(cfs_waitq_t *waitq) -{ - return waitqueue_active(LINUX_WAITQ_HEAD(waitq)); -} -EXPORT_SYMBOL(cfs_waitq_active); - -void -cfs_waitq_signal(cfs_waitq_t *waitq) -{ - wake_up(LINUX_WAITQ_HEAD(waitq)); -} -EXPORT_SYMBOL(cfs_waitq_signal); - -void -cfs_waitq_signal_nr(cfs_waitq_t *waitq, int nr) -{ - wake_up_nr(LINUX_WAITQ_HEAD(waitq), nr); -} -EXPORT_SYMBOL(cfs_waitq_signal_nr); - -void -cfs_waitq_broadcast(cfs_waitq_t *waitq) -{ - wake_up_all(LINUX_WAITQ_HEAD(waitq)); -} -EXPORT_SYMBOL(cfs_waitq_broadcast); - -void -cfs_waitq_wait(cfs_waitlink_t *link, cfs_task_state_t state) -{ - schedule(); -} -EXPORT_SYMBOL(cfs_waitq_wait); - -int64_t -cfs_waitq_timedwait(cfs_waitlink_t *link, cfs_task_state_t state, - int64_t timeout) -{ - return schedule_timeout(timeout); -} -EXPORT_SYMBOL(cfs_waitq_timedwait); - -void -cfs_schedule_timeout_and_set_state(cfs_task_state_t state, int64_t timeout) -{ - set_current_state(state); - schedule_timeout(timeout); -} -EXPORT_SYMBOL(cfs_schedule_timeout_and_set_state); - -void -cfs_schedule_timeout(int64_t timeout) -{ - schedule_timeout(timeout); -} -EXPORT_SYMBOL(cfs_schedule_timeout); - -void -cfs_schedule(void) -{ - schedule(); -} -EXPORT_SYMBOL(cfs_schedule); - -/* deschedule for a bit... */ -void -cfs_pause(cfs_duration_t ticks) -{ - set_current_state(TASK_UNINTERRUPTIBLE); - schedule_timeout(ticks); -} -EXPORT_SYMBOL(cfs_pause); - -int cfs_need_resched(void) -{ - return need_resched(); -} -EXPORT_SYMBOL(cfs_need_resched); - -void cfs_cond_resched(void) -{ - cond_resched(); -} -EXPORT_SYMBOL(cfs_cond_resched); - -void cfs_init_timer(cfs_timer_t *t) -{ - init_timer(t); + init_timer(t); } EXPORT_SYMBOL(cfs_init_timer); -void cfs_timer_init(cfs_timer_t *t, cfs_timer_func_t *func, void *arg) +void cfs_timer_init(struct timer_list *t, cfs_timer_func_t *func, void *arg) { - init_timer(t); - t->function = func; - t->data = (unsigned long)arg; + init_timer(t); + t->function = func; + t->data = (unsigned long)arg; } EXPORT_SYMBOL(cfs_timer_init); -void cfs_timer_done(cfs_timer_t *t) +void cfs_timer_done(struct timer_list *t) { - return; + return; } EXPORT_SYMBOL(cfs_timer_done); -void cfs_timer_arm(cfs_timer_t *t, cfs_time_t deadline) +void cfs_timer_arm(struct timer_list *t, cfs_time_t deadline) { - mod_timer(t, deadline); + mod_timer(t, deadline); } EXPORT_SYMBOL(cfs_timer_arm); -void cfs_timer_disarm(cfs_timer_t *t) +void cfs_timer_disarm(struct timer_list *t) { - del_timer(t); + del_timer(t); } EXPORT_SYMBOL(cfs_timer_disarm); -int cfs_timer_is_armed(cfs_timer_t *t) +int cfs_timer_is_armed(struct timer_list *t) { - return timer_pending(t); + return timer_pending(t); } EXPORT_SYMBOL(cfs_timer_is_armed); -cfs_time_t cfs_timer_deadline(cfs_timer_t *t) +cfs_time_t cfs_timer_deadline(struct timer_list *t) { - return t->expires; + return t->expires; } EXPORT_SYMBOL(cfs_timer_deadline); @@ -301,7 +141,7 @@ sigset_t cfs_block_sigsinv(unsigned long sigs) } void -cfs_restore_sigs (cfs_sigset_t old) +cfs_restore_sigs(sigset_t old) { unsigned long flags;