Deleted Added
full compact
vm_object.c (15367) vm_object.c (15809)
1/*
2 * Copyright (c) 1991, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * The Mach Operating System project at Carnegie-Mellon University.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 47 unchanged lines hidden (view full) ---

56 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
57 * School of Computer Science
58 * Carnegie Mellon University
59 * Pittsburgh PA 15213-3890
60 *
61 * any improvements or extensions that they make and grant Carnegie the
62 * rights to redistribute these changes.
63 *
1/*
2 * Copyright (c) 1991, 1993
3 * The Regents of the University of California. All rights reserved.
4 *
5 * This code is derived from software contributed to Berkeley by
6 * The Mach Operating System project at Carnegie-Mellon University.
7 *
8 * Redistribution and use in source and binary forms, with or without

--- 47 unchanged lines hidden (view full) ---

56 * Software Distribution Coordinator or Software.Distribution@CS.CMU.EDU
57 * School of Computer Science
58 * Carnegie Mellon University
59 * Pittsburgh PA 15213-3890
60 *
61 * any improvements or extensions that they make and grant Carnegie the
62 * rights to redistribute these changes.
63 *
64 * $Id: vm_object.c,v 1.67 1996/03/29 06:28:48 davidg Exp $
64 * $Id: vm_object.c,v 1.68 1996/04/24 04:16:45 dyson Exp $
65 */
66
67/*
68 * Virtual memory object module.
69 */
70#include "opt_ddb.h"
71
72#include <sys/param.h>

--- 200 unchanged lines hidden (view full) ---

273 */
274 object->ref_count--;
275 if (object->ref_count != 0) {
276 if ((object->ref_count == 1) &&
277 (object->handle == NULL) &&
278 (object->type == OBJT_DEFAULT ||
279 object->type == OBJT_SWAP)) {
280 vm_object_t robject;
65 */
66
67/*
68 * Virtual memory object module.
69 */
70#include "opt_ddb.h"
71
72#include <sys/param.h>

--- 200 unchanged lines hidden (view full) ---

273 */
274 object->ref_count--;
275 if (object->ref_count != 0) {
276 if ((object->ref_count == 1) &&
277 (object->handle == NULL) &&
278 (object->type == OBJT_DEFAULT ||
279 object->type == OBJT_SWAP)) {
280 vm_object_t robject;
281 robject = object->shadow_head.tqh_first;
281 robject = TAILQ_FIRST(&object->shadow_head);
282 if ((robject != NULL) &&
283 (robject->handle == NULL) &&
284 (robject->type == OBJT_DEFAULT ||
285 robject->type == OBJT_SWAP)) {
286 int s;
287 robject->ref_count += 2;
288 object->ref_count += 2;
289
290 do {
282 if ((robject != NULL) &&
283 (robject->handle == NULL) &&
284 (robject->type == OBJT_DEFAULT ||
285 robject->type == OBJT_SWAP)) {
286 int s;
287 robject->ref_count += 2;
288 object->ref_count += 2;
289
290 do {
291 s = splhigh();
291 s = splvm();
292 while (robject->paging_in_progress) {
293 robject->flags |= OBJ_PIPWNT;
294 tsleep(robject, PVM, "objde1", 0);
295 }
296
297 while (object->paging_in_progress) {
298 object->flags |= OBJ_PIPWNT;
299 tsleep(object, PVM, "objde2", 0);

--- 70 unchanged lines hidden (view full) ---

370 register vm_object_t object;
371{
372 register vm_page_t p;
373 int s;
374
375 /*
376 * wait for the pageout daemon to be done with the object
377 */
292 while (robject->paging_in_progress) {
293 robject->flags |= OBJ_PIPWNT;
294 tsleep(robject, PVM, "objde1", 0);
295 }
296
297 while (object->paging_in_progress) {
298 object->flags |= OBJ_PIPWNT;
299 tsleep(object, PVM, "objde2", 0);

--- 70 unchanged lines hidden (view full) ---

370 register vm_object_t object;
371{
372 register vm_page_t p;
373 int s;
374
375 /*
376 * wait for the pageout daemon to be done with the object
377 */
378 s = splhigh();
378 s = splvm();
379 while (object->paging_in_progress) {
380 object->flags |= OBJ_PIPWNT;
381 tsleep(object, PVM, "objtrm", 0);
382 }
383 splx(s);
384
385 if (object->paging_in_progress != 0)
386 panic("vm_object_deallocate: pageout in progress");

--- 10 unchanged lines hidden (view full) ---

397 vinvalbuf(vp, V_SAVE, NOCRED, NULL, 0, 0);
398 VOP_UNLOCK(vp);
399 }
400
401 /*
402 * Now free the pages. For internal objects, this also removes them
403 * from paging queues.
404 */
379 while (object->paging_in_progress) {
380 object->flags |= OBJ_PIPWNT;
381 tsleep(object, PVM, "objtrm", 0);
382 }
383 splx(s);
384
385 if (object->paging_in_progress != 0)
386 panic("vm_object_deallocate: pageout in progress");

--- 10 unchanged lines hidden (view full) ---

397 vinvalbuf(vp, V_SAVE, NOCRED, NULL, 0, 0);
398 VOP_UNLOCK(vp);
399 }
400
401 /*
402 * Now free the pages. For internal objects, this also removes them
403 * from paging queues.
404 */
405 while ((p = object->memq.tqh_first) != NULL) {
405 while ((p = TAILQ_FIRST(&object->memq)) != NULL) {
406 if (p->flags & PG_BUSY)
407 printf("vm_object_terminate: freeing busy page\n");
406 if (p->flags & PG_BUSY)
407 printf("vm_object_terminate: freeing busy page\n");
408 vm_page_protect(p, VM_PROT_NONE);
408 PAGE_WAKEUP(p);
409 vm_page_free(p);
410 cnt.v_pfree++;
411 }
412
413 /*
414 * Let the pager know object is dead.
415 */

--- 57 unchanged lines hidden (view full) ---

473 if (end == 0) {
474 tend = object->size;
475 } else {
476 tend = end;
477 }
478 if ((tstart == 0) && (tend == object->size)) {
479 object->flags &= ~(OBJ_WRITEABLE|OBJ_MIGHTBEDIRTY);
480 }
409 PAGE_WAKEUP(p);
410 vm_page_free(p);
411 cnt.v_pfree++;
412 }
413
414 /*
415 * Let the pager know object is dead.
416 */

--- 57 unchanged lines hidden (view full) ---

474 if (end == 0) {
475 tend = object->size;
476 } else {
477 tend = end;
478 }
479 if ((tstart == 0) && (tend == object->size)) {
480 object->flags &= ~(OBJ_WRITEABLE|OBJ_MIGHTBEDIRTY);
481 }
481 for(p = object->memq.tqh_first; p; p = p->listq.tqe_next)
482 for(p = TAILQ_FIRST(&object->memq); p; p = TAILQ_NEXT(p, listq))
482 p->flags |= PG_CLEANCHK;
483
484rescan:
483 p->flags |= PG_CLEANCHK;
484
485rescan:
485 for(p = object->memq.tqh_first; p; p = np) {
486 np = p->listq.tqe_next;
486 for(p = TAILQ_FIRST(&object->memq); p; p = np) {
487 np = TAILQ_NEXT(p, listq);
487
488 pi = p->pindex;
489 if (((p->flags & PG_CLEANCHK) == 0) ||
490 (pi < tstart) || (pi >= tend) ||
491 (p->valid == 0) || (p->queue == PQ_CACHE)) {
492 p->flags &= ~PG_CLEANCHK;
493 continue;
494 }
495
496 vm_page_test_dirty(p);
497 if ((p->dirty & p->valid) == 0) {
498 p->flags &= ~PG_CLEANCHK;
499 continue;
500 }
501
488
489 pi = p->pindex;
490 if (((p->flags & PG_CLEANCHK) == 0) ||
491 (pi < tstart) || (pi >= tend) ||
492 (p->valid == 0) || (p->queue == PQ_CACHE)) {
493 p->flags &= ~PG_CLEANCHK;
494 continue;
495 }
496
497 vm_page_test_dirty(p);
498 if ((p->dirty & p->valid) == 0) {
499 p->flags &= ~PG_CLEANCHK;
500 continue;
501 }
502
502 s = splhigh();
503 s = splvm();
503 if ((p->flags & PG_BUSY) || p->busy) {
504 p->flags |= PG_WANTED|PG_REFERENCED;
505 tsleep(p, PVM, "vpcwai", 0);
506 splx(s);
507 goto rescan;
508 }
509 splx(s);
510

--- 81 unchanged lines hidden (view full) ---

592 * The object must be locked.
593 */
594static void
595vm_object_deactivate_pages(object)
596 register vm_object_t object;
597{
598 register vm_page_t p, next;
599
504 if ((p->flags & PG_BUSY) || p->busy) {
505 p->flags |= PG_WANTED|PG_REFERENCED;
506 tsleep(p, PVM, "vpcwai", 0);
507 splx(s);
508 goto rescan;
509 }
510 splx(s);
511

--- 81 unchanged lines hidden (view full) ---

593 * The object must be locked.
594 */
595static void
596vm_object_deactivate_pages(object)
597 register vm_object_t object;
598{
599 register vm_page_t p, next;
600
600 for (p = object->memq.tqh_first; p != NULL; p = next) {
601 next = p->listq.tqe_next;
601 for (p = TAILQ_FIRST(&object->memq); p != NULL; p = next) {
602 next = TAILQ_NEXT(p, listq);
602 vm_page_deactivate(p);
603 }
604}
605#endif
606
607/*
608 * Trim the object cache to size.
609 */
610static void
611vm_object_cache_trim()
612{
613 register vm_object_t object;
614
615 while (vm_object_cached > vm_object_cache_max) {
603 vm_page_deactivate(p);
604 }
605}
606#endif
607
608/*
609 * Trim the object cache to size.
610 */
611static void
612vm_object_cache_trim()
613{
614 register vm_object_t object;
615
616 while (vm_object_cached > vm_object_cache_max) {
616 object = vm_object_cached_list.tqh_first;
617 object = TAILQ_FIRST(&vm_object_cached_list);
617
618 vm_object_reference(object);
619 pager_cache(object, FALSE);
620 }
621}
622
623
624/*

--- 11 unchanged lines hidden (view full) ---

636 register vm_pindex_t start;
637 register vm_pindex_t end;
638{
639 register vm_page_t p;
640
641 if (object == NULL || (object->flags & OBJ_WRITEABLE) == 0)
642 return;
643
618
619 vm_object_reference(object);
620 pager_cache(object, FALSE);
621 }
622}
623
624
625/*

--- 11 unchanged lines hidden (view full) ---

637 register vm_pindex_t start;
638 register vm_pindex_t end;
639{
640 register vm_page_t p;
641
642 if (object == NULL || (object->flags & OBJ_WRITEABLE) == 0)
643 return;
644
644 for (p = object->memq.tqh_first; p != NULL; p = p->listq.tqe_next) {
645 for (p = TAILQ_FIRST(&object->memq); p != NULL; p = TAILQ_NEXT(p, listq)) {
645 vm_page_protect(p, VM_PROT_READ);
646 }
647
648 object->flags &= ~OBJ_WRITEABLE;
649}
650
651/*
652 * vm_object_pmap_remove:

--- 7 unchanged lines hidden (view full) ---

660vm_object_pmap_remove(object, start, end)
661 register vm_object_t object;
662 register vm_pindex_t start;
663 register vm_pindex_t end;
664{
665 register vm_page_t p;
666 if (object == NULL)
667 return;
646 vm_page_protect(p, VM_PROT_READ);
647 }
648
649 object->flags &= ~OBJ_WRITEABLE;
650}
651
652/*
653 * vm_object_pmap_remove:

--- 7 unchanged lines hidden (view full) ---

661vm_object_pmap_remove(object, start, end)
662 register vm_object_t object;
663 register vm_pindex_t start;
664 register vm_pindex_t end;
665{
666 register vm_page_t p;
667 if (object == NULL)
668 return;
668 for (p = object->memq.tqh_first; p != NULL; p = p->listq.tqe_next) {
669 for (p = TAILQ_FIRST(&object->memq); p != NULL; p = TAILQ_NEXT(p, listq)) {
669 if (p->pindex >= start && p->pindex < end)
670 vm_page_protect(p, VM_PROT_NONE);
671 }
672}
673
674/*
675 * vm_object_copy:
676 *

--- 126 unchanged lines hidden (view full) ---

803 return;
804
805 backing_object->ref_count += 2;
806
807 backing_offset_index = OFF_TO_IDX(object->backing_object_offset);
808 backing_object_paging_offset_index = OFF_TO_IDX(backing_object->paging_offset);
809 paging_offset_index = OFF_TO_IDX(object->paging_offset);
810 size = object->size;
670 if (p->pindex >= start && p->pindex < end)
671 vm_page_protect(p, VM_PROT_NONE);
672 }
673}
674
675/*
676 * vm_object_copy:
677 *

--- 126 unchanged lines hidden (view full) ---

804 return;
805
806 backing_object->ref_count += 2;
807
808 backing_offset_index = OFF_TO_IDX(object->backing_object_offset);
809 backing_object_paging_offset_index = OFF_TO_IDX(backing_object->paging_offset);
810 paging_offset_index = OFF_TO_IDX(object->paging_offset);
811 size = object->size;
811 p = backing_object->memq.tqh_first;
812 p = TAILQ_FIRST(&backing_object->memq);
812 while (p) {
813 vm_page_t next;
814
813 while (p) {
814 vm_page_t next;
815
815 next = p->listq.tqe_next;
816 next = TAILQ_NEXT(p, listq);
816 if ((p->flags & (PG_BUSY | PG_FICTITIOUS)) ||
817 (p->queue == PQ_CACHE) || !p->valid || p->hold_count || p->wire_count || p->busy) {
818 p = next;
819 continue;
820 }
817 if ((p->flags & (PG_BUSY | PG_FICTITIOUS)) ||
818 (p->queue == PQ_CACHE) || !p->valid || p->hold_count || p->wire_count || p->busy) {
819 p = next;
820 continue;
821 }
821 vm_page_protect(p, VM_PROT_NONE);
822 new_pindex = p->pindex - backing_offset_index;
823 if (p->pindex < backing_offset_index ||
824 new_pindex >= size) {
825 if (backing_object->type == OBJT_SWAP)
826 swap_pager_freespace(backing_object,
827 backing_object_paging_offset_index+p->pindex,
828 1);
822 new_pindex = p->pindex - backing_offset_index;
823 if (p->pindex < backing_offset_index ||
824 new_pindex >= size) {
825 if (backing_object->type == OBJT_SWAP)
826 swap_pager_freespace(backing_object,
827 backing_object_paging_offset_index+p->pindex,
828 1);
829 vm_page_protect(p, VM_PROT_NONE);
829 vm_page_free(p);
830 } else {
831 pp = vm_page_lookup(object, new_pindex);
832 if (pp != NULL || (object->type == OBJT_SWAP && vm_pager_has_page(object,
833 paging_offset_index + new_pindex, NULL, NULL))) {
834 if (backing_object->type == OBJT_SWAP)
835 swap_pager_freespace(backing_object,
836 backing_object_paging_offset_index + p->pindex, 1);
830 vm_page_free(p);
831 } else {
832 pp = vm_page_lookup(object, new_pindex);
833 if (pp != NULL || (object->type == OBJT_SWAP && vm_pager_has_page(object,
834 paging_offset_index + new_pindex, NULL, NULL))) {
835 if (backing_object->type == OBJT_SWAP)
836 swap_pager_freespace(backing_object,
837 backing_object_paging_offset_index + p->pindex, 1);
838 vm_page_protect(p, VM_PROT_NONE);
837 vm_page_free(p);
838 } else {
839 if (backing_object->type == OBJT_SWAP)
840 swap_pager_freespace(backing_object,
841 backing_object_paging_offset_index + p->pindex, 1);
842 vm_page_rename(p, object, new_pindex);
843 p->dirty = VM_PAGE_BITS_ALL;
844 }

--- 80 unchanged lines hidden (view full) ---

925 * We can collapse the backing object.
926 *
927 * Move all in-memory pages from backing_object to the
928 * parent. Pages that have been paged out will be
929 * overwritten by any of the parent's pages that
930 * shadow them.
931 */
932
839 vm_page_free(p);
840 } else {
841 if (backing_object->type == OBJT_SWAP)
842 swap_pager_freespace(backing_object,
843 backing_object_paging_offset_index + p->pindex, 1);
844 vm_page_rename(p, object, new_pindex);
845 p->dirty = VM_PAGE_BITS_ALL;
846 }

--- 80 unchanged lines hidden (view full) ---

927 * We can collapse the backing object.
928 *
929 * Move all in-memory pages from backing_object to the
930 * parent. Pages that have been paged out will be
931 * overwritten by any of the parent's pages that
932 * shadow them.
933 */
934
933 while ((p = backing_object->memq.tqh_first) != 0) {
935 while ((p = TAILQ_FIRST(&backing_object->memq)) != 0) {
934
935 new_pindex = p->pindex - backing_offset_index;
936
937 /*
938 * If the parent has a page here, or if this
939 * page falls outside the parent, dispose of
940 * it.
941 *

--- 124 unchanged lines hidden (view full) ---

1066 if (backing_object->type != OBJT_DEFAULT) {
1067 return;
1068 }
1069 /*
1070 * Should have a check for a 'small' number of pages
1071 * here.
1072 */
1073
936
937 new_pindex = p->pindex - backing_offset_index;
938
939 /*
940 * If the parent has a page here, or if this
941 * page falls outside the parent, dispose of
942 * it.
943 *

--- 124 unchanged lines hidden (view full) ---

1068 if (backing_object->type != OBJT_DEFAULT) {
1069 return;
1070 }
1071 /*
1072 * Should have a check for a 'small' number of pages
1073 * here.
1074 */
1075
1074 for (p = backing_object->memq.tqh_first; p; p = p->listq.tqe_next) {
1076 for (p = TAILQ_FIRST(&backing_object->memq); p; p = TAILQ_NEXT(p, listq)) {
1075 new_pindex = p->pindex - backing_offset_index;
1076
1077 /*
1078 * If the parent has a page here, or if this
1079 * page falls outside the parent, keep going.
1080 *
1081 * Otherwise, the backing_object must be left in
1082 * the chain.

--- 72 unchanged lines hidden (view full) ---

1155
1156 if (object == NULL)
1157 return;
1158
1159 object->paging_in_progress++;
1160again:
1161 size = end - start;
1162 if (size > 4 || size >= object->size / 4) {
1077 new_pindex = p->pindex - backing_offset_index;
1078
1079 /*
1080 * If the parent has a page here, or if this
1081 * page falls outside the parent, keep going.
1082 *
1083 * Otherwise, the backing_object must be left in
1084 * the chain.

--- 72 unchanged lines hidden (view full) ---

1157
1158 if (object == NULL)
1159 return;
1160
1161 object->paging_in_progress++;
1162again:
1163 size = end - start;
1164 if (size > 4 || size >= object->size / 4) {
1163 for (p = object->memq.tqh_first; p != NULL; p = next) {
1164 next = p->listq.tqe_next;
1165 for (p = TAILQ_FIRST(&object->memq); p != NULL; p = next) {
1166 next = TAILQ_NEXT(p, listq);
1165 if ((start <= p->pindex) && (p->pindex < end)) {
1167 if ((start <= p->pindex) && (p->pindex < end)) {
1166
1167 if (p->wire_count != 0) {
1168 vm_page_protect(p, VM_PROT_NONE);
1169 p->valid = 0;
1170 continue;
1171 }
1172
1168 if (p->wire_count != 0) {
1169 vm_page_protect(p, VM_PROT_NONE);
1170 p->valid = 0;
1171 continue;
1172 }
1173
1173 s = splhigh();
1174 /*
1175 * The busy flags are only cleared at
1176 * interrupt -- minimize the spl transitions
1177 */
1174 if ((p->flags & PG_BUSY) || p->busy) {
1178 if ((p->flags & PG_BUSY) || p->busy) {
1175 p->flags |= PG_WANTED;
1176 tsleep(p, PVM, "vmopar", 0);
1179 s = splvm();
1180 if ((p->flags & PG_BUSY) || p->busy) {
1181 p->flags |= PG_WANTED;
1182 tsleep(p, PVM, "vmopar", 0);
1183 splx(s);
1184 goto again;
1185 }
1177 splx(s);
1186 splx(s);
1178 goto again;
1179 }
1187 }
1180 splx(s);
1181
1182 if (clean_only) {
1183 vm_page_test_dirty(p);
1184 if (p->valid & p->dirty)
1185 continue;
1186 }
1187 vm_page_protect(p, VM_PROT_NONE);
1188 PAGE_WAKEUP(p);

--- 5 unchanged lines hidden (view full) ---

1194 if ((p = vm_page_lookup(object, start)) != 0) {
1195 if (p->wire_count != 0) {
1196 p->valid = 0;
1197 vm_page_protect(p, VM_PROT_NONE);
1198 start += 1;
1199 size -= 1;
1200 continue;
1201 }
1188
1189 if (clean_only) {
1190 vm_page_test_dirty(p);
1191 if (p->valid & p->dirty)
1192 continue;
1193 }
1194 vm_page_protect(p, VM_PROT_NONE);
1195 PAGE_WAKEUP(p);

--- 5 unchanged lines hidden (view full) ---

1201 if ((p = vm_page_lookup(object, start)) != 0) {
1202 if (p->wire_count != 0) {
1203 p->valid = 0;
1204 vm_page_protect(p, VM_PROT_NONE);
1205 start += 1;
1206 size -= 1;
1207 continue;
1208 }
1202 s = splhigh();
1209 /*
1210 * The busy flags are only cleared at
1211 * interrupt -- minimize the spl transitions
1212 */
1203 if ((p->flags & PG_BUSY) || p->busy) {
1213 if ((p->flags & PG_BUSY) || p->busy) {
1204 p->flags |= PG_WANTED;
1205 tsleep(p, PVM, "vmopar", 0);
1214 s = splvm();
1215 if ((p->flags & PG_BUSY) || p->busy) {
1216 p->flags |= PG_WANTED;
1217 tsleep(p, PVM, "vmopar", 0);
1218 splx(s);
1219 goto again;
1220 }
1206 splx(s);
1221 splx(s);
1207 goto again;
1208 }
1222 }
1209 splx(s);
1210 if (clean_only) {
1211 vm_page_test_dirty(p);
1212 if (p->valid & p->dirty) {
1213 start += 1;
1214 size -= 1;
1215 continue;
1216 }
1217 }

--- 168 unchanged lines hidden (view full) ---

1386DDB_vm_object_check()
1387{
1388 vm_object_t object;
1389
1390 /*
1391 * make sure that internal objs are in a map somewhere
1392 * and none have zero ref counts.
1393 */
1223 if (clean_only) {
1224 vm_page_test_dirty(p);
1225 if (p->valid & p->dirty) {
1226 start += 1;
1227 size -= 1;
1228 continue;
1229 }
1230 }

--- 168 unchanged lines hidden (view full) ---

1399DDB_vm_object_check()
1400{
1401 vm_object_t object;
1402
1403 /*
1404 * make sure that internal objs are in a map somewhere
1405 * and none have zero ref counts.
1406 */
1394 for (object = vm_object_list.tqh_first;
1407 for (object = TAILQ_FIRST(&vm_object_list);
1395 object != NULL;
1408 object != NULL;
1396 object = object->object_list.tqe_next) {
1409 object = TAILQ_NEXT(object, object_list)) {
1397 if (object->handle == NULL &&
1398 (object->type == OBJT_DEFAULT || object->type == OBJT_SWAP)) {
1399 if (object->ref_count == 0) {
1400 printf("vmochk: internal obj has zero ref count: %d\n",
1401 object->size);
1402 }
1403 if (!vm_object_in_map(object)) {
1404 printf("vmochk: internal obj is not in a map: "

--- 26 unchanged lines hidden (view full) ---

1431
1432 iprintf("Object 0x%x: size=0x%x, res=%d, ref=%d, ",
1433 (int) object, (int) object->size,
1434 object->resident_page_count, object->ref_count);
1435 printf("offset=0x%x, backing_object=(0x%x)+0x%x\n",
1436 (int) object->paging_offset,
1437 (int) object->backing_object, (int) object->backing_object_offset);
1438 printf("cache: next=%p, prev=%p\n",
1410 if (object->handle == NULL &&
1411 (object->type == OBJT_DEFAULT || object->type == OBJT_SWAP)) {
1412 if (object->ref_count == 0) {
1413 printf("vmochk: internal obj has zero ref count: %d\n",
1414 object->size);
1415 }
1416 if (!vm_object_in_map(object)) {
1417 printf("vmochk: internal obj is not in a map: "

--- 26 unchanged lines hidden (view full) ---

1444
1445 iprintf("Object 0x%x: size=0x%x, res=%d, ref=%d, ",
1446 (int) object, (int) object->size,
1447 object->resident_page_count, object->ref_count);
1448 printf("offset=0x%x, backing_object=(0x%x)+0x%x\n",
1449 (int) object->paging_offset,
1450 (int) object->backing_object, (int) object->backing_object_offset);
1451 printf("cache: next=%p, prev=%p\n",
1439 object->cached_list.tqe_next, object->cached_list.tqe_prev);
1452 TAILQ_NEXT(object, cached_list), TAILQ_PREV(object, cached_list));
1440
1441 if (!full)
1442 return;
1443
1444 indent += 2;
1445 count = 0;
1453
1454 if (!full)
1455 return;
1456
1457 indent += 2;
1458 count = 0;
1446 for (p = object->memq.tqh_first; p != NULL; p = p->listq.tqe_next) {
1459 for (p = TAILQ_FIRST(&object->memq); p != NULL; p = TAILQ_NEXT(p, listq)) {
1447 if (count == 0)
1448 iprintf("memory:=");
1449 else if (count == 6) {
1450 printf("\n");
1451 iprintf(" ...");
1452 count = 0;
1453 } else
1454 printf(",");
1455 count++;
1456
1457 printf("(off=0x%lx,page=0x%lx)",
1458 (u_long) p->pindex, (u_long) VM_PAGE_TO_PHYS(p));
1459 }
1460 if (count != 0)
1461 printf("\n");
1462 indent -= 2;
1463}
1464#endif /* DDB */
1460 if (count == 0)
1461 iprintf("memory:=");
1462 else if (count == 6) {
1463 printf("\n");
1464 iprintf(" ...");
1465 count = 0;
1466 } else
1467 printf(",");
1468 count++;
1469
1470 printf("(off=0x%lx,page=0x%lx)",
1471 (u_long) p->pindex, (u_long) VM_PAGE_TO_PHYS(p));
1472 }
1473 if (count != 0)
1474 printf("\n");
1475 indent -= 2;
1476}
1477#endif /* DDB */