Subject: Re: NetBSD/ofppc boots multiuser on Pegasos
To: <>
From: =?ISO-8859-1?Q?Jorge_Acereda_Maci=E1?= <jacereda@gmail.com>
List: port-powerpc
Date: 07/29/2006 21:47:28
Jorge Acereda Maciá wrote:
> Simon Burge wrote:
>
>> Maybe try regress/sys/uvm/mmap ?
>
>
> Bingo :-)
>
> mmap: mmap anon MAP_WIRED: Cannot allocate memory
>
>
BTW, what's the normal output of the mmap regression test? I don't have
a NetBSD box here to test...
pmap_wired_count() was returning negative values. This patch seems to
fix that, but I'm afraid those 128 resident pages aren't normal :-)
Perhaps someone more experienced than me can take a look at it?
>>> MAPPING FILE <<<
CHECKING RESIDENCY
LOCKING RANGE
CHECKING RESIDENCY
UNLOCKING RANGE
>>> MAPPING 128 PAGE ANONYMOUS REGION WITH MAP_WIRED <<<
CHECKING RESIDENCY
>>> MAPPING 128 PAGE ANONYMOUS REGION <<<
CHECKING RESIDENCY
LOCKING ALL - CURRENT and FUTURE
CHECKING RESIDENCY
>>> MAPPING ANOTHER 128 PAGE ANONYMOUS REGION <<<
CHECKING RESIDENCY
>>> MAPPING THIRD 128 PAGE ANONYMOUS REGION, PROT_NONE <<<
CHECKING RESIDENCY
PROT_READ'ING MAPPING
CHECKING RESIDENCY
UNLOCKING ALL
CHECKING RESIDENCY
>>> MADV_FREE'ING SECOND ANONYMOUS REGION <<<
CHECKING RESIDENCY
>>> MADV_FREE'ING FIRST ANONYMOUS REGION <<<
CHECKING RESIDENCY
>>> ZEROING FIRST ANONYMOUS REGION <<<
CHECKING RESIDENCY
>>> MADV_FREE'ING FIRST ANONYMOUS REGION AGAIN <<<
CHECKING RESIDENCY
>>> UNMAPPING ANONYMOUS REGIONS <<<
>>> CREATING MAPPED FILE <<<
WRITING TEST PATTERN
SYNCING FILE
UNMAPPING FILE
READING FILE
CHECKING TEST PATTERN
>>> CREATING SYSV SHM SEGMENT <<<
CHECKING RESIDENCY
ZEROING SEGMENT
CHECKING RESIDENCY
MADV_FREE'ING SEGMENT
CHECKING RESIDENCY
RESIDENCY CHECK: 128 pages still resident
Index: sys/arch/powerpc/oea/pmap.c
===================================================================
RCS file: /cvsroot/src/sys/arch/powerpc/oea/pmap.c,v
retrieving revision 1.37
diff -u -r1.37 pmap.c
--- sys/arch/powerpc/oea/pmap.c 13 May 2006 04:04:45 -0000 1.37
+++ sys/arch/powerpc/oea/pmap.c 29 Jul 2006 19:46:02 -0000
@@ -1241,6 +1241,8 @@
pmap_destroy(pmap_t pm)
{
if (--pm->pm_refs == 0) {
+ KASSERT(pm->pm_stats.resident_count == 0);
+ KASSERT(pm->pm_stats.wired_count == 0);
pmap_release(pm);
pool_put(&pmap_pool, pm);
}
@@ -1657,7 +1659,7 @@
pmap_pte_create(&pvo->pvo_pte, pm, va, pa | pte_lo);
LIST_INSERT_HEAD(pvo_head, pvo, pvo_vlink);
- if (pvo->pvo_pte.pte_lo & PVO_WIRED)
+ if (pvo->pvo_vaddr & PVO_WIRED)
pvo->pvo_pmap->pm_stats.wired_count++;
pvo->pvo_pmap->pm_stats.resident_count++;
#if defined(DEBUG)
@@ -1751,7 +1753,7 @@
* Update our statistics.
*/
pvo->pvo_pmap->pm_stats.resident_count--;
- if (pvo->pvo_pte.pte_lo & PVO_WIRED)
+ if (pvo->pvo_vaddr & PVO_WIRED)
pvo->pvo_pmap->pm_stats.wired_count--;
/*