primitive barrier and testing helpers
[akaros.git] / kern / atomic.c
1 #include <kern/atomic.h>
2 #include <kern/apic.h>
3
4 // byte per cpu, as mentioned below
5 void init_barrier(barrier_t cpu_array)
6 {
7         extern uint8_t num_cpus;
8         uint8_t i;
9         for(i = 0; i < num_cpus; i++)
10                 cpu_array[i] = 1;
11 }
12
13 // primitive barrier function.  all cores call this.
14 // should change this to use bits and lock bit ops.
15 // currently uses a byte per core, and assumes it was 
16 // initialized by a core such that up num_cpus entries
17 // are all 1
18 void barrier(barrier_t cpu_array)
19 {
20         extern uint8_t num_cpus;
21         uint8_t i;
22
23         cpu_array[lapic_get_id()] = 0;
24         for(i = 0; i < num_cpus; i++) {
25                 while(cpu_array[i]) 
26                         cpu_relax();
27         }
28 }