Whamcloud - gitweb
Land b_head_libcfs onto HEAD (20080805_1722)
[fs/lustre-release.git] / libcfs / libcfs / linux / linux-prim.c
index 6bee634..2405d82 100644 (file)
 #endif
 #include <linux/module.h>
 #include <linux/kernel.h>
+#include <linux/sched.h>
+
 #include <libcfs/libcfs.h>
 
 #if defined(CONFIG_KGDB)
 #include <asm/kgdb.h>
 #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)
+{
+        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);
+
+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);
+
+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(cfs_task_state_t state, int64_t timeout)
+{
+        set_current_state(state);
+        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);
+
+void cfs_init_timer(cfs_timer_t *t)
+{
+        init_timer(t);
+}
+EXPORT_SYMBOL(cfs_init_timer);
+
+void cfs_timer_init(cfs_timer_t *t, cfs_timer_func_t *func, void *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)
+{
+        return;
+}
+EXPORT_SYMBOL(cfs_timer_done);
+
+void cfs_timer_arm(cfs_timer_t *t, cfs_time_t deadline)
+{
+        mod_timer(t, deadline);
+}
+EXPORT_SYMBOL(cfs_timer_arm);
+
+void cfs_timer_disarm(cfs_timer_t *t)
+{
+        del_timer(t);
+}
+EXPORT_SYMBOL(cfs_timer_disarm);
+
+int  cfs_timer_is_armed(cfs_timer_t *t)
+{
+        return timer_pending(t);
+}
+EXPORT_SYMBOL(cfs_timer_is_armed);
+
+cfs_time_t cfs_timer_deadline(cfs_timer_t *t)
+{
+        return t->expires;
+}
+EXPORT_SYMBOL(cfs_timer_deadline);
+
 void cfs_enter_debugger(void)
 {
 #if defined(CONFIG_KGDB)