Subject: Re: 1.5 ALPHA on Cyrix
To: Jared D. McNeill <jmcneill@invisible.yi.org>
From: Bill Sommerfeld <sommerfeld@orchard.arlington.ma.us>
List: port-i386
Date: 07/15/2000 09:32:27
> from pmap.c:
> #ifdef DIAGNOSTIC
>  if (*zero_ptr)
>   panic("pmap_zero_page_uncached: lock botch");
> #endif

uhh, at least in my copy, it's:

 if (*zero_pte)
  panic("pmap_zero_page: lock botch");

"pte" as in "page table entry"


> 
> If I'm wrong, please somebody correct me, but from what I understand
> this checks to see if the page was actually zero'd. If not (*zero_ptr is
> non-zero), then it panics. This doesn't get checked unless DIAGNOSTIC is
> defined.

This checks to see if another page-zero is already in progress or was
interrupted while in progress.

 *zero_pte = (pa & PG_FRAME) | PG_V | PG_RW; /* map in */
 memset(zerop, 0, NBPG);    /* zero */
 *zero_pte = 0;    /* zap! */

Hmm.  I wonder..

Could you change the panic code to:

 if (*zero_pte)
  panic("pmap_zero_page: lock botch, pte %x", *zero_pte);

Maybe the "dirty" and/or "referenced" bits of the pte will be set and
the rest will be zero..
      - Bill