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.