OSDI Microbenchmarks
[akaros.git] / tests / msr_dumb_while.c
index a56f583..f47a7a3 100644 (file)
@@ -1,9 +1,12 @@
 /* tests/msr_dumb_while.c
  *
- * This requests the max_vcores in the system, then just dumbly while loops. */
+ * This requests the max_vcores in the system, then just dumbly while loops.
+ * If you send it an NE_ALARM, it'll print its TSC. */
 
 #include <rstdio.h>
 #include <vcore.h>
+#include <arch/arch.h>
+#include <ros/bcq.h>
 
 int main(int argc, char** argv)
 {
@@ -21,6 +24,17 @@ int main(int argc, char** argv)
 
 void vcore_entry(void)
 {
+       struct preempt_data *vcpd = &__procdata.vcore_preempt_data[0];
+       vcpd->notif_enabled = TRUE;
+
+       struct notif_method *nm = &__procdata.notif_methods[NE_ALARM];
+       nm->flags = NOTIF_WANTED | NOTIF_MSG | NOTIF_IPI;
+       nm->vcoreid = 1;
+
+       struct notif_event ne = {0};
+       bcq_dequeue(&vcpd->notif_evts, &ne, NR_PERCORE_EVENTS);
+       if (ne.ne_type == NE_ALARM)
+               printf("[T]:009:E:%llu\n", read_tsc());
        while(1);
 }