From bf7b08fcb66526d79977c36b33ea9e83c04689ef Mon Sep 17 00:00:00 2001 From: "Michael I. Bushnell" Date: Mon, 14 Aug 1995 16:20:56 +0000 Subject: Formerly sched.c.~4~ --- pfinet/sched.c | 35 +++++++++++++++++++++++++++++++++++ 1 file changed, 35 insertions(+) (limited to 'pfinet/sched.c') 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); +} + -- cgit v1.2.3