Split uthread code into its own source file
[akaros.git] / tests / manycore_test.c
1 #include <rstdio.h>
2 #include <assert.h>
3 #include <vcore.h>
4 #include <parlib.h>
5 #include <mcs.h>
6 #include <uthread.h>
7
8 mcs_barrier_t b;
9
10 void ghetto_vcore_entry(void);
11 struct schedule_ops ghetto_sched_ops = {
12         0, /* init, */
13         ghetto_vcore_entry,
14         0, /* thread_create, */
15         0, /* thread_runnable, */
16         0, /* thread_yield, */
17         0, /* thread_exit, */
18         0, /* preempt_pending, */
19         0, /* spawn_thread, */
20 };
21 struct schedule_ops *sched_ops = &ghetto_sched_ops;
22
23 void do_work_son(int vcoreid)
24 {
25         int cpuid = sys_getcpuid();
26         int pid = sys_getpid();
27         printf("Hello! My Process ID: %d My VCoreID: %d My CPU: %d\n", pid, vcoreid, cpuid);
28         mcs_barrier_wait(&b,vcoreid);
29 }
30
31 void ghetto_vcore_entry()
32 {
33         assert(vcore_id() > 0);
34         do_work_son(vcore_id());
35 }
36
37 int main(int argc, char** argv)
38 {
39         assert(vcore_id() == 0);
40         mcs_barrier_init(&b,max_vcores());
41         vcore_request(max_vcores()-1);
42         do_work_son(0);
43         return 0;
44 }