您的位置:首页 > 大数据 > 人工智能

xenomai 3.0.2 -任务切换《xnarch_switch_to》

2016-09-08 17:54 746 查看

1.xnarch_switch_to

void xnarch_switch_to(struct xnthread *out, struct xnthread *in)
{
struct xnarchtcb *out_tcb = &out->tcb, *in_tcb = &in->tcb;
struct mm_struct *prev_mm, *next_mm;
struct task_struct *next;

next = in_tcb->core.host_task;
prev_mm = out_tcb->core.active_mm;

next_mm = in_tcb->core.mm;
//首先,检查是否为内核线程还是用户进程
if (next_mm == NULL) {
//kernel thread,copy mm from previous process.
in_tcb->core.active_mm = prev_mm;
enter_lazy_tlb(prev_mm, next);
} else {
ipipe_switch_mm_head(prev_mm, next_mm, next);
/*
* We might be switching back to the root thread,
* which we preempted earlier, shortly after "current"
* dropped its mm context in the do_exit() path
* (next->mm == NULL). In that particular case, the
* kernel expects a lazy TLB state for leaving the mm.
*/
if (next->mm == NULL)
enter_lazy_tlb(prev_mm, next);
}

__asm_thread_s.witch(out_tcb->core.tip, in_tcb->core.tip);
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  xenomai