svn commit: r363243 - stable/12/sys/vm
Mark Johnston
markj at FreeBSD.org
Thu Jul 16 13:37:12 UTC 2020
Author: markj
Date: Thu Jul 16 13:37:11 2020
New Revision: 363243
URL: https://svnweb.freebsd.org/changeset/base/363243
Log:
MFC r363158:
Add vm_map_valid_range_KBI().
Modified:
stable/12/sys/vm/vm_map.c
stable/12/sys/vm/vm_map.h
Directory Properties:
stable/12/ (props changed)
Modified: stable/12/sys/vm/vm_map.c
==============================================================================
--- stable/12/sys/vm/vm_map.c Thu Jul 16 11:28:24 2020 (r363242)
+++ stable/12/sys/vm/vm_map.c Thu Jul 16 13:37:11 2020 (r363243)
@@ -4853,6 +4853,79 @@ vm_map_pmap_KBI(vm_map_t map)
return (map->pmap);
}
+bool
+vm_map_range_valid_KBI(vm_map_t map, vm_offset_t start, vm_offset_t end)
+{
+
+ return (vm_map_range_valid(map, start, end));
+}
+
+#ifdef INVARIANTS
+static void
+_vm_map_assert_consistent(vm_map_t map, int check)
+{
+ vm_map_entry_t entry, prev;
+ vm_map_entry_t cur, header, lbound, ubound;
+ vm_size_t max_left, max_right;
+
+#ifdef DIAGNOSTIC
+ ++map->nupdates;
+#endif
+ if (enable_vmmap_check != check)
+ return;
+
+ header = prev = &map->header;
+ VM_MAP_ENTRY_FOREACH(entry, map) {
+ KASSERT(prev->end <= entry->start,
+ ("map %p prev->end = %jx, start = %jx", map,
+ (uintmax_t)prev->end, (uintmax_t)entry->start));
+ KASSERT(entry->start < entry->end,
+ ("map %p start = %jx, end = %jx", map,
+ (uintmax_t)entry->start, (uintmax_t)entry->end));
+ KASSERT(entry->left == header ||
+ entry->left->start < entry->start,
+ ("map %p left->start = %jx, start = %jx", map,
+ (uintmax_t)entry->left->start, (uintmax_t)entry->start));
+ KASSERT(entry->right == header ||
+ entry->start < entry->right->start,
+ ("map %p start = %jx, right->start = %jx", map,
+ (uintmax_t)entry->start, (uintmax_t)entry->right->start));
+ cur = map->root;
+ lbound = ubound = header;
+ for (;;) {
+ if (entry->start < cur->start) {
+ ubound = cur;
+ cur = cur->left;
+ KASSERT(cur != lbound,
+ ("map %p cannot find %jx",
+ map, (uintmax_t)entry->start));
+ } else if (cur->end <= entry->start) {
+ lbound = cur;
+ cur = cur->right;
+ KASSERT(cur != ubound,
+ ("map %p cannot find %jx",
+ map, (uintmax_t)entry->start));
+ } else {
+ KASSERT(cur == entry,
+ ("map %p cannot find %jx",
+ map, (uintmax_t)entry->start));
+ break;
+ }
+ }
+ max_left = vm_map_entry_max_free_left(entry, lbound);
+ max_right = vm_map_entry_max_free_right(entry, ubound);
+ KASSERT(entry->max_free == vm_size_max(max_left, max_right),
+ ("map %p max = %jx, max_left = %jx, max_right = %jx", map,
+ (uintmax_t)entry->max_free,
+ (uintmax_t)max_left, (uintmax_t)max_right));
+ prev = entry;
+ }
+ KASSERT(prev->end <= entry->start,
+ ("map %p prev->end = %jx, start = %jx", map,
+ (uintmax_t)prev->end, (uintmax_t)entry->start));
+}
+#endif
+
#include "opt_ddb.h"
#ifdef DDB
#include <sys/kernel.h>
Modified: stable/12/sys/vm/vm_map.h
==============================================================================
--- stable/12/sys/vm/vm_map.h Thu Jul 16 11:28:24 2020 (r363242)
+++ stable/12/sys/vm/vm_map.h Thu Jul 16 13:37:11 2020 (r363243)
@@ -224,6 +224,8 @@ struct vm_map {
#define vm_map_max(map) vm_map_max_KBI((map))
#define vm_map_min(map) vm_map_min_KBI((map))
#define vm_map_pmap(map) vm_map_pmap_KBI((map))
+#define vm_map_range_valid(map, start, end) \
+ vm_map_range_valid_KBI((map), (start), (end))
#else
static __inline vm_offset_t
vm_map_max(const struct vm_map *map)
@@ -325,6 +327,7 @@ void vm_map_wait_busy(vm_map_t map);
vm_offset_t vm_map_max_KBI(const struct vm_map *map);
vm_offset_t vm_map_min_KBI(const struct vm_map *map);
pmap_t vm_map_pmap_KBI(vm_map_t map);
+bool vm_map_range_valid_KBI(vm_map_t map, vm_offset_t start, vm_offset_t end);
#define vm_map_lock(map) _vm_map_lock(map, LOCK_FILE, LOCK_LINE)
#define vm_map_unlock(map) _vm_map_unlock(map, LOCK_FILE, LOCK_LINE)
More information about the svn-src-stable
mailing list