SYSCALL ER act_tsk(ID tskid) { TCB *tcb; ER ercd; LOG_ACT_TSK_ENTER(tskid); CHECK_TSKCTX_UNL(); CHECK_TSKID_SELF(tskid); tcb = get_tcb_self(tskid); t_lock_cpu(); if (TSTAT_DORMANT(tcb->tstat)) { if (make_active(tcb)) { dispatch(); } ercd = E_OK; } else if (!(tcb->actcnt)) { tcb->actcnt = TRUE; ercd = E_OK; } else { ercd = E_QOVR; } t_unlock_cpu(); exit: LOG_ACT_TSK_LEAVE(ercd); return(ercd); }
ER act_tsk(ID tskid) { ER ercd; uint_t tskpri; LOG_ACT_TSK_ENTER(tskid); CHECK_TSKCTX_UNL(); CHECK_TSKID_SELF(tskid); tskpri = get_ipri_self(tskid); t_lock_cpu(); if (test_dormant(tskpri)) { if(make_active(tskpri)) { run_task(tskpri); } ercd = E_OK; } else { ercd = E_QOVR; } t_unlock_cpu(); error_exit: LOG_ACT_TSK_LEAVE(ercd); return(ercd); }
ER act_tsk(ID tskid) { TCB *p_tcb; ER ercd; LOG_ACT_TSK_ENTER(tskid); CHECK_TSKCTX_UNL(); CHECK_TSKID_SELF(tskid); p_tcb = get_tcb_self(tskid); t_lock_cpu(); if (TSTAT_DORMANT(p_tcb->tstat)) { if (make_active(p_tcb)) { dispatch(); } ercd = E_OK; } else if (!(p_tcb->actque)) { p_tcb->actque = true; ercd = E_OK; } else { ercd = E_QOVR; } t_unlock_cpu(); error_exit: LOG_ACT_TSK_LEAVE(ercd); return(ercd); }
ER act_tsk(ID tskid) { TCB *p_tcb; ER ercd; LOG_ACT_TSK_ENTER(tskid); CHECK_UNL(); /*[NGKI1114]*/ if (tskid == TSK_SELF && !sense_context()) { p_tcb = p_runtsk; /*[NGKI1121]*/ } else { CHECK_ID(VALID_TSKID(tskid)); /*[NGKI1115]*/ p_tcb = get_tcb(tskid); } lock_cpu(); if (p_tcb->p_tinib->tskatr == TA_NOEXS) { ercd = E_NOEXS; /*[NGKI1116]*/ } else if (TSTAT_DORMANT(p_tcb->tstat)) { make_active(p_tcb); /*[NGKI1118]*/ if (p_runtsk != p_schedtsk) { if (!sense_context()) { dispatch(); } else { request_dispatch(); } } ercd = E_OK; } else if ((p_tcb->p_tinib->tskatr & TA_NOACTQUE) != 0U || p_tcb->actque) { ercd = E_QOVR; /*[NGKI3528]*/ } else { p_tcb->actque = true; /*[NGKI3527]*/ ercd = E_OK; } unlock_cpu(); error_exit: LOG_ACT_TSK_LEAVE(ercd); return(ercd); }
ER act_tsk(ID tskid) { TCB *p_tcb; ER ercd; bool_t dspreq = false; PCB *p_pcb; LOG_ACT_TSK_ENTER(tskid); CHECK_TSKCTX_UNL(); CHECK_TSKID_SELF(tskid); t_lock_cpu(); p_tcb = get_tcb_self(tskid, get_my_p_pcb()); p_pcb = t_acquire_tsk_lock(p_tcb); if (TSTAT_DORMANT(p_tcb->tstat)) { if (make_active(p_tcb)) { dspreq = dispatch_request(p_pcb); } ercd = E_OK; } else if (!(p_tcb->actque)) { p_tcb->actque = true; ercd = E_OK; } else { ercd = E_QOVR; } release_tsk_lock(p_pcb); if (dspreq) { dispatch(); } t_unlock_cpu(); error_exit: LOG_ACT_TSK_LEAVE(ercd); return(ercd); }