Add a notif_pending comment to proc_notify()
authorBarret Rhoden <brho@cs.berkeley.edu>
Wed, 20 Apr 2016 23:12:19 +0000 (16:12 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Mon, 2 May 2016 21:11:15 +0000 (17:11 -0400)
I thought that we could check notif_pending and bail out early, but on
closer inspection, that might be wrong.  Better let everyone know.

Signed-off-by: Barret Rhoden <brho@cs.berkeley.edu>
kern/src/process.c

index ad4910d..22b26e7 100644 (file)
@@ -1273,6 +1273,15 @@ out_yield_core:                          /* successfully yielded the core */
 void proc_notify(struct proc *p, uint32_t vcoreid)
 {
        struct preempt_data *vcpd = &p->procdata->vcore_preempt_data[vcoreid];
+
+       /* If you're thinking about checking notif_pending and then returning if it
+        * is already set, note that some callers (e.g. the event system) set
+        * notif_pending when they deliver a message, regardless of whether there is
+        * an IPI or not.  Those callers assume that we don't care about
+        * notif_pending, only notif_disabled.  So don't change this without
+        * changing them (probably can't without a lot of thought - that
+        * notif_pending is about missing messages.  It might be possible to say "no
+        * IPI, but don't let me miss messages that were delivered." */
        vcpd->notif_pending = TRUE;
        wrmb(); /* must write notif_pending before reading notif_disabled */
        if (!vcpd->notif_disabled) {