Fixes a bug in _pthread_init that blocks notifs
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 29 Apr 2010 01:09:07 +0000 (18:09 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:35:46 +0000 (17:35 -0700)
Need to enable notifications so that __startcore will properly bring up
vcore0 at _start.  Otherwise, it will start that _S thread as if it was
a preemption, but with a notif_pending, meaning you'll never receive an
active notification til you clear that flag.

user/parlib/pthread.c

index ef390f1..79af8b3 100644 (file)
@@ -42,6 +42,10 @@ void _pthread_init()
                nm->flags |= NOTIF_WANTED | NOTIF_MSG | NOTIF_IPI;
                nm->vcoreid = i % 2; // vcore0 or 1, keepin' it fresh.
        }
+       /* don't forget to enable notifs on vcore0.  if you don't, the kernel will
+        * restart your _S with notifs disabled, which is a path to confusion. */
+       struct preempt_data *vcpd = &__procdata.vcore_preempt_data[0];
+       vcpd->notif_enabled = TRUE;
 
        /* Create a pthread_tcb for the main thread */
        pthread_t t = (pthread_t)calloc(sizeof(struct pthread_tcb), 1);