On Thu Nov 12 16:20:39 EST 2009, [email protected] wrote:
> The two cases are:
>
> /sys/src/9/pc/mmu.c:510,513
> if(didmmuinit)
> map = xspanalloc(BY2PG, BY2PG, 0);
> else
> map = rampage();
>
> xspanalloc returns zeroed memory. rampage is only called early
> in startup, and returns virgin memory which in the olden days
> would have been zeroed at boot time. But nowadays:
>
> /sys/src/9/pc/memory.c:443
> /* memset(va, 0, MB); so damn slow to memset all of
> memory */
>
> So I think you want to clear the page only for the rampage case.
>
thanks, richard. since rampage() doesn't zero memory
but xspanalloc does, it makes sense to me to put the change
in rampage instead of mmuwalk.
/n/dump/2009/1112/sys/src/9/pc/memory.c:223,233 - memory.c:223,236
rampage(void)
{
ulong m;
-
+ void *p;
+
m = mapalloc(&rmapram, 0, BY2PG, BY2PG);
if(m == 0)
return nil;
- return KADDR(m);
+ p = KADDR(m);
+ memset(p, 0, BY2PG);
+ return p;
}
- erik