| 5228 | |
| 5229 | #ifdef INVARIANTS |
| 5230 | static void |
| 5231 | _vm_map_assert_consistent(vm_map_t map, int check) |
| 5232 | { |
| 5233 | vm_map_entry_t entry, prev; |
| 5234 | vm_map_entry_t cur, header, lbound, ubound; |
| 5235 | vm_size_t max_left, max_right; |
| 5236 | |
| 5237 | #ifdef DIAGNOSTIC |
| 5238 | ++map->nupdates; |
| 5239 | #endif |
| 5240 | if (enable_vmmap_check != check) |
| 5241 | return; |
| 5242 | |
| 5243 | header = prev = &map->header; |
| 5244 | VM_MAP_ENTRY_FOREACH(entry, map) { |
| 5245 | KASSERT(prev->end <= entry->start, |
| 5246 | ("map %p prev->end = %jx, start = %jx", map, |
| 5247 | (uintmax_t)prev->end, (uintmax_t)entry->start)); |
| 5248 | KASSERT(entry->start < entry->end, |
| 5249 | ("map %p start = %jx, end = %jx", map, |
| 5250 | (uintmax_t)entry->start, (uintmax_t)entry->end)); |
| 5251 | KASSERT(entry->left == header || |
| 5252 | entry->left->start < entry->start, |
| 5253 | ("map %p left->start = %jx, start = %jx", map, |
| 5254 | (uintmax_t)entry->left->start, (uintmax_t)entry->start)); |
| 5255 | KASSERT(entry->right == header || |
| 5256 | entry->start < entry->right->start, |
| 5257 | ("map %p start = %jx, right->start = %jx", map, |
| 5258 | (uintmax_t)entry->start, (uintmax_t)entry->right->start)); |
| 5259 | cur = map->root; |
| 5260 | lbound = ubound = header; |
| 5261 | for (;;) { |
| 5262 | if (entry->start < cur->start) { |
| 5263 | ubound = cur; |
| 5264 | cur = cur->left; |
| 5265 | KASSERT(cur != lbound, |
| 5266 | ("map %p cannot find %jx", |
| 5267 | map, (uintmax_t)entry->start)); |
| 5268 | } else if (cur->end <= entry->start) { |
| 5269 | lbound = cur; |
| 5270 | cur = cur->right; |
| 5271 | KASSERT(cur != ubound, |
| 5272 | ("map %p cannot find %jx", |
| 5273 | map, (uintmax_t)entry->start)); |
| 5274 | } else { |
| 5275 | KASSERT(cur == entry, |
| 5276 | ("map %p cannot find %jx", |
| 5277 | map, (uintmax_t)entry->start)); |
| 5278 | break; |
| 5279 | } |
| 5280 | } |
| 5281 | max_left = vm_map_entry_max_free_left(entry, lbound); |
| 5282 | max_right = vm_map_entry_max_free_right(entry, ubound); |
| 5283 | KASSERT(entry->max_free == vm_size_max(max_left, max_right), |
| 5284 | ("map %p max = %jx, max_left = %jx, max_right = %jx", map, |
| 5285 | (uintmax_t)entry->max_free, |
| 5286 | (uintmax_t)max_left, (uintmax_t)max_right)); |
| 5287 | prev = entry; |
nothing calls this directly
no test coverage detected