aboutsummaryrefslogtreecommitdiff
path: root/kernel/kernel.c
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2012-06-05 14:13:30 +0000
committerDimitri Sokolyuk <demon@dim13.org>2012-06-05 14:13:30 +0000
commitfa1d7b1dedc1c4a34312c1e42d8d4e32d02b17f5 (patch)
tree65e083c5ad31a669e052e605617cdf9e46d5cb87 /kernel/kernel.c
parente31cea946f459d93fb2023a395d947680643c7a4 (diff)
move task rescheduling into overflow interrupt handler
Diffstat (limited to 'kernel/kernel.c')
-rw-r--r--kernel/kernel.c18
1 files 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++)
;