Andrew's port to sparc
[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
12 per_cpu_info_t per_cpu_info[MAX_NUM_CPUS];
13
14 /* All non-zero cores call this at the end of their boot process.  They halt,
15  * and wake up when interrupted, do any work on their work queue, then halt
16  * when there is nothing to do.  
17  */
18 void smp_idle(void)
19 {
20         enable_irq();
21         while (1) {
22                 process_workqueue();
23                 // consider races with work added after we started leaving the last func
24                 cpu_halt();
25         }
26 }
27