kthread_usleep()
[akaros.git] / kern / src / taskqueue.c
1 /* Copyright (c) 2015 Google Inc
2  * Barret Rhoden <brho@cs.berkeley.edu>
3  * See LICENSE for details.
4  *
5  * Hacked BSD taskqueues.  In lieu of actually running a kproc or something that
6  * sleeps on a queue of tasks, we'll just blast out a kmsg.  We can always
7  * change the implementation if we need more control. */
8
9 #include <taskqueue.h>
10 #include <trap.h>
11
12 /* BSD Taskqueue wrappers. */
13 static void __tq_wrapper(uint32_t srcid, long a0, long a1, long a2)
14 {
15         task_fn_t tq_fn = (task_fn_t)a0;
16         void *tq_arg = (void*)a1;
17         tq_fn(tq_arg, 0);
18 }
19
20 int taskqueue_enqueue(struct taskqueue *queue, struct task *task)
21 {
22         send_kernel_message(core_id(), __tq_wrapper, (long)task->ta_func,
23                             (long)task->ta_context, 0, KMSG_ROUTINE);
24         return 0;
25 }