From fa1d7b1dedc1c4a34312c1e42d8d4e32d02b17f5 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Tue, 5 Jun 2012 14:13:30 +0000 Subject: move task rescheduling into overflow interrupt handler --- kernel/kernel.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/kernel/kernel.c b/kernel/kernel.c index b466351..9fce17b 100644 --- a/kernel/kernel.c +++ b/kernel/kernel.c @@ -70,6 +70,15 @@ ISR(TIMER1_OVF_vect) wdt_reset(); ++kern.cycles; + + /* reschedule current task if it's still at head of runq */ + if (kern.cur == TAILQ_FIRST(kern.cur->rq)) { + TAILQ_REMOVE(kern.cur->rq, kern.cur, r_link); + if (kern.cur->prio > RT && kern.cur->prio < RR) + kern.cur->prio++; + kern.cur->rq = &kern.rq[kern.cur->prio]; + TAILQ_INSERT_TAIL(kern.cur->rq, kern.cur, r_link); + } } ISR(TIMER1_COMPA_vect, ISR_NAKED) @@ -98,15 +107,6 @@ ISR(TIMER1_COMPA_vect, ISR_NAKED) nexthit = dist; } - /* reschedule current task if it's still at head of runq */ - if (kern.cur == TAILQ_FIRST(kern.cur->rq)) { - TAILQ_REMOVE(kern.cur->rq, kern.cur, r_link); - if (kern.cur->prio > RT && kern.cur->prio < RR) - kern.cur->prio++; - kern.cur->rq = &kern.rq[kern.cur->prio]; - TAILQ_INSERT_TAIL(kern.cur->rq, kern.cur, r_link); - } - /* pick hightes rq, cannot fail */ for (rq = kern.rq; TAILQ_EMPTY(rq); rq++) ; -- cgit v1.2.3