cvs commit: src/sys/vm memguard.c

Bosko Milekic bmilekic at FreeBSD.org
Tue Feb 15 22:17:08 GMT 2005


bmilekic    2005-02-15 22:17:07 UTC

  FreeBSD src repository

  Modified files:
    sys/vm               memguard.c 
  Log:
  Rather than overloading the page->object field like UMA does, use instead
  an unused pageq queue reference in the page structure to stash a pointer
  to the MemGuard FIFO.  Using the page->object field caused problems
  because when vm_map_protect() was called the second time to set
  VM_PROT_DEFAULT back onto a set of pages in memguard_map, the protection
  in the VM would be changed but the PMAP code would lazily not restore
  the PG_RW bit on the underlying pages right away (see pmap_protect()).
  So when a page fault finally occured and the VM noticed the faulting
  address corresponds to a page that _does_ have write access now, it
  would then call into PMAP to set back PG_RW (i386 case being discussed
  here).  However, before it got to do that, an assertion on the object
  lock not being owned would get triggered, as the object of the faulting
  page would need to be locked but was overloaded by MemGuard.  This is
  precisely why MemGuard cannot overload page->object.
  
  Submitted by: Alan Cox (alc@)
  
  Revision  Changes    Path
  1.4       +13 -17    src/sys/vm/memguard.c


More information about the cvs-all mailing list