* Sync with i386 version.
This commit is contained in:
parent
4b2a039488
commit
e9a160096b
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: pmap.c,v 1.15 1996/10/13 03:30:49 christos Exp $ */
|
||||
/* $NetBSD: pmap.c,v 1.16 1996/10/23 07:46:07 matthias Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1993, 1994, 1995 Charles M. Hannum. All rights reserved.
|
||||
|
@ -97,6 +97,9 @@
|
|||
#define BSDVM_COMPAT 1
|
||||
|
||||
#ifdef DEBUG
|
||||
void pmap_pvdump __P((vm_offset_t pa));
|
||||
void pads __P((pmap_t pm)); /* print address space of pmap*/
|
||||
|
||||
struct {
|
||||
int kernel; /* entering kernel mapping */
|
||||
int user; /* entering user mapping */
|
||||
|
@ -320,7 +323,7 @@ pmap_init(phys_start, phys_end)
|
|||
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & PDB_INIT)
|
||||
printf("pmap_init: %x bytes (%x pgs): tbl %x attr %x\n",
|
||||
printf("pmap_init: %lx bytes (%x pgs): tbl %p attr %p\n",
|
||||
s, npages, pv_table, pmap_attributes);
|
||||
#endif
|
||||
|
||||
|
@ -467,15 +470,15 @@ pmap_enter_pv(pmap, va, pind)
|
|||
if (!pmap_initialized)
|
||||
return;
|
||||
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & PDB_ENTER)
|
||||
printf("pmap_enter_pv: pv %x: %x/%x/%x\n",
|
||||
pv, pv->pv_va, pv->pv_pmap, pv->pv_next);
|
||||
#endif
|
||||
|
||||
pv = &pv_table[pind];
|
||||
s = splimp();
|
||||
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & PDB_ENTER)
|
||||
printf("pmap_enter_pv: pv %p: %lx/%p/%p\n",
|
||||
pv, pv->pv_va, pv->pv_pmap, pv->pv_next);
|
||||
#endif
|
||||
|
||||
if (pv->pv_pmap == NULL) {
|
||||
/*
|
||||
* No entries yet, use header as the first entry
|
||||
|
@ -566,7 +569,7 @@ pmap_map(va, spa, epa, prot)
|
|||
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & PDB_FOLLOW)
|
||||
printf("pmap_map(%x, %x, %x, %x)\n", va, spa, epa, prot);
|
||||
printf("pmap_map(%lx, %lx, %lx, %x)\n", va, spa, epa, prot);
|
||||
#endif
|
||||
|
||||
while (spa < epa) {
|
||||
|
@ -600,7 +603,7 @@ pmap_create(size)
|
|||
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & (PDB_FOLLOW|PDB_CREATE))
|
||||
printf("pmap_create(%x)\n", size);
|
||||
printf("pmap_create(%lx)\n", size);
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
@ -626,7 +629,7 @@ pmap_pinit(pmap)
|
|||
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & (PDB_FOLLOW|PDB_CREATE))
|
||||
printf("pmap_pinit(%x)\n", pmap);
|
||||
printf("pmap_pinit(%p)\n", pmap);
|
||||
#endif
|
||||
|
||||
/*
|
||||
|
@ -662,7 +665,7 @@ pmap_destroy(pmap)
|
|||
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & PDB_FOLLOW)
|
||||
printf("pmap_destroy(%x)\n", pmap);
|
||||
printf("pmap_destroy(%p)\n", pmap);
|
||||
#endif
|
||||
|
||||
simple_lock(&pmap->pm_lock);
|
||||
|
@ -686,10 +689,10 @@ pmap_release(pmap)
|
|||
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & PDB_FOLLOW)
|
||||
printf("pmap_release(%x)\n", pmap);
|
||||
printf("pmap_release(%p)\n", pmap);
|
||||
#endif
|
||||
|
||||
#ifdef DIAGNOSTICx
|
||||
#ifdef DIAGNOSTIC
|
||||
/* sometimes 1, sometimes 0; could rearrange pmap_destroy */
|
||||
if (pmap->pm_count != 1)
|
||||
panic("pmap_release count");
|
||||
|
@ -711,7 +714,7 @@ pmap_reference(pmap)
|
|||
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & PDB_FOLLOW)
|
||||
printf("pmap_reference(%x)", pmap);
|
||||
printf("pmap_reference(%p)", pmap);
|
||||
#endif
|
||||
|
||||
simple_lock(&pmap->pm_lock);
|
||||
|
@ -829,7 +832,7 @@ pmap_remove(pmap, sva, eva)
|
|||
*/
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & PDB_REMOVE)
|
||||
printf("remove: inv pte at %x(%x) ", pte, *pte);
|
||||
printf("remove: inv pte at %p(%x) ", pte, *pte);
|
||||
#endif
|
||||
|
||||
#ifdef needednotdone
|
||||
|
@ -873,7 +876,7 @@ pmap_remove_all(pa)
|
|||
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & (PDB_FOLLOW|PDB_REMOVE|PDB_PROTECT))
|
||||
printf("pmap_remove_all(%x)", pa);
|
||||
printf("pmap_remove_all(%lx)", pa);
|
||||
/*pmap_pvdump(pa);*/
|
||||
#endif
|
||||
|
||||
|
@ -911,7 +914,7 @@ pmap_remove_all(pa)
|
|||
*/
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & PDB_REMOVE)
|
||||
printf("remove: inv pte at %x(%x) ", pte, *pte);
|
||||
printf("remove: inv pte at %p(%x) ", pte, *pte);
|
||||
#endif
|
||||
|
||||
#ifdef needednotdone
|
||||
|
@ -953,7 +956,7 @@ pmap_protect(pmap, sva, eva, prot)
|
|||
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & (PDB_FOLLOW|PDB_PROTECT))
|
||||
printf("pmap_protect(%x, %x, %x, %x)", pmap, sva, eva, prot);
|
||||
printf("pmap_protect(%p, %lx, %lx, %x)", pmap, sva, eva, prot);
|
||||
#endif
|
||||
|
||||
if ((prot & VM_PROT_READ) == VM_PROT_NONE) {
|
||||
|
@ -1067,7 +1070,7 @@ pmap_enter(pmap, va, pa, prot, wired)
|
|||
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & (PDB_FOLLOW|PDB_ENTER))
|
||||
printf("pmap_enter(%x, %x, %x, %x, %x)",
|
||||
printf("pmap_enter(%p, %lx, %lx, %x, %x)",
|
||||
pmap, va, pa, prot, wired);
|
||||
#endif
|
||||
|
||||
|
@ -1094,7 +1097,7 @@ pmap_enter(pmap, va, pa, prot, wired)
|
|||
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & PDB_ENTER)
|
||||
printf("enter: pte %x, *pte %x ", pte, *pte);
|
||||
printf("enter: pte %p, *pte %x ", pte, *pte);
|
||||
#endif
|
||||
|
||||
if (pmap_pte_v(pte)) {
|
||||
|
@ -1142,7 +1145,8 @@ pmap_enter(pmap, va, pa, prot, wired)
|
|||
*/
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & PDB_ENTER)
|
||||
printf("enter: removing old mapping %x pa %x ", va, opa);
|
||||
printf("enter: removing old mapping %lx pa %lx ",
|
||||
va, opa);
|
||||
#endif
|
||||
if ((pind = pmap_page_index(opa)) != -1) {
|
||||
pmap_attributes[pind] |= *pte & (PG_M | PG_U);
|
||||
|
@ -1263,7 +1267,7 @@ pmap_change_wiring(pmap, va, wired)
|
|||
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & PDB_FOLLOW)
|
||||
printf("pmap_change_wiring(%x, %x, %x)", pmap, va, wired);
|
||||
printf("pmap_change_wiring(%p, %lx, %x)", pmap, va, wired);
|
||||
#endif
|
||||
|
||||
pte = pmap_pte(pmap, va);
|
||||
|
@ -1277,7 +1281,7 @@ pmap_change_wiring(pmap, va, wired)
|
|||
*/
|
||||
if (!pmap_pte_v(pte)) {
|
||||
if (pmapdebug & PDB_PARANOIA)
|
||||
printf("pmap_change_wiring: invalid PTE for %x ", va);
|
||||
printf("pmap_change_wiring: invalid PTE for %lx ", va);
|
||||
}
|
||||
#endif
|
||||
|
||||
|
@ -1305,7 +1309,7 @@ pmap_pte(pmap, va)
|
|||
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & PDB_FOLLOW)
|
||||
printf("pmap_pte(%x, %x) ->\n", pmap, va);
|
||||
printf("pmap_pte(%p, %lx) ->\n", pmap, va);
|
||||
#endif
|
||||
|
||||
if (!pmap || !pmap_pde_v(pmap_pde(pmap, va)))
|
||||
|
@ -1355,7 +1359,7 @@ pmap_extract(pmap, va)
|
|||
pa = pmap_pte_pa(pte);
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & PDB_FOLLOW)
|
||||
printf("%x\n", pa);
|
||||
printf("%lx\n", pa);
|
||||
#endif
|
||||
return pa | (va & ~PG_FRAME);
|
||||
}
|
||||
|
@ -1376,7 +1380,7 @@ pmap_copy(dst_pmap, src_pmap, dst_addr, len, src_addr)
|
|||
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & PDB_FOLLOW)
|
||||
printf("pmap_copy(%x, %x, %x, %x, %x)",
|
||||
printf("pmap_copy(%p, %p, %lx, %lx, %lx)",
|
||||
dst_pmap, src_pmap, dst_addr, len, src_addr);
|
||||
#endif
|
||||
}
|
||||
|
@ -1398,7 +1402,8 @@ pmap_collect(pmap)
|
|||
pmap_t pmap;
|
||||
{
|
||||
#ifdef DEBUG
|
||||
printf("pmap_collect(%x) ", pmap);
|
||||
if (pmapdebug & PDB_COLLECT)
|
||||
printf("pmap_collect(%p)\n", pmap);
|
||||
#endif
|
||||
|
||||
if (pmap != pmap_kernel())
|
||||
|
@ -1416,14 +1421,14 @@ pmap_dump_pvlist(phys, m)
|
|||
|
||||
if (!pmap_initialized)
|
||||
return;
|
||||
printf("%s %08x:", m, phys);
|
||||
printf("%s %08lx:", m, phys);
|
||||
pv = &pv_table[pmap_page_index(phys)];
|
||||
if (pv->pv_pmap == NULL) {
|
||||
printf(" no mappings\n");
|
||||
return;
|
||||
}
|
||||
for (; pv; pv = pv->pv_next)
|
||||
printf(" pmap %08x va %08x", pv->pv_pmap, pv->pv_va);
|
||||
printf(" pmap %08p va %08lx", pv->pv_pmap, pv->pv_va);
|
||||
printf("\n");
|
||||
}
|
||||
#else
|
||||
|
@ -1441,7 +1446,7 @@ pmap_zero_page(phys)
|
|||
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & PDB_FOLLOW)
|
||||
printf("pmap_zero_page(%x)", phys);
|
||||
printf("pmap_zero_page(%lx)", phys);
|
||||
#endif
|
||||
|
||||
pmap_dump_pvlist(phys, "pmap_zero_page: phys");
|
||||
|
@ -1462,7 +1467,7 @@ pmap_copy_page(src, dst)
|
|||
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & PDB_FOLLOW)
|
||||
printf("pmap_copy_page(%x, %x)", src, dst);
|
||||
printf("pmap_copy_page(%lx, %lx)", src, dst);
|
||||
#endif
|
||||
|
||||
pmap_dump_pvlist(src, "pmap_copy_page: src");
|
||||
|
@ -1496,7 +1501,7 @@ pmap_pageable(pmap, sva, eva, pageable)
|
|||
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & PDB_FOLLOW)
|
||||
printf("pmap_pageable(%x, %x, %x, %x)",
|
||||
printf("pmap_pageable(%p, %lx, %lx, %x)",
|
||||
pmap, sva, eva, pageable);
|
||||
#endif
|
||||
|
||||
|
@ -1517,7 +1522,7 @@ pmap_pageable(pmap, sva, eva, pageable)
|
|||
register struct pv_entry *pv;
|
||||
|
||||
if ((pmapdebug & (PDB_FOLLOW|PDB_PTPAGE)) == PDB_PTPAGE)
|
||||
printf("pmap_pageable(%x, %x, %x, %x)",
|
||||
printf("pmap_pageable(%p, %lx, %lx, %x)",
|
||||
pmap, sva, eva, pageable);
|
||||
#endif
|
||||
|
||||
|
@ -1535,7 +1540,7 @@ pmap_pageable(pmap, sva, eva, pageable)
|
|||
|
||||
pv = &pv_table[pind];
|
||||
if (pv->pv_va != sva || pv->pv_next) {
|
||||
printf("pmap_pageable: bad PT page va %x next %x\n",
|
||||
printf("pmap_pageable: bad PT page va %lx next %p\n",
|
||||
pv->pv_va, pv->pv_next);
|
||||
return;
|
||||
}
|
||||
|
@ -1548,7 +1553,7 @@ pmap_pageable(pmap, sva, eva, pageable)
|
|||
|
||||
#ifdef needsomethinglikethis
|
||||
if (pmapdebug & PDB_PTPAGE)
|
||||
printf("pmap_pageable: PT page %x(%x) unmodified\n",
|
||||
printf("pmap_pageable: PT page %lx(%lx) unmodified\n",
|
||||
sva, *pmap_pte(pmap, sva));
|
||||
if (pmapdebug & PDB_WIRING)
|
||||
pmap_check_wiring("pageable", sva);
|
||||
|
@ -1633,7 +1638,7 @@ pmap_changebit(pa, setbits, maskbits)
|
|||
|
||||
#ifdef DEBUG
|
||||
if (pmapdebug & PDB_BITS)
|
||||
printf("pmap_changebit(%x, %x, %x)",
|
||||
printf("pmap_changebit(%lx, %x, %x)",
|
||||
pa, setbits, ~maskbits);
|
||||
#endif
|
||||
|
||||
|
@ -1677,20 +1682,22 @@ pmap_changebit(pa, setbits, maskbits)
|
|||
}
|
||||
|
||||
#ifdef DEBUG
|
||||
void
|
||||
pmap_pvdump(pa)
|
||||
vm_offset_t pa;
|
||||
{
|
||||
register struct pv_entry *pv;
|
||||
|
||||
printf("pa %x", pa);
|
||||
printf("pa %lx", pa);
|
||||
for (pv = &pv_table[pmap_page_index(pa)]; pv; pv = pv->pv_next) {
|
||||
printf(" -> pmap %x, va %x", pv->pv_pmap, pv->pv_va);
|
||||
printf(" -> pmap %p, va %lx", pv->pv_pmap, pv->pv_va);
|
||||
pads(pv->pv_pmap);
|
||||
}
|
||||
printf(" ");
|
||||
}
|
||||
|
||||
#ifdef notyet
|
||||
void
|
||||
pmap_check_wiring(str, va)
|
||||
char *str;
|
||||
vm_offset_t va;
|
||||
|
@ -1704,7 +1711,7 @@ pmap_check_wiring(str, va)
|
|||
return;
|
||||
|
||||
if (!vm_map_lookup_entry(pt_map, va, &entry)) {
|
||||
printf("wired_check: entry for %x not found\n", va);
|
||||
printf("wired_check: entry for %lx not found\n", va);
|
||||
return;
|
||||
}
|
||||
count = 0;
|
||||
|
@ -1712,12 +1719,13 @@ pmap_check_wiring(str, va)
|
|||
if (*pte)
|
||||
count++;
|
||||
if (entry->wired_count != count)
|
||||
printf("*%s*: %x: w%d/a%d\n",
|
||||
printf("*%s*: %lx: w%d/a%d\n",
|
||||
str, va, entry->wired_count, count);
|
||||
}
|
||||
#endif
|
||||
|
||||
/* print address space of pmap*/
|
||||
void
|
||||
pads(pm)
|
||||
pmap_t pm;
|
||||
{
|
||||
|
|
Loading…
Reference in New Issue