Subject: The roach motel
To: None <port-arm32@netbsd.org>
From: Charles M. Hannum <root@ihack.net>
List: port-arm32
Date: 03/23/1999 13:30:56
So I've just fixed a rather too large pile of bugs and whatnot in the
arm32 pmap and fault handling code.  Namely:

* Page attributes were not maintained correctly in the p->v table.
  The most obvious practical effect of this is that the writable bit
  could get bozed, causing a spurious SIGSEGV.

* Pages were left writable after the modified bit was synced with the
  VM system.  This is very bad, as it can cause modifications to be
  lost.

* pmap_clear_reference() wasn't revoking page permissions.  This isn't
  serious, but it can cause active pages to get paged out.

* copyout() was not properly handling copy-on-write.

* The page fault handler was coded such that writing to a new page
  always caused two faults.  This is sort of lame.  (I confess that
  reading the faulting instruction out of user space to determine the
  fault type is also a little freakish -- but we were doing it
  anyway!)

* The pmap module was doing a bunch of extra work looking for modified
  and referenced bits in the p->v table, even though they could never
  be there.

In short: lots of bugs fixed, probably a little better performance.

As always, shar and enjoy.