Asserts/checks for early RKMSG context
[akaros.git] / kern / src / smp.c
index 853f0d1..fd16a42 100644 (file)
@@ -49,6 +49,8 @@ static void try_run_proc(void)
  * tell it to do something else, or perhaps to halt in another manner. */
 static void __attribute__((noinline, noreturn)) __smp_idle(void)
 {
+       struct per_cpu_info *pcpui = &per_cpu_info[core_id()];
+       clear_rkmsg(pcpui);
        /* TODO: idle, abandon_core(), and proc_restartcore() need cleaned up */
        enable_irq();   /* get any IRQs before we halt later */
        try_run_proc();
@@ -58,7 +60,7 @@ static void __attribute__((noinline, noreturn)) __smp_idle(void)
         * (and presumably about to execute a kmsg or fire up a vcore). */
        while (1) {
                disable_irq();
-               process_routine_kmsg(0);
+               process_routine_kmsg();
                try_run_proc();
                cpu_bored();            /* call out to the ksched */
                /* cpu_halt() atomically turns on interrupts and halts the core.
@@ -85,6 +87,8 @@ void smp_idle(void)
 void smp_percpu_init(void)
 {
        uint32_t coreid = core_id();
+       /* Don't initialize __ctx_depth here, since it is already 1 (at least on
+        * x86), since this runs in irq context. */
        /* Do this first */
        __arch_pcpu_init(coreid);
        per_cpu_info[coreid].spare = 0;