svn commit: r227288 - projects/armv6/sys/arm/arm
Olivier Houchard
cognet at FreeBSD.org
Mon Nov 7 00:12:17 UTC 2011
Author: cognet
Date: Mon Nov 7 00:12:16 2011
New Revision: 227288
URL: http://svn.freebsd.org/changeset/base/227288
Log:
- Ooops, we should check PGA_WRITEABLE agains aflags, not flags.
- in pmap_fault_fixup(), don't assume the mapping as to be a user mapping
only because the fault comes from userland. If we were faulting from
copyin/copyout or friends, we would remove the userland access, and bad
thing would happen.
Modified:
projects/armv6/sys/arm/arm/pmap-v6.c
Modified: projects/armv6/sys/arm/arm/pmap-v6.c
==============================================================================
--- projects/armv6/sys/arm/arm/pmap-v6.c Sun Nov 6 23:34:40 2011 (r227287)
+++ projects/armv6/sys/arm/arm/pmap-v6.c Mon Nov 7 00:12:16 2011 (r227288)
@@ -890,6 +890,7 @@ pmap_clearbit(struct vm_page *pg, u_int
if (npte != opte) {
count++;
*ptep = npte;
+ PTE_SYNC(ptep);
/* Flush the TLB entry if a current pmap. */
if (PV_BEEN_EXECD(oflags))
cpu_tlb_flushID_SE(pv->pv_va);
@@ -1261,7 +1262,7 @@ pmap_fault_fixup(pmap_t pm, vm_offset_t
/* Re-enable write permissions for the page */
*ptep = (pte & ~L2_TYPE_MASK) | L2_S_PROTO;
- pmap_set_prot(ptep, VM_PROT_WRITE, user);
+ pmap_set_prot(ptep, VM_PROT_WRITE, *ptep & L2_S_PROT_U);
CTR1(KTR_PMAP, "pmap_fault_fix: new pte:0x%x", pte);
PTE_SYNC(ptep);
rv = 1;
@@ -3391,7 +3392,7 @@ pmap_clear_modify(vm_page_t m)
* If the object containing the page is locked and the page is not
* VPO_BUSY, then PGA_WRITEABLE cannot be concurrently set.
*/
- if ((m->flags & PGA_WRITEABLE) == 0)
+ if ((m->aflags & PGA_WRITEABLE) == 0)
return;
if (m->md.pvh_attrs & PVF_MOD)
@@ -3431,7 +3432,7 @@ pmap_remove_write(vm_page_t m)
*/
VM_OBJECT_LOCK_ASSERT(m->object, MA_OWNED);
if ((m->oflags & VPO_BUSY) != 0 ||
- (m->flags & PGA_WRITEABLE) != 0)
+ (m->aflags & PGA_WRITEABLE) != 0)
pmap_clearbit(m, PVF_WRITE);
}
More information about the svn-src-projects
mailing list