summaryrefslogtreecommitdiffstats
path: root/sys/vm/vm_map.h
diff options
context:
space:
mode:
Diffstat (limited to 'sys/vm/vm_map.h')
-rw-r--r--sys/vm/vm_map.h62
1 files changed, 58 insertions, 4 deletions
diff --git a/sys/vm/vm_map.h b/sys/vm/vm_map.h
index 7b87856..aa8ddb2 100644
--- a/sys/vm/vm_map.h
+++ b/sys/vm/vm_map.h
@@ -61,7 +61,7 @@
* any improvements or extensions that they make and grant Carnegie the
* rights to redistribute these changes.
*
- * $Id: vm_map.h,v 1.26 1997/04/07 07:16:06 peter Exp $
+ * $Id: vm_map.h,v 1.27 1997/08/05 00:01:58 dyson Exp $
*/
/*
@@ -193,25 +193,78 @@ typedef struct {
&(map)->ref_lock, curproc); \
(map)->timestamp++; \
}
+
#ifdef DIAGNOSTIC
+/* #define MAP_LOCK_DIAGNOSTIC 1 */
+#ifdef MAP_LOCK_DIAGNOSTIC
+#define vm_map_lock(map) { \
+ printf ("locking map LK_EXCLUSIVE: 0x%x\n", map); \
+ if (lockmgr(&(map)->lock, LK_EXCLUSIVE, (void *)0, curproc) != 0) { \
+ panic("vm_map_lock: failed to get lock"); \
+ } \
+ (map)->timestamp++; \
+}
+#else
#define vm_map_lock(map) { \
if (lockmgr(&(map)->lock, LK_EXCLUSIVE, (void *)0, curproc) != 0) { \
panic("vm_map_lock: failed to get lock"); \
} \
(map)->timestamp++; \
}
+#endif
#else
#define vm_map_lock(map) { \
lockmgr(&(map)->lock, LK_EXCLUSIVE, (void *)0, curproc); \
(map)->timestamp++; \
}
#endif /* DIAGNOSTIC */
+
+#if defined(MAP_LOCK_DIAGNOSTIC)
+#define vm_map_unlock(map) \
+ do { \
+ printf ("locking map LK_RELEASE: 0x%x\n", map); \
+ lockmgr(&(map)->lock, LK_RELEASE, (void *)0, curproc); \
+ } while (0);
+#define vm_map_lock_read(map) \
+ do { \
+ printf ("locking map LK_SHARED: 0x%x\n", map); \
+ lockmgr(&(map)->lock, LK_SHARED, (void *)0, curproc); \
+ } while (0);
+#define vm_map_unlock_read(map) \
+ do { \
+ printf ("locking map LK_RELEASE: 0x%x\n", map); \
+ lockmgr(&(map)->lock, LK_RELEASE, (void *)0, curproc); \
+ } while (0);
+#else
#define vm_map_unlock(map) \
- lockmgr(&(map)->lock, LK_RELEASE, (void *)0, curproc)
+ lockmgr(&(map)->lock, LK_RELEASE, (void *)0, curproc);
#define vm_map_lock_read(map) \
- lockmgr(&(map)->lock, LK_SHARED, (void *)0, curproc)
+ lockmgr(&(map)->lock, LK_SHARED, (void *)0, curproc);
#define vm_map_unlock_read(map) \
- lockmgr(&(map)->lock, LK_RELEASE, (void *)0, curproc)
+ lockmgr(&(map)->lock, LK_RELEASE, (void *)0, curproc);
+#endif
+
+static __inline__ int
+_vm_map_lock_upgrade(vm_map_t map, struct proc *p) {
+#if defined(MAP_LOCK_DIAGNOSTIC)
+ printf("locking map LK_EXCLUPGRADE: 0x%x\n", map);
+#endif
+ return lockmgr(&(map)->lock, LK_EXCLUPGRADE, (void *)0, p);
+}
+
+#define vm_map_lock_upgrade(map) _vm_map_lock_upgrade(map, curproc)
+
+#if defined(MAP_LOCK_DIAGNOSTIC)
+#define vm_map_lock_downgrade(map) \
+ do { \
+ printf ("locking map LK_DOWNGRADE: 0x%x\n", map); \
+ lockmgr(&(map)->lock, LK_DOWNGRADE, (void *)0, curproc); \
+ } while (0);
+#else
+#define vm_map_lock_downgrade(map) \
+ lockmgr(&(map)->lock, LK_DOWNGRADE, (void *)0, curproc);
+#endif
+
#define vm_map_set_recursive(map) { \
simple_lock(&(map)->lock.lk_interlock); \
(map)->lock.lk_flags |= LK_CANRECURSE; \
@@ -222,6 +275,7 @@ typedef struct {
(map)->lock.lk_flags &= ~LK_CANRECURSE; \
simple_unlock(&(map)->lock.lk_interlock); \
}
+
/*
* Functions implemented as macros
*/
OpenPOWER on IntegriCloud