]> Zhao Yanbai Git Server - minix.git/commitdiff
Renamed file.
authorJorrit Herder <jnherder@minix3.org>
Thu, 14 Jul 2005 15:27:40 +0000 (15:27 +0000)
committerJorrit Herder <jnherder@minix3.org>
Thu, 14 Jul 2005 15:27:40 +0000 (15:27 +0000)
kernel/utility.c [moved from kernel/misc.c with 72% similarity]

similarity index 72%
rename from kernel/misc.c
rename to kernel/utility.c
index f8bf3edd008ba69fc162cd3866ede247896ffdc1..5835f8cc5ec078a1b94e19eb98e0eaca5fb15b9d 100755 (executable)
@@ -1,5 +1,7 @@
 /* This file contains a collection of miscellaneous procedures:
  *   panic         abort MINIX due to a fatal error
+ *   safe_lock     lock the kernel, use in combination with safe_unlock
+ *   safe_unlock    unlock the kernel, but prevent breaking nested locks
  *   alloc_bit      bit map manipulation
  *   free_bit       bit map manipulation
  */
 #include <minix/com.h>
 
 
+PRIVATE int relock_count = 0;
+
+/*===========================================================================*
+ *                                   safe_lock                               *
+ *===========================================================================*/
+PUBLIC void safe_lock(c,v)
+int c;
+char *v;
+{
+  if(!(read_cpu_flags() & X86_FLAG_I)) {
+       relock_count++;
+  } else {
+       intr_disable();
+  }
+}
+
+/*===========================================================================*
+ *                                   safe_unlock                             *
+ *===========================================================================*/
+PUBLIC void safe_unlock(void)
+{
+  if(! relock_count) {
+       intr_enable();
+  } else {
+       relock_count--;
+  }
+}
+
 /*===========================================================================*
  *                                   panic                                   *
  *===========================================================================*/
@@ -30,6 +60,9 @@ int n;
   prepare_shutdown(RBT_PANIC);
 }
 
+
+
+
 /*===========================================================================*
  *                             free_bit                                     * 
  *===========================================================================*/