/* Helper for running a proc (if we should). Lots of repetition with * proc_restartcore */ static void try_run_proc(void) { struct per_cpu_info *pcpui = &per_cpu_info[core_id()]; /* There was a process running here, and we should return to it. */ if (pcpui->owning_proc) { assert(!pcpui->cur_kthread->sysc); assert(pcpui->cur_ctx); __proc_startcore(pcpui->owning_proc, pcpui->cur_ctx); assert(0); } else { /* Make sure we have abandoned core. It's possible to have an owner * without a current (smp_idle, __startcore, __death). */ abandon_core(); } }
/* Helper for running a proc (if we should). Lots of repetition with * proc_restartcore */ static void try_run_proc(void) { struct per_cpu_info *pcpui = &per_cpu_info[core_id()]; /* There was a process running here, and we should return to it. */ if (pcpui->owning_proc) { assert(!pcpui->cur_kthread->sysc); assert(pcpui->cur_ctx); __proc_startcore(pcpui->owning_proc, pcpui->cur_ctx); assert(0); } else { /* Make sure we have abandoned core. It's possible to have an * owner without a current (smp_idle, __startcore, __death). * * If we had a current process, we might trigger __proc_free, * which could send us a KMSG. Since we're called after PRKM, * let's just restart the idle loop. */ if (abandon_core()) smp_idle(); } }