summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authordt <dt@FreeBSD.org>1999-04-28 15:52:09 +0000
committerdt <dt@FreeBSD.org>1999-04-28 15:52:09 +0000
commitabacf8411010fefe1ca0583584ffc9920e04f8f9 (patch)
treebb67f3ac1a22342f823b7de39e90a8e5cc890d0a
parentca21a25f173ed030b0093e4d83140e3b0b43db01 (diff)
downloadFreeBSD-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.c4
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) {
OpenPOWER on IntegriCloud