x86 thread local storage tweaks
[akaros.git] / user / apps / parlib / mhello.c
1 #include <parlib.h>
2 #include <ros/mman.h>
3 #include <ros/resource.h>
4 #include <stdio.h>
5 #include <hart.h>
6
7 // ghetto udelay, put in a lib somewhere and export the tsc freq
8 #include <arch/arch.h>
9 void udelay(uint64_t usec, uint64_t tsc_freq)
10 {
11         uint64_t start, end, now;
12
13         start = read_tsc();
14     end = start + (tsc_freq * usec) / 1000000;
15         if (end == 0) printf("This is terribly wrong \n");
16         do {
17         cpu_relax();
18         now = read_tsc();
19         } while (now < end || (now > start && end < start));
20         return;
21 }
22
23 __thread int temp;
24
25 int main(int argc, char** argv)
26 {
27         uint32_t vcoreid;
28         error_t retval;
29
30         if ((vcoreid = hart_self())) {
31                 printf("Should never see me! (from vcore %d)\n", vcoreid);
32         } else { // core 0
33                 temp = 0xdeadbeef;
34                 printf("Hello from vcore %d with temp addr = %p and temp = %p\n",
35                        vcoreid, &temp, temp);
36                 printf("Multi-Goodbye, world, from PID: %d!\n", sys_getpid());
37                 //retval = sys_resource_req(RES_CORES, 2, 0);
38                 retval = hart_request(2);
39                 //debug("retval = %d\n", retval);
40         }
41         printf("Vcore %d Done!\n", vcoreid);
42         while (1);
43         return 0;
44 }
45
46 void hart_entry(void)
47 {
48         uint32_t vcoreid = hart_self();
49         temp = 0xcafebabe;
50         printf("Hello from hart_entry in vcore %d with temp addr %p and temp %p\n",
51                vcoreid, &temp, temp);
52         while(1);
53 }