x86: sends the EOI later in the IRQ path
[akaros.git] / kern / src / monitor.c
index 75d65bc..01b7c99 100644 (file)
@@ -312,7 +312,7 @@ int mon_bin_run(int argc, char **argv, struct hw_trapframe *hw_tf)
        kref_put(&program->f_kref);
        /* Make a scheduling decision.  You might not get the process you created,
         * in the event there are others floating around that are runnable */
-       schedule();
+       run_scheduler();
        /* want to idle, so we un the process we just selected.  this is a bit
         * hackish, but so is the monitor. */
        smp_idle();
@@ -829,7 +829,10 @@ void monitor(struct hw_trapframe *hw_tf)
                print_trapframe(hw_tf);
 
        while (1) {
-               cnt = readline(buf, MON_CMD_LENGTH, "ROS(Core %d)> ", coreid);
+               /* on occasion, the kernel monitor can migrate (like if you run
+                * something that blocks / syncs and wakes up on another core) */
+               cmb();
+               cnt = readline(buf, MON_CMD_LENGTH, "ROS(Core %d)> ", core_id_early());
                if (cnt > 0) {
                        buf[cnt] = 0;
                        if (runcmd(buf, hw_tf) < 0)