aboutsummaryrefslogtreecommitdiffstats
path: root/extras/mini-os/sched.c
diff options
context:
space:
mode:
authorKeir Fraser <keir.fraser@citrix.com>2007-11-24 13:29:20 +0000
committerKeir Fraser <keir.fraser@citrix.com>2007-11-24 13:29:20 +0000
commit26aa688655105f22dc67bb98c5def9a2fb1209e3 (patch)
tree37ad75ea8a6ef84970928a26c2449071cc8e8d52 /extras/mini-os/sched.c
parentcf64298141ead63b0b72fdee091d62f1148e89e1 (diff)
downloadxen-26aa688655105f22dc67bb98c5def9a2fb1209e3.tar.gz
xen-26aa688655105f22dc67bb98c5def9a2fb1209e3.tar.bz2
xen-26aa688655105f22dc67bb98c5def9a2fb1209e3.zip
[Mini-OS] Make sure schedule() is called safely
If a thread tries to sleep from a callback or with callbacks disabled, Mini-OS will completely lock, so make sure this never happens. Signed-off-by: Samuel Thibault <samuel.thibault@citrix.com>
Diffstat (limited to 'extras/mini-os/sched.c')
-rw-r--r--extras/mini-os/sched.c8
1 files changed, 8 insertions, 0 deletions
diff --git a/extras/mini-os/sched.c b/extras/mini-os/sched.c
index 69f398ed13..fbcffd463e 100644
--- a/extras/mini-os/sched.c
+++ b/extras/mini-os/sched.c
@@ -125,6 +125,14 @@ void schedule(void)
unsigned long flags;
prev = current;
local_irq_save(flags);
+ if (in_callback) {
+ printk("Must not call schedule() from a callback\n");
+ BUG();
+ }
+ if (flags) {
+ printk("Must not call schedule() with IRQs disabled\n");
+ BUG();
+ }
list_for_each(iterator, &exited_threads)
{
thread = list_entry(iterator, struct thread, thread_list);