Monitor now runs on whatever core panics
authorAndrew Waterman <waterman@s143.Millennium.Berkeley.EDU>
Sun, 25 Apr 2010 05:58:30 +0000 (22:58 -0700)
committerKevin Klues <klueska@cs.berkeley.edu>
Thu, 3 Nov 2011 00:35:44 +0000 (17:35 -0700)
There's a monitor lock, though, so only one core will ever
be in the monitor polling for keyboard input.

kern/src/init.c
kern/src/monitor.c

index 9f317b1..76dcbd1 100644 (file)
@@ -110,18 +110,8 @@ void _panic(const char *file, int line, const char *fmt,...)
        va_end(ap);
 
 dead:
-       /* break into the kernel monitor, if we're core 0 */
-#ifdef __CONFIG_DEDICATED_MONITOR__
-       if (core_id() != 2) {
-#else
-       if (core_id()) {
-#endif
-               smp_idle();
-               panic("should never see me");
-       }
-
-       while (1)
-               monitor(NULL);
+       monitor(NULL);
+       smp_idle();
 }
 
 /* like panic, but don't */
index 590d6a5..7985c43 100644 (file)
@@ -466,6 +466,9 @@ static int runcmd(char *NTS real_buf, trapframe_t *tf) {
 }
 
 void monitor(trapframe_t *tf) {
+       static spinlock_t monitor_lock = SPINLOCK_INITIALIZER;
+       spin_lock(&monitor_lock);
+
        char *buf;
 
        printk("Welcome to the ROS kernel monitor on core %d!\n", core_id());
@@ -480,4 +483,6 @@ void monitor(trapframe_t *tf) {
                        if (runcmd(buf, tf) < 0)
                                break;
        }
+
+       spin_unlock(&monitor_lock);
 }