git: 98a01518bb5e - main - vm_object: use iterators in DB_SHOW*()
- Go to: [ bottom of page ] [ top of archives ] [ this month ]
Date: Thu, 24 Apr 2025 19:17:59 UTC
The branch main has been updated by dougm:
URL: https://cgit.FreeBSD.org/src/commit/?id=98a01518bb5e0493b314b122e3d3eb4979a8d001
commit 98a01518bb5e0493b314b122e3d3eb4979a8d001
Author: Doug Moore <dougm@FreeBSD.org>
AuthorDate: 2025-04-24 19:16:50 +0000
Commit: Doug Moore <dougm@FreeBSD.org>
CommitDate: 2025-04-24 19:16:50 +0000
vm_object: use iterators in DB_SHOW*()
Replace tailq pointers with iterators in the DB_SHOW* functions.
Reviewed by: kib
Differential Revision: https://reviews.freebsd.org/D49947
---
sys/vm/vm_object.c | 53 ++++++++++++++++++++++-------------------------------
1 file changed, 22 insertions(+), 31 deletions(-)
diff --git a/sys/vm/vm_object.c b/sys/vm/vm_object.c
index 147221c1e7e3..6a13cc1fd2b5 100644
--- a/sys/vm/vm_object.c
+++ b/sys/vm/vm_object.c
@@ -2758,6 +2758,7 @@ DB_SHOW_COMMAND_FLAGS(vmochk, vm_object_check, DB_CMD_MEMSAFE)
*/
DB_SHOW_COMMAND(object, vm_object_print_static)
{
+ struct pctrie_iter pages;
/* XXX convert args. */
vm_object_t object = (vm_object_t)addr;
boolean_t full = have_addr;
@@ -2788,7 +2789,8 @@ DB_SHOW_COMMAND(object, vm_object_print_static)
db_indent += 2;
count = 0;
- TAILQ_FOREACH(p, &object->memq, listq) {
+ vm_page_iter_init(&pages, object);
+ VM_RADIX_FOREACH(p, &pages) {
if (count == 0)
db_iprintf("memory:=");
else if (count == 6) {
@@ -2826,49 +2828,38 @@ vm_object_print(
DB_SHOW_COMMAND_FLAGS(vmopag, vm_object_print_pages, DB_CMD_MEMSAFE)
{
+ struct pctrie_iter pages;
vm_object_t object;
- vm_pindex_t fidx;
- vm_paddr_t pa;
- vm_page_t m, prev_m;
+ vm_page_t m, start_m;
int rcount;
TAILQ_FOREACH(object, &vm_object_list, object_list) {
db_printf("new object: %p\n", (void *)object);
if (db_pager_quit)
return;
-
- rcount = 0;
- fidx = 0;
- pa = -1;
- TAILQ_FOREACH(m, &object->memq, listq) {
- if ((prev_m = TAILQ_PREV(m, pglist, listq)) != NULL &&
- prev_m->pindex + 1 != m->pindex) {
- if (rcount) {
- db_printf(" index(%ld)run(%d)pa(0x%lx)\n",
- (long)fidx, rcount, (long)pa);
- if (db_pager_quit)
- return;
- rcount = 0;
- }
- }
- if (rcount &&
- (VM_PAGE_TO_PHYS(m) == pa + rcount * PAGE_SIZE)) {
- ++rcount;
- continue;
- }
- if (rcount) {
+ start_m = NULL;
+ vm_page_iter_init(&pages, object);
+ VM_RADIX_FOREACH(m, &pages) {
+ if (start_m == NULL) {
+ start_m = m;
+ rcount = 0;
+ } else if (start_m->pindex + rcount != m->pindex ||
+ VM_PAGE_TO_PHYS(start_m) + ptoa(rcount) !=
+ VM_PAGE_TO_PHYS(m)) {
db_printf(" index(%ld)run(%d)pa(0x%lx)\n",
- (long)fidx, rcount, (long)pa);
+ (long)start_m->pindex, rcount,
+ (long)VM_PAGE_TO_PHYS(start_m));
if (db_pager_quit)
return;
+ start_m = m;
+ rcount = 0;
}
- fidx = m->pindex;
- pa = VM_PAGE_TO_PHYS(m);
- rcount = 1;
+ rcount++;
}
- if (rcount) {
+ if (start_m != NULL) {
db_printf(" index(%ld)run(%d)pa(0x%lx)\n",
- (long)fidx, rcount, (long)pa);
+ (long)start_m->pindex, rcount,
+ (long)VM_PAGE_TO_PHYS(start_m));
if (db_pager_quit)
return;
}