Pulled code specific to all 2LS out of pthread.c
[akaros.git] / tests / msr_dumb_while.c
1 /* tests/msr_dumb_while.c
2  *
3  * This requests the max_vcores in the system, then just dumbly while loops.
4  * If you send it an NE_ALARM, it'll print its TSC. */
5
6 #include <rstdio.h>
7 #include <vcore.h>
8 #include <arch/arch.h>
9 #include <event.h>
10
11 void ghetto_vcore_entry(void);
12 struct schedule_ops ghetto_sched_ops = {
13         0, /* init, */
14         ghetto_vcore_entry,
15         0, /* thread_create, */
16         0, /* thread_runnable, */
17         0, /* thread_yield, */
18         0, /* thread_exit, */
19         0, /* preempt_pending, */
20         0, /* spawn_thread, */
21 };
22 struct schedule_ops *sched_ops = &ghetto_sched_ops;
23
24 int main(int argc, char** argv)
25 {
26
27         /* don't forget to enable notifs on vcore0.  if you don't, the kernel will
28          * restart your _S with notifs disabled, which is a path to confusion. */
29         struct preempt_data *vcpd = &__procdata.vcore_preempt_data[0];
30         vcpd->notif_enabled = TRUE;
31
32         /* Get EV_ALARM on vcore 1, with IPI. */
33         enable_kevent(EV_ALARM, 1, EVENT_IPI);
34
35         vcore_request(max_vcores());
36
37         /* should never make it here */
38         return -1;
39 }
40
41 void ghetto_vcore_entry(void)
42 {
43         struct preempt_data *vcpd = &__procdata.vcore_preempt_data[0];
44         vcpd->notif_enabled = TRUE;
45
46         unsigned int ev_type = get_event_type(&vcpd->ev_mbox);
47         if (ev_type == EV_ALARM)
48                 printf("[T]:009:E:%llu\n", read_tsc());
49         while(1);
50 }
51