Changeset View
Changeset View
Standalone View
Standalone View
sys/i386/i386/pmap.c
Show First 20 Lines • Show All 5,793 Lines • ▼ Show 20 Lines | |||||
#if defined(PMAP_DEBUG) | #if defined(PMAP_DEBUG) | ||||
pmap_pid_dump(int pid) | pmap_pid_dump(int pid) | ||||
{ | { | ||||
pmap_t pmap; | pmap_t pmap; | ||||
struct proc *p; | struct proc *p; | ||||
int npte = 0; | int npte = 0; | ||||
int index; | int index; | ||||
sx_slock(&allproc_lock); | sx_slock(&V_allproc_lock); | ||||
FOREACH_PROC_IN_SYSTEM(p) { | FOREACH_PROC_IN_SYSTEM(p) { | ||||
if (p->p_pid != pid) | if (p->p_pid != pid) | ||||
continue; | continue; | ||||
if (p->p_vmspace) { | if (p->p_vmspace) { | ||||
int i,j; | int i,j; | ||||
index = 0; | index = 0; | ||||
pmap = vmspace_pmap(p->p_vmspace); | pmap = vmspace_pmap(p->p_vmspace); | ||||
for (i = 0; i < NPDEPTD; i++) { | for (i = 0; i < NPDEPTD; i++) { | ||||
pd_entry_t *pde; | pd_entry_t *pde; | ||||
pt_entry_t *pte; | pt_entry_t *pte; | ||||
vm_offset_t base = i << PDRSHIFT; | vm_offset_t base = i << PDRSHIFT; | ||||
pde = &pmap->pm_pdir[i]; | pde = &pmap->pm_pdir[i]; | ||||
if (pde && pmap_pde_v(pde)) { | if (pde && pmap_pde_v(pde)) { | ||||
for (j = 0; j < NPTEPG; j++) { | for (j = 0; j < NPTEPG; j++) { | ||||
vm_offset_t va = base + (j << PAGE_SHIFT); | vm_offset_t va = base + (j << PAGE_SHIFT); | ||||
if (va >= (vm_offset_t) VM_MIN_KERNEL_ADDRESS) { | if (va >= (vm_offset_t) VM_MIN_KERNEL_ADDRESS) { | ||||
if (index) { | if (index) { | ||||
index = 0; | index = 0; | ||||
printf("\n"); | printf("\n"); | ||||
} | } | ||||
sx_sunlock(&allproc_lock); | sx_sunlock(&V_allproc_lock); | ||||
return (npte); | return (npte); | ||||
} | } | ||||
pte = pmap_pte(pmap, va); | pte = pmap_pte(pmap, va); | ||||
if (pte && pmap_pte_v(pte)) { | if (pte && pmap_pte_v(pte)) { | ||||
pt_entry_t pa; | pt_entry_t pa; | ||||
vm_page_t m; | vm_page_t m; | ||||
pa = *pte; | pa = *pte; | ||||
m = PHYS_TO_VM_PAGE(pa & PG_FRAME); | m = PHYS_TO_VM_PAGE(pa & PG_FRAME); | ||||
printf("va: 0x%x, pt: 0x%x, h: %d, w: %d, f: 0x%x", | printf("va: 0x%x, pt: 0x%x, h: %d, w: %d, f: 0x%x", | ||||
va, pa, m->hold_count, m->wire_count, m->flags); | va, pa, m->hold_count, m->wire_count, m->flags); | ||||
npte++; | npte++; | ||||
index++; | index++; | ||||
if (index >= 2) { | if (index >= 2) { | ||||
index = 0; | index = 0; | ||||
printf("\n"); | printf("\n"); | ||||
} else { | } else { | ||||
printf(" "); | printf(" "); | ||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
} | } | ||||
sx_sunlock(&allproc_lock); | sx_sunlock(&V_allproc_lock); | ||||
return (npte); | return (npte); | ||||
} | } | ||||
#endif | #endif |