Userspace no longer includes the kernel's arch/*
[akaros.git] / tests / mhello.c
index 3ca0803..e2b5e3f 100644 (file)
@@ -4,21 +4,7 @@
 #include <stdio.h>
 #include <hart.h>
 
-// ghetto udelay, put in a lib somewhere and export the tsc freq
-#include <arch/arch.h>
-void udelay(uint64_t usec, uint64_t tsc_freq)
-{
-       uint64_t start, end, now;
-
-       start = read_tsc();
-    end = start + (tsc_freq * usec) / 1000000;
-       if (end == 0) printf("This is terribly wrong \n");
-       do {
-        cpu_relax();
-        now = read_tsc();
-       } while (now < end || (now > start && end < start));
-       return;
-}
+hart_barrier_t b;
 
 __thread int temp;
 
@@ -27,6 +13,8 @@ int main(int argc, char** argv)
        uint32_t vcoreid;
        int retval;
 
+       hart_barrier_init(&b,hart_max_harts()-1);
+
        if ((vcoreid = hart_self())) {
                printf("Should never see me! (from vcore %d)\n", vcoreid);
        } else { // core 0
@@ -35,11 +23,14 @@ int main(int argc, char** argv)
                       vcoreid, &temp, temp);
                printf("Multi-Goodbye, world, from PID: %d!\n", sys_getpid());
                //retval = sys_resource_req(RES_CORES, 2, 0);
-               retval = hart_request(2);
+               retval = hart_request(hart_max_harts()-2);
                //debug("retval = %d\n", retval);
        }
        printf("Vcore %d Done!\n", vcoreid);
-       while (1);
+
+       hart_barrier_wait(&b,hart_self());
+
+       printf("All Cores Done!\n", vcoreid);
        return 0;
 }
 
@@ -49,5 +40,6 @@ void hart_entry(void)
        temp = 0xcafebabe;
        printf("Hello from hart_entry in vcore %d with temp addr %p and temp %p\n",
               vcoreid, &temp, temp);
+       hart_barrier_wait(&b,hart_self());
        while(1);
 }