aboutsummaryrefslogtreecommitdiff
path: root/kernel/kernel.c
diff options
context:
space:
mode:
authorDimitri Sokolyuk <demon@dim13.org>2012-12-19 20:58:37 +0000
committerDimitri Sokolyuk <demon@dim13.org>2012-12-19 20:58:37 +0000
commitdd6e24186dbab8ee5f12e2bfab75cdbcc87f9008 (patch)
treea0f10411aaeed8e5a6e82358b2d47335ee23b8e3 /kernel/kernel.c
parent8d7466bdfd1ae0d55d9743166b024c08c58fa75c (diff)
force context switch on lock
Diffstat (limited to 'kernel/kernel.c')
-rw-r--r--kernel/kernel.c15
1 files changed, 2 insertions, 13 deletions
diff --git a/kernel/kernel.c b/kernel/kernel.c
index 1a39b2e..ca50440 100644
--- a/kernel/kernel.c
+++ b/kernel/kernel.c
@@ -213,12 +213,12 @@ lock(uint8_t chan)
/* semaphore busy, go into wait queue */
TAILQ_REMOVE(&kern.rq, kern.cur, r_link);
TAILQ_INSERT_TAIL(&kern.wq[chan], kern.cur, w_link);
- SWITCH();
} else {
/* occupy semaphore and continue */
kern.semaphore |= _BV(chan);
- sei();
}
+
+ SWITCH();
}
void
@@ -285,14 +285,3 @@ reboot(void)
{
kern.reboot = 1;
}
-
-void
-fetchrq(uint8_t *data, uint8_t len)
-{
- struct task *tp;
-
- memset(data, 0, len);
- TAILQ_FOREACH(tp, &kern.rq, r_link)
- if (tp->id < len)
- data[tp->id] = 1;
-}