/* * Processing if the priority of send wait task changes */ LOCAL void cal_chg_pri( TCB *tcb, INT oldpri ) { PORCB *porcb; porcb = get_porcb(tcb->wid); gcb_change_priority((GCB*)porcb, tcb); }
/* * Processing if the priority of wait task changes */ LOCAL void mbx_chg_pri( TCB *tcb, INT oldpri ) { MBXCB *mbxcb; mbxcb = get_mbxcb(tcb->wid); gcb_change_priority((GCB*)mbxcb, tcb); }
/* * Processing if the priority of wait task changes */ LOCAL void mbf_chg_pri( TCB *tcb, INT oldpri ) { MBFCB *mbfcb; mbfcb = get_mbfcb(tcb->wid); if ( oldpri >= 0 ) { /* Reorder wait queue */ gcb_change_priority((GCB*)mbfcb, tcb); } /* If the new head task in a send wait queue is able to sent, send its message */ mbf_wakeup(mbfcb); }
/* * Processing if the priority of wait task changes * Since you need to execute with interrupt disable, * you cannot use it for the non-resident memory. */ LOCAL void mpl_chg_pri( TCB *tcb, INT oldpri ) { MPLCB *mplcb; mplcb = get_mplcb(tcb->wid); if ( oldpri >= 0 ) { /* Reorder wait line */ gcb_change_priority((GCB*)mplcb, tcb); } /* From the new top task of a wait queue, free the assign wait of memory blocks as much as possible. */ mpl_wakeup(mplcb); }
/* * Processing if the priority of wait task changes */ LOCAL void mtx_chg_pri( TCB *tcb, INT oldpri ) { MTXCB *mtxcb; TCB *mtxtsk; mtxcb = get_mtxcb(tcb->wid); gcb_change_priority((GCB*)mtxcb, tcb); if ( (mtxcb->mtxatr & TA_CEILING) == TA_INHERIT ) { mtxtsk = mtxcb->mtxtsk; if ( mtxtsk->priority > tcb->priority ) { /* Since the highest priority of the lock wait task became higher, raise the lock get task priority higher */ change_task_priority(mtxtsk, tcb->priority); } else if ( mtxtsk->priority == oldpri ) { /* Since the highest priority of the lock wait task might become lower, adjust this priority */ reset_priority(mtxtsk); } } }