Revamped event interfaces (XCC)
[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 <ros/bcq.h>
10
11 int main(int argc, char** argv)
12 {
13
14         /* don't forget to enable notifs on vcore0.  if you don't, the kernel will
15          * restart your _S with notifs disabled, which is a path to confusion. */
16         struct preempt_data *vcpd = &__procdata.vcore_preempt_data[0];
17         vcpd->notif_enabled = TRUE;
18
19         /* Get EV_ALARM on vcore 1, with IPI.
20          * TODO: (PIN) this ev_q needs to be pinned */
21         struct event_queue *ev_q = malloc(sizeof(struct event_queue));
22         ev_q->ev_mbox = &__procdata.vcore_preempt_data[1].ev_mbox;
23         ev_q->ev_flags = EVENT_IPI;
24         ev_q->ev_vcore = 1;
25         ev_q->ev_handler = 0;
26         __procdata.kernel_evts[EV_ALARM] = ev_q;
27
28         vcore_request(max_vcores());
29
30         /* should never make it here */
31         return -1;
32 }
33
34 void vcore_entry(void)
35 {
36         struct preempt_data *vcpd = &__procdata.vcore_preempt_data[0];
37         vcpd->notif_enabled = TRUE;
38
39         struct event_msg ev_msg = {0};
40         bcq_dequeue(&vcpd->ev_mbox.ev_msgs, &ev_msg, NR_BCQ_EVENTS);
41         if (ev_msg.ev_type == EV_ALARM)
42                 printf("[T]:009:E:%llu\n", read_tsc());
43         while(1);
44 }
45