ER chg_pri(ID tskid, PRI tskpri) { TCB *p_tcb; uint_t newbpri; ER ercd; LOG_CHG_PRI_ENTER(tskid, tskpri); CHECK_TSKCTX_UNL(); CHECK_TSKID_SELF(tskid); CHECK_TPRI_INI(tskpri); p_tcb = get_tcb_self(tskid); CHECK_ACPTN(p_tcb->p_tinib->acvct.acptn2); newbpri = (tskpri == TPRI_INI) ? p_tcb->p_tinib->ipriority : INT_PRIORITY(tskpri); if (rundom != TACP_KERNEL) { CHECK_ILUSE(newbpri >= p_runtsk->p_tinib->p_dominib->minpriority); } t_lock_cpu(); if (TSTAT_DORMANT(p_tcb->tstat)) { ercd = E_OBJ; } else if ((!queue_empty(&(p_tcb->mutex_queue)) || TSTAT_WAIT_MTX(p_tcb->tstat)) && !((*mtxhook_check_ceilpri)(p_tcb, newbpri))) { ercd = E_ILUSE; } else { p_tcb->bpriority = newbpri; if (queue_empty(&(p_tcb->mutex_queue)) || !((*mtxhook_scan_ceilmtx)(p_tcb))) { if (change_priority(p_tcb, newbpri, false)) { dispatch(); } } ercd = E_OK; } t_unlock_cpu(); error_exit: LOG_CHG_PRI_LEAVE(ercd); return(ercd); }
ER ifsnd_dtq(ID dtqid, intptr_t data) { DTQCB *p_dtqcb; ER ercd; LOG_IFSND_DTQ_ENTER(dtqid, data); CHECK_INTCTX_UNL(); CHECK_DTQID(dtqid); p_dtqcb = get_dtqcb(dtqid); CHECK_ILUSE(p_dtqcb->p_dtqinib->dtqcnt > 0U); i_lock_cpu(); if (force_send_data(p_dtqcb, data)) { reqflg = true; } ercd = E_OK; i_unlock_cpu(); error_exit: LOG_IFSND_DTQ_LEAVE(ercd); return(ercd); }
ER fsnd_dtq(ID dtqid, intptr_t data) { DTQCB *p_dtqcb; ER ercd; LOG_FSND_DTQ_ENTER(dtqid, data); CHECK_TSKCTX_UNL(); CHECK_DTQID(dtqid); p_dtqcb = get_dtqcb(dtqid); CHECK_ILUSE(p_dtqcb->p_dtqinib->dtqcnt > 0U); t_lock_cpu(); if (force_send_data(p_dtqcb, data)) { dispatch(); } ercd = E_OK; t_unlock_cpu(); error_exit: LOG_FSND_DTQ_LEAVE(ercd); return(ercd); }