diff options
author | dt <dt@FreeBSD.org> | 1999-04-28 15:52:09 +0000 |
---|---|---|
committer | dt <dt@FreeBSD.org> | 1999-04-28 15:52:09 +0000 |
commit | abacf8411010fefe1ca0583584ffc9920e04f8f9 (patch) | |
tree | bb67f3ac1a22342f823b7de39e90a8e5cc890d0a | |
parent | ca21a25f173ed030b0093e4d83140e3b0b43db01 (diff) | |
download | FreeBSD-src-abacf8411010fefe1ca0583584ffc9920e04f8f9.zip FreeBSD-src-abacf8411010fefe1ca0583584ffc9920e04f8f9.tar.gz |
pmap_emulate_reference: don't ever lose PV_TABLE_MOD bit on page. If
PV_TABLE_REF cleared before PV_TABLE_MOD, the page may get fault on read again.
On fault on write, pmap_emulate_reference mark the page dirty with
vm_page_dirty. That decrease ill effects of the bug.
The problem probably become more serious after my rev.1.18 a week ago.
-rw-r--r-- | sys/alpha/alpha/pmap.c | 4 |
1 files changed, 2 insertions, 2 deletions
diff --git a/sys/alpha/alpha/pmap.c b/sys/alpha/alpha/pmap.c index b4513b5..08f9883 100644 --- a/sys/alpha/alpha/pmap.c +++ b/sys/alpha/alpha/pmap.c @@ -43,7 +43,7 @@ * from: @(#)pmap.c 7.7 (Berkeley) 5/12/91 * from: i386 Id: pmap.c,v 1.193 1998/04/19 15:22:48 bde Exp * with some ideas from NetBSD's alpha pmap - * $Id: pmap.c,v 1.19 1999/04/23 19:53:38 dt Exp $ + * $Id: pmap.c,v 1.20 1999/04/23 20:29:58 dt Exp $ */ /* @@ -2935,7 +2935,7 @@ pmap_emulate_reference(struct proc *p, vm_offset_t v, int user, int write) * (2) if it was a write fault, mark page as modified. */ ppv = pa_to_pvh(pa); - ppv->pv_flags = PV_TABLE_REF; + ppv->pv_flags |= PV_TABLE_REF; faultoff = PG_FOR | PG_FOE; vm_page_flag_set(ppv->pv_vm_page, PG_REFERENCED); if (write) { |