MCPcopy Create free account
hub / github.com/F-Stack/f-stack / pmap_pid_dump

Function pmap_pid_dump

freebsd/arm/arm/pmap-v6.c:6641–6705  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

6639}
6640
6641int
6642pmap_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 }

Callers

nothing calls this directly

Calls 11

vmspace_pmapFunction · 0.85
pte1_loadFunction · 0.85
pte1_is_sectionFunction · 0.85
pte1_is_linkFunction · 0.85
pmap_pte2Function · 0.85
pte2_loadFunction · 0.85
pmap_pte2_releaseFunction · 0.85
pte2_is_validFunction · 0.85
pte2_paFunction · 0.85
PHYS_TO_VM_PAGEFunction · 0.85
printfFunction · 0.50

Tested by

no test coverage detected