Handles multiple simultaneous synchronous syscalls
[akaros.git] / user / null.c
1 // null app
2 #include <inc/lib.h>
3 #include <inc/types.h>
4 #include <inc/syscall.h>
5 #include <inc/x86.h>
6 #include <inc/measure.h>
7 #include <inc/null.h>
8
9 #ifdef __DEPUTY__
10 #pragma nodeputy
11 #endif
12
13 #define NUM_ITERATIONS  100000
14 uint64_t times[NUM_ITERATIONS];
15
16 uint64_t total(uint64_t (COUNT(length) array)[], int length)
17 {
18         uint64_t sum = 0;
19         for(int i=0; i<length; i++) {
20                 sum+=array[i];
21         }
22         return sum;
23         //return (length > 0) ? sum/((uint64_t)length) : 0;
24 }
25
26 void umain(void)
27 {
28         measure_function(sys_null(), NUM_ITERATIONS, "sys_null");
29         //measure_function(asm volatile("nop;"), NUM_ITERATIONS, "nop");
30         //measure_function(cprintf("Reg Sync call  \n"), 10, "printf");
31         //measure_function_async(cprintf_async(&desc, "Cross-Core call\n"), desc, 10,\
32         //                       1, "Async Printf");
33         // Note this won't actually do 100 inner runs (first parameter).  will stop
34         // making calls beyond the ring size and won't wait on any extra calls.
35         measure_async_call(null_async(&desc), desc, 100, 100, "Async Null");
36
37         // Spin to make sure we don't have any resources deallocated before done
38         while(1);
39 }