Merge branch 'master' into net-dev
[akaros.git] / kern / src / smp.c
1 #ifdef __DEPUTY__
2 #pragma nodeputy
3 #endif
4
5 #include <arch/arch.h>
6 #include <atomic.h>
7 #include <smp.h>
8
9 // tracks number of global waits on smp_calls, must be <= NUM_HANDLER_WRAPPERS
10 atomic_t outstanding_calls = 0;
11 per_cpu_info_t per_cpu_info[MAX_NUM_CPUS];
12
13 /* All non-zero cores call this at the end of their boot process.  They halt,
14  * and wake up when interrupted, do any work on their work queue, then halt
15  * when there is nothing to do.  
16  */
17 void smp_idle(void)
18 {
19         enable_irq();
20         while (1) {
21                 process_workqueue();
22                 // consider races with work added after we started leaving the last func
23                 cpu_halt();
24         }
25 }
26