Page Menu
Home
FreeBSD
Search
Configure Global Search
Log In
Files
F150951670
D22163.id63797.diff
No One
Temporary
Actions
View File
Edit File
Delete File
View Transforms
Subscribe
Mute Notifications
Flag For Later
Award Token
Size
3 KB
Referenced Files
None
Subscribers
None
D22163.id63797.diff
View Options
Index: sys/vm/vm_map.h
===================================================================
--- sys/vm/vm_map.h
+++ sys/vm/vm_map.h
@@ -207,6 +207,9 @@
pmap_t pmap; /* (c) Physical map */
vm_offset_t anon_loc;
int busy;
+#ifdef DIAGNOSTIC
+ int nupdates;
+#endif
};
/*
Index: sys/vm/vm_map.c
===================================================================
--- sys/vm/vm_map.c
+++ sys/vm/vm_map.c
@@ -596,10 +596,50 @@
}
}
+#ifdef INVARIANTS
+static void
+_vm_map_assert_locked(vm_map_t map, const char *file, int line)
+{
+
+ if (map->system_map)
+ mtx_assert_(&map->system_mtx, MA_OWNED, file, line);
+ else
+ sx_assert_(&map->lock, SA_XLOCKED, file, line);
+}
+
+#define VM_MAP_ASSERT_LOCKED(map) \
+ _vm_map_assert_locked(map, LOCK_FILE, LOCK_LINE)
+
+enum { VMMAP_CHECK_NONE, VMMAP_CHECK_UNLOCK, VMMAP_CHECK_ALL };
+#ifdef DIAGNOSTIC
+static int enable_vmmap_check = VMMAP_CHECK_UNLOCK;
+#else
+static int enable_vmmap_check = VMMAP_CHECK_NONE;
+#endif
+SYSCTL_INT(_debug, OID_AUTO, vmmap_check, CTLFLAG_RWTUN,
+ &enable_vmmap_check, 0, "Enable vm map consistency checking");
+
+static void _vm_map_assert_consistent(vm_map_t map, int check);
+
+#define VM_MAP_ASSERT_CONSISTENT(map) \
+ _vm_map_assert_consistent(map, VMMAP_CHECK_ALL)
+#define VM_MAP_UNLOCK_CONSISTENT(map) do { \
+ if (map->updates > map->nentries) { \
+ _vm_map_assert_consistent(map, VMMAP_CHECK_UNLOCK); \
+ map->updates = 0; \
+ } \
+} while (0)
+#else
+#define VM_MAP_ASSERT_LOCKED(map)
+#define VM_MAP_ASSERT_CONSISTENT(map)
+#define VM_MAP_UNLOCK_CONSISTENT(map)
+#endif /* INVARIANTS */
+
void
_vm_map_unlock(vm_map_t map, const char *file, int line)
{
+ VM_MAP_UNLOCK_CONSISTENT(map);
if (map->system_map)
mtx_unlock_flags_(&map->system_mtx, 0, file, line);
else {
@@ -697,8 +737,10 @@
if (map->system_map) {
mtx_assert_(&map->system_mtx, MA_OWNED, file, line);
- } else
+ } else {
+ VM_MAP_UNLOCK_CONSISTENT(map);
sx_downgrade_(&map->lock, file, line);
+ }
}
/*
@@ -717,37 +759,6 @@
return (sx_xlocked(&map->lock));
}
-#ifdef INVARIANTS
-static void
-_vm_map_assert_locked(vm_map_t map, const char *file, int line)
-{
-
- if (map->system_map)
- mtx_assert_(&map->system_mtx, MA_OWNED, file, line);
- else
- sx_assert_(&map->lock, SA_XLOCKED, file, line);
-}
-
-#define VM_MAP_ASSERT_LOCKED(map) \
- _vm_map_assert_locked(map, LOCK_FILE, LOCK_LINE)
-
-#ifdef DIAGNOSTIC
-static int enable_vmmap_check = 1;
-#else
-static int enable_vmmap_check = 0;
-#endif
-SYSCTL_INT(_debug, OID_AUTO, vmmap_check, CTLFLAG_RWTUN,
- &enable_vmmap_check, 0, "Enable vm map consistency checking");
-
-static void _vm_map_assert_consistent(vm_map_t map);
-
-#define VM_MAP_ASSERT_CONSISTENT(map) \
- _vm_map_assert_consistent(map)
-#else
-#define VM_MAP_ASSERT_LOCKED(map)
-#define VM_MAP_ASSERT_CONSISTENT(map)
-#endif /* INVARIANTS */
-
/*
* _vm_map_unlock_and_wait:
*
@@ -766,6 +777,7 @@
_vm_map_unlock_and_wait(vm_map_t map, int timo, const char *file, int line)
{
+ VM_MAP_UNLOCK_CONSISTENT(map);
mtx_lock(&map_sleep_mtx);
if (map->system_map)
mtx_unlock_flags_(&map->system_mtx, 0, file, line);
@@ -1132,6 +1144,9 @@
}
root->max_free = MAX(max_free_left, max_free_right);
map->root = root;
+#ifdef DIAGNOSTIC
+ ++map->nupdates;
+#endif
}
/*
@@ -1330,8 +1345,10 @@
* on a temporary upgrade.
*/
cur = vm_map_splay(map, address);
- if (!locked)
+ if (!locked) {
+ VM_MAP_UNLOCK_CONSISTENT(map);
sx_downgrade(&map->lock);
+ }
/*
* If "address" is contained within a map entry, the new root
@@ -4786,12 +4803,12 @@
#ifdef INVARIANTS
static void
-_vm_map_assert_consistent(vm_map_t map)
+_vm_map_assert_consistent(vm_map_t map, int check)
{
vm_map_entry_t entry, prev;
vm_size_t max_left, max_right;
- if (!enable_vmmap_check)
+ if (enable_vmmap_check != check)
return;
prev = &map->header;
File Metadata
Details
Attached
Mime Type
text/plain
Expires
Mon, Apr 6, 3:59 AM (6 h, 32 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
30935611
Default Alt Text
D22163.id63797.diff (3 KB)
Attached To
Mode
D22163: reduce vm_map consistency assertions
Attached
Detach File
Event Timeline
Log In to Comment