diff options
author | Keir Fraser <keir.fraser@citrix.com> | 2007-11-24 13:29:20 +0000 |
---|---|---|
committer | Keir Fraser <keir.fraser@citrix.com> | 2007-11-24 13:29:20 +0000 |
commit | 26aa688655105f22dc67bb98c5def9a2fb1209e3 (patch) | |
tree | 37ad75ea8a6ef84970928a26c2449071cc8e8d52 /extras/mini-os/sched.c | |
parent | cf64298141ead63b0b72fdee091d62f1148e89e1 (diff) | |
download | xen-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.c | 8 |
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); |