Removed junk, fixes typo, etc.
authorBarret Rhoden <brho@cs.berkeley.edu>
Thu, 15 Apr 2010 22:26:45 +0000 (15:26 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:35:42 +0000 (17:35 -0700)
Removes the process debugging code, and adds a little check in mhello.
Technically, you need to reinstall your kernel headers.  Odds are they
will change again before anyone uses the changed bit.

kern/include/ros/notification.h
kern/src/process.c
tests/mhello.c

index be6ef8d..ff55cb7 100644 (file)
@@ -27,7 +27,7 @@ struct notif_method {
 
 /* Notification Event Types */
 #define NE_NONE                                         0
-#define NE_PREMPT_PENDING               1
+#define NE_PREEMPT_PENDING              1
 #define NE_GANG_PREMPT_PENDING  2
 #define NE_VCORE_REVOKE                         3
 #define NE_GANG_RETURN                  4
index 640b832..5523a03 100644 (file)
@@ -1284,52 +1284,3 @@ void print_proc_info(pid_t pid)
        spin_unlock_irqsave(&p->proc_lock);
        proc_decref(p, 1); /* decref for the pid2proc reference */
 }
-
-void proc_preempt_core(struct proc *p, uint32_t vcoreid)
-{
-    uint32_t pcoreid;
-    bool self_ipi_pending = FALSE;
-    spin_lock_irqsave(&p->proc_lock);
-    p->procinfo->vcoremap[vcoreid].preempt_served = TRUE;
-    pcoreid = p->procinfo->vcoremap[vcoreid].pcoreid;
-    // expects a pcorelist.  assumes pcore is mapped and running_m
-    self_ipi_pending = __proc_take_cores(p, &pcoreid, 1, __preempt, p, 0, 0);
-    __proc_unlock_ipi_pending(p, self_ipi_pending);
-}
-
-void proc_give(struct proc *p, uint32_t pcoreid)
-{
-    bool self_ipi_pending = FALSE;
-    spin_lock_irqsave(&p->proc_lock);
-    // expects a vcorelist.  assumes vcore is mapped and running_m
-    self_ipi_pending = __proc_give_cores(p, &pcoreid, 1);
-    __proc_unlock_ipi_pending(p, self_ipi_pending);
-}
-
-void do_it(void)
-{
-    struct proc *p = 0xfe500000;
-    proc_preempt_core(p, 0);
-    //print_proc_info(1);
-    udelay(2000000);
-    p->procdata->vcore_preempt_data[0].notif_pending = 1;
-    proc_give(p, 4);
-    //print_proc_info(1);
-}
-
-void do_it2(void)
-{
-    struct proc *p = 0xfe500000;
-    bool self_ipi_pending = FALSE;
-    uint32_t pcorelist[4] = {7, 6, 5, 4};
-
-    spin_lock_irqsave(&p->proc_lock);
-    self_ipi_pending = __proc_take_allcores(p, __preempt, p, 0, 0);
-    __proc_unlock_ipi_pending(p, self_ipi_pending);
-    udelay(2000000);
-
-    print_proc_info(1);
-    udelay(5000000);
-
-}
-
index a2507f6..5c0be1e 100644 (file)
@@ -100,6 +100,7 @@ void vcore_entry(void)
        temp = 0xcafebabe;
 /* begin: stuff userspace needs to do to handle notifications */
 
+       struct vcore *vc = &__procinfo.vcoremap[vcoreid];
        struct preempt_data *vcpd;
        vcpd = &__procdata.vcore_preempt_data[vcoreid];
        
@@ -114,6 +115,12 @@ void vcore_entry(void)
        /* can see how many messages had to be sent as bits */
        printf("Number of event overflows: %d\n", vcpd->event_overflows);
 
+       if (vc->preempt_pending) {
+               printf("Oh crap, vcore %d is being preempted!  Yielding\n", vcoreid);
+               sys_yield(TRUE);
+               printf("After yield on vcore %d. I wasn't being preempted.\n", vcoreid);
+       }
+               
        /* Lets try to restart vcore0's context.  Note this doesn't do anything to
         * set the appropriate TLS.  On x86, this will involve changing the LDT
         * entry for this vcore to point to the TCB of the new user-thread. */