diff options
author | Michael I. Bushnell <mib@gnu.org> | 1995-08-14 16:20:56 +0000 |
---|---|---|
committer | Michael I. Bushnell <mib@gnu.org> | 1995-08-14 16:20:56 +0000 |
commit | bf7b08fcb66526d79977c36b33ea9e83c04689ef (patch) | |
tree | 217947643cfbb182b338a81fd56d31844184b9a1 | |
parent | 8718af9bc0195f93ab62e0b44facc88ee62e834a (diff) |
Formerly sched.c.~4~
-rw-r--r-- | pfinet/sched.c | 35 |
1 files changed, 35 insertions, 0 deletions
diff --git a/pfinet/sched.c b/pfinet/sched.c index aadb6fbc..e48758c9 100644 --- a/pfinet/sched.c +++ b/pfinet/sched.c @@ -24,3 +24,38 @@ struct mutex global_interrupt_lock = MUTEX_INITIALIZER; struct task_struct *current; +struct mutex user_kernel_lock = MUTEX_INITIALIZER; + +/* Call this before doing kernel-level calls; this enforces the + non-preemptibility of the kernel. */ +void +start_kernel (struct task_struct *task) +{ + mutex_lock (&user_kernel_lock); + mutex_lock (&global_interrupt_lock); + current = task; + mutex_unlock (&global_interrupt_lock); +} + +/* Call this when done doing a kernel-level call. */ +void +end_kernel (void) +{ + mutex_lock (&global_interrupt_lock); + current = 0; + mutex_unlock (&global_interrupt_lock); + mutex_unlock (&user_kernel_lock); +} + +void +interruptible_sleep_on (struct wait_queue **p) +{ + condition_wait (&(*p)->c, &user_kernel_lock); +} + +void +wake_up_interruptible (struct wait_queue **p) +{ + condition_broadcast (&(*p)->c); +} + |