From 752b44ba0e550159fb6d2372c54a278fb94080eb Mon Sep 17 00:00:00 2001 From: gdisirio Date: Fri, 16 Aug 2013 11:38:45 +0000 Subject: git-svn-id: svn://svn.code.sf.net/p/chibios/svn/branches/kernel_3_dev@6165 35acf78f-673a-0410-8e92-d51de3d6d3f4 --- os/rt/src/chschd.c | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) (limited to 'os/rt/src') diff --git a/os/rt/src/chschd.c b/os/rt/src/chschd.c index ac77139ae..9b7147a32 100644 --- a/os/rt/src/chschd.c +++ b/os/rt/src/chschd.c @@ -125,6 +125,11 @@ void chSchGoSleepS(tstate_t newstate) { otp->p_preempt = CH_CFG_TIME_QUANTUM; #endif setcurrp(queue_fifo_remove(&ch.rlist.r_queue)); +#if defined(CH_CFG_IDLE_ENTER_HOOK) + if (currp->p_prio == IDLEPRIO) { + CH_CFG_IDLE_ENTER_HOOK(); + } +#endif currp->p_state = CH_STATE_CURRENT; chSysSwitch(currp, otp); } @@ -237,6 +242,11 @@ void chSchWakeupS(thread_t *ntp, msg_t msg) { else { thread_t *otp = chSchReadyI(currp); setcurrp(ntp); +#if defined(CH_CFG_IDLE_LEAVE_HOOK) + if (otp->p_prio == IDLEPRIO) { + CH_CFG_IDLE_LEAVE_HOOK(); + } +#endif ntp->p_state = CH_STATE_CURRENT; chSysSwitch(ntp, otp); } @@ -302,6 +312,11 @@ void chSchDoRescheduleBehind(void) { otp = currp; /* Picks the first thread from the ready queue and makes it current.*/ setcurrp(queue_fifo_remove(&ch.rlist.r_queue)); +#if defined(CH_CFG_IDLE_LEAVE_HOOK) + if (otp->p_prio == IDLEPRIO) { + CH_CFG_IDLE_LEAVE_HOOK(); + } +#endif currp->p_state = CH_STATE_CURRENT; #if CH_CFG_TIME_QUANTUM > 0 otp->p_preempt = CH_CFG_TIME_QUANTUM; @@ -325,6 +340,11 @@ void chSchDoRescheduleAhead(void) { otp = currp; /* Picks the first thread from the ready queue and makes it current.*/ setcurrp(queue_fifo_remove(&ch.rlist.r_queue)); +#if defined(CH_CFG_IDLE_LEAVE_HOOK) + if (otp->p_prio == IDLEPRIO) { + CH_CFG_IDLE_LEAVE_HOOK(); + } +#endif currp->p_state = CH_STATE_CURRENT; otp->p_state = CH_STATE_READY; -- cgit v1.2.3