b27ba671a26fc7aa5c30bc523936b2d1296badd8
[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 #include <uthread.h>
11
12 void ghetto_vcore_entry(void);
13 struct schedule_ops ghetto_sched_ops = {
14         0, /* init, */
15         ghetto_vcore_entry,
16         0, /* thread_create, */
17         0, /* thread_runnable, */
18         0, /* thread_yield, */
19         0, /* thread_exit, */
20         0, /* preempt_pending, */
21         0, /* spawn_thread, */
22 };
23 struct schedule_ops *sched_ops = &ghetto_sched_ops;
24
25 int main(int argc, char** argv)
26 {
27
28         /* don't forget to enable notifs on vcore0.  if you don't, the kernel will
29          * restart your _S with notifs disabled, which is a path to confusion. */
30         struct preempt_data *vcpd = &__procdata.vcore_preempt_data[0];
31         vcpd->notif_enabled = TRUE;
32
33         /* Get EV_ALARM on vcore 1, with IPI. */
34         enable_kevent(EV_ALARM, 1, EVENT_IPI);
35
36         vcore_request(max_vcores());
37
38         /* should never make it here */
39         return -1;
40 }
41
42 void ghetto_vcore_entry(void)
43 {
44         struct preempt_data *vcpd = &__procdata.vcore_preempt_data[0];
45         vcpd->notif_enabled = TRUE;
46
47         unsigned int ev_type = get_event_type(&vcpd->ev_mbox);
48         if (ev_type == EV_ALARM)
49                 printf("[T]:009:E:%llu\n", read_tsc());
50         while(1);
51 }
52