| 6639 | } |
| 6640 | |
| 6641 | int |
| 6642 | pmap_pid_dump(int pid) |
| 6643 | { |
| 6644 | pmap_t pmap; |
| 6645 | struct proc *p; |
| 6646 | int npte2 = 0; |
| 6647 | int i, j, index; |
| 6648 | |
| 6649 | sx_slock(&allproc_lock); |
| 6650 | FOREACH_PROC_IN_SYSTEM(p) { |
| 6651 | if (p->p_pid != pid || p->p_vmspace == NULL) |
| 6652 | continue; |
| 6653 | index = 0; |
| 6654 | pmap = vmspace_pmap(p->p_vmspace); |
| 6655 | for (i = 0; i < NPTE1_IN_PT1; i++) { |
| 6656 | pt1_entry_t pte1; |
| 6657 | pt2_entry_t *pte2p, pte2; |
| 6658 | vm_offset_t base, va; |
| 6659 | vm_paddr_t pa; |
| 6660 | vm_page_t m; |
| 6661 | |
| 6662 | base = i << PTE1_SHIFT; |
| 6663 | pte1 = pte1_load(&pmap->pm_pt1[i]); |
| 6664 | |
| 6665 | if (pte1_is_section(pte1)) { |
| 6666 | /* |
| 6667 | * QQQ: Do something here! |
| 6668 | */ |
| 6669 | } else if (pte1_is_link(pte1)) { |
| 6670 | for (j = 0; j < NPTE2_IN_PT2; j++) { |
| 6671 | va = base + (j << PAGE_SHIFT); |
| 6672 | if (va >= VM_MIN_KERNEL_ADDRESS) { |
| 6673 | if (index) { |
| 6674 | index = 0; |
| 6675 | printf("\n"); |
| 6676 | } |
| 6677 | sx_sunlock(&allproc_lock); |
| 6678 | return (npte2); |
| 6679 | } |
| 6680 | pte2p = pmap_pte2(pmap, va); |
| 6681 | pte2 = pte2_load(pte2p); |
| 6682 | pmap_pte2_release(pte2p); |
| 6683 | if (!pte2_is_valid(pte2)) |
| 6684 | continue; |
| 6685 | |
| 6686 | pa = pte2_pa(pte2); |
| 6687 | m = PHYS_TO_VM_PAGE(pa); |
| 6688 | printf("va: 0x%x, pa: 0x%x, w: %d, " |
| 6689 | "f: 0x%x", va, pa, |
| 6690 | m->ref_count, m->flags); |
| 6691 | npte2++; |
| 6692 | index++; |
| 6693 | if (index >= 2) { |
| 6694 | index = 0; |
| 6695 | printf("\n"); |
| 6696 | } else { |
| 6697 | printf(" "); |
| 6698 | } |
nothing calls this directly
no test coverage detected