svn commit: r208846 - in head/sys: arm/arm powerpc/booke
sparc64/sparc64
Alan Cox
alc at FreeBSD.org
Sat Jun 5 18:20:10 UTC 2010
Author: alc
Date: Sat Jun 5 18:20:09 2010
New Revision: 208846
URL: http://svn.freebsd.org/changeset/base/208846
Log:
Don't set PG_WRITEABLE in pmap_enter() unless the page is managed.
Correct a typo in a nearby comment on sparc64.
Modified:
head/sys/arm/arm/pmap.c
head/sys/powerpc/booke/pmap.c
head/sys/sparc64/sparc64/pmap.c
Modified: head/sys/arm/arm/pmap.c
==============================================================================
--- head/sys/arm/arm/pmap.c Sat Jun 5 18:01:34 2010 (r208845)
+++ head/sys/arm/arm/pmap.c Sat Jun 5 18:20:09 2010 (r208846)
@@ -3412,7 +3412,8 @@ do_l2b_alloc:
if (prot & VM_PROT_WRITE) {
npte |= L2_S_PROT_W;
- if (m != NULL)
+ if (m != NULL &&
+ (m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0)
vm_page_flag_set(m, PG_WRITEABLE);
}
npte |= pte_l2_s_cache_mode;
Modified: head/sys/powerpc/booke/pmap.c
==============================================================================
--- head/sys/powerpc/booke/pmap.c Sat Jun 5 18:01:34 2010 (r208845)
+++ head/sys/powerpc/booke/pmap.c Sat Jun 5 18:20:09 2010 (r208846)
@@ -1596,7 +1596,8 @@ mmu_booke_enter_locked(mmu_t mmu, pmap_t
if (!su)
flags |= PTE_UW;
- vm_page_flag_set(m, PG_WRITEABLE);
+ if ((flags & PTE_MANAGED) != 0)
+ vm_page_flag_set(m, PG_WRITEABLE);
} else {
/* Handle modified pages, sense modify status. */
@@ -1662,7 +1663,8 @@ mmu_booke_enter_locked(mmu_t mmu, pmap_t
if (!su)
flags |= PTE_UW;
- vm_page_flag_set(m, PG_WRITEABLE);
+ if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0)
+ vm_page_flag_set(m, PG_WRITEABLE);
}
if (prot & VM_PROT_EXECUTE) {
Modified: head/sys/sparc64/sparc64/pmap.c
==============================================================================
--- head/sys/sparc64/sparc64/pmap.c Sat Jun 5 18:01:34 2010 (r208845)
+++ head/sys/sparc64/sparc64/pmap.c Sat Jun 5 18:20:09 2010 (r208846)
@@ -1409,7 +1409,8 @@ pmap_enter_locked(pmap_t pm, vm_offset_t
tp->tte_data |= TD_SW;
if (wired)
tp->tte_data |= TD_W;
- vm_page_flag_set(m, PG_WRITEABLE);
+ if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0)
+ vm_page_flag_set(m, PG_WRITEABLE);
} else if ((data & TD_W) != 0)
vm_page_dirty(m);
@@ -1429,7 +1430,7 @@ pmap_enter_locked(pmap_t pm, vm_offset_t
} else {
/*
* If there is an existing mapping, but its for a different
- * phsyical address, delete the old mapping.
+ * physical address, delete the old mapping.
*/
if (tp != NULL) {
CTR0(KTR_PMAP, "pmap_enter_locked: replace");
@@ -1449,7 +1450,8 @@ pmap_enter_locked(pmap_t pm, vm_offset_t
data |= TD_P;
if ((prot & VM_PROT_WRITE) != 0) {
data |= TD_SW;
- vm_page_flag_set(m, PG_WRITEABLE);
+ if ((m->flags & (PG_FICTITIOUS | PG_UNMANAGED)) == 0)
+ vm_page_flag_set(m, PG_WRITEABLE);
}
if (prot & VM_PROT_EXECUTE) {
data |= TD_EXEC;
More information about the svn-src-all
mailing list