Allow ev_qs to not have INDIR throttling (XCC)
authorBarret Rhoden <brho@cs.berkeley.edu>
Fri, 16 Sep 2011 23:14:43 +0000 (16:14 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:36:07 +0000 (17:36 -0700)
As a reminder, ev_qs normally will only have one INDIR event sent at a
time (roughly), and future INDIRs/IPIs (alerts) won't be sent until the
main ev_q has been tended to.  This patch allows ev_qs to opt out.

The only use for this I forsee is the preemption ev_q, since the
original INDIR might be sent to a preempted vcore.

kern/include/ros/event.h
kern/src/event.c

index 6ba7a45..d4e89fa 100644 (file)
@@ -19,6 +19,7 @@
 #define EVENT_NOMSG                            0x008   /* just send the bit, not the msg */
 #define EVENT_ROUNDROBIN               0x010   /* pick a vcore, RR style */
 #define EVENT_VCORE_APPRO              0x020   /* send to where the kernel wants */
+#define EVENT_NOTHROTTLE               0x040   /* send all alerts (no throttling) */
 /* Flags from the program to the 2LS */
 #define EVENT_JUSTHANDLEIT             0x100   /* 2LS should handle the ev_q */
 #define EVENT_THREAD                   0x200   /* spawn thread to handle ev_q */
index 0fbeaa5..692b174 100644 (file)
@@ -184,9 +184,12 @@ static void alert_vcore(struct proc *p, struct event_queue *ev_q,
                         uint32_t vcoreid)
 {
        struct vcore *vc;
-       /* If an alert is already pending, just return */
-       /* TODO: need a flag to turn this off for preempt_msg ev_qs. */
-       if (ev_q->ev_alert_pending)
+       /* If an alert is already pending and they don't want repeats, just return.
+        * One of the few uses of NOTHROTTLE will be for preempt_msg ev_qs.  Ex: an
+        * INDIR was already sent to the preempted vcore, then alert throttling
+        * would stop another vcore from getting the message about the original
+        * vcore. */
+       if (!(ev_q->ev_flags & EVENT_NOTHROTTLE) && (ev_q->ev_alert_pending))
                return;
        /* We'll eventually get an INDIR through, so don't send any more til
         * userspace toggles this.  Regardless of other writers to this flag, we