Async call tweaks
[akaros.git] / user / hello.c
1 // hello, world
2 #include <inc/lib.h>
3
4 #ifdef __DEPUTY__
5 #pragma nodeputy
6 #endif
7
8 void umain(void)
9 {
10         cprintf("goodbye, world!\n");
11         // this is just their way of generating a pagefault..., until now!
12         cprintf("i am environment %08x\n", env->env_id);
13
14         // async via shared mem
15         cprintf("about to write to shared mem.  hope it gets printed.  blimey! \n");
16         // note that when using the cprintf family, we can't currently call again,
17         // since the library functions use the same buffer.  the last used string
18         // will be the one printed when the syscall is serviced, regardless of
19         // whether the actual syscall can handle multiples in flight.
20         async_desc_t *desc1, *desc2, *desc3;
21         cprintf_async(&desc1, "Cross-Core call 1, coming from env %08x\n", env->env_id);
22         cprintf("Call 1 is sent!\n");
23         //cprintf_async(&desc2, "Cross-Core call 2, coming from env %08x\n", env->env_id);
24         cprintf_async(&desc2, "1111111111111111111111111111111122222222222222222222222222222222333333333333333333333333333333334444444444444444444444444444444455555555555555555555555555555555666666666666666666666666666666667777777777777777777777777777777788888888888888888888888888888888Cross-Core call 2, coming from env %08x\n", env->env_id);
25         cprintf("Call 2 is sent!\n");
26         cprintf("Waiting on Call 1 and 2\n");
27         waiton_async_call(desc1);
28         cprintf("Received 1\n");
29         waiton_async_call(desc2);
30         cprintf_async(&desc3, "Cross-Core call 3, coming from env %08x\n", env->env_id);
31         cprintf("Call 3 is sent!\n");
32         // might as well spin, just to make sure nothing gets deallocated
33         // while we're waiting to test the async call
34         while (1);
35
36         //check that my shit is done
37 }