xenomai 3.0.2 -任务切换《xnarch_switch_to》

来源:互联网 发布:淘宝登录注册流程 编辑:程序博客网 时间:2024/06/06 03:21

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);}
0 0
原创粉丝点击