Kernel now halts when there is no work
authorBarret Rhoden <brho@cs.berkeley.edu>
Sat, 24 Mar 2012 01:39:30 +0000 (18:39 -0700)
committerBarret Rhoden <brho@cs.berkeley.edu>
Sat, 24 Mar 2012 01:39:30 +0000 (18:39 -0700)
We had been polling in a variety of places.  This takes away the last
one: spinning in the manager().  Now, the manager doesn't get called
much (it gets called once, and that should be it).

Note that we still poll in the monitor(), which you can always get to
via 'G' (the call of the giraffe).  (so long as interrupts are enabled,
you're not stuck in a loop, etc).

kern/src/manager.c
kern/src/schedule.c

index 1e1fece..229be5d 100644 (file)
@@ -116,15 +116,8 @@ void manager_brho(void)
                printk("*** Hit shift-g to get into the monitor. ***\n");
                first = FALSE;
        }
-       while (1) {
-               enable_irq();
-               process_routine_kmsg(0);
-               /* would like to idle here, but without reset stacks, people will run
-                * off the kstack.  so just idle if we have an owning proc (which we
-                * should then 'restart'). */
-               if (pcpui->owning_proc)
-                       smp_idle();
-       }
+       /* just idle, and deal with things via interrupts.  or via face. */
+       smp_idle();
        /* whatever we do in the manager, keep in mind that we need to not do
         * anything too soon (like make processes), since we'll drop in here during
         * boot if the boot sequence required any I/O (like EXT2), and we need to
index 7938c94..c0084bd 100644 (file)
@@ -242,9 +242,6 @@ void cpu_bored(void)
 {
        if (!management_core())
                return;
-       /* TODO: something smart.  For now, do what smp_idle did */
-       manager();
-       assert(0);
        /* TODO run a process, and if none exist at all and we're core 0, bring up
         * the monitor/manager */
 }