git: 98a01518bb5e - main - vm_object: use iterators in DB_SHOW*()

From: Doug Moore <dougm_at_FreeBSD.org>
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;
 		}