The beginnings of a shell for launching user apps and taling over serial to a remote...
[akaros.git] / kern / src / workqueue.c
1 /*
2  * Copyright (c) 2009 The Regents of the University of California
3  * See LICENSE for details.
4  */
5
6 #include <arch/x86.h>
7 #include <arch/apic.h>
8 #include <arch/smp.h>
9 #include <workqueue.h>
10
11 /*
12  * TODO: actually use a queue, which will change some things all over.
13  */
14 void process_workqueue()
15 {
16         work_t work;
17         // copy the work in, since we may never return to this stack frame
18         work = per_cpu_info[lapic_get_id()].delayed_work;
19         if (work.func) {
20                 // TODO: possible race with this.  sort it out when we have a queue.
21                 // probably want a spin_lock_irqsave
22                 per_cpu_info[lapic_get_id()].delayed_work.func = 0;
23                 // We may never return from this (if it is env_run)
24                 work.func(work.data);
25         }
26 }