* Sync with i386 version.

This commit is contained in:
matthias 1996-10-23 07:46:07 +00:00
parent 4b2a039488
commit e9a160096b
1 changed files with 49 additions and 41 deletions

View File

@ -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;
{