svn commit: r258358 - head/sys/arm/arm
Zbigniew Bodek
zbb at FreeBSD.org
Tue Nov 19 23:31:40 UTC 2013
Author: zbb
Date: Tue Nov 19 23:31:39 2013
New Revision: 258358
URL: http://svnweb.freebsd.org/changeset/base/258358
Log:
Avoid clearing EXEC permission bit when setting the page RW on ARMv6/v7
When emulating modified bit the executable attribute was cleared by
mistake when calling pmap_set_prot(). This was not a problem before
changes to ref/mod emulation since all the pages were created RW basing
on the "prot" argument in pmap_enter(). Now however not all pages are RW
and the RW permission can be cleared in the process.
Added proper KTRs accordingly.
Spotted by: cognet
Reviewed by: gber
Modified:
head/sys/arm/arm/pmap-v6.c
Modified: head/sys/arm/arm/pmap-v6.c
==============================================================================
--- head/sys/arm/arm/pmap-v6.c Tue Nov 19 22:55:17 2013 (r258357)
+++ head/sys/arm/arm/pmap-v6.c Tue Nov 19 23:31:39 2013 (r258358)
@@ -1519,10 +1519,10 @@ pmap_fault_fixup(pmap_t pmap, vm_offset_
vm_page_dirty(m);
/* Re-enable write permissions for the page */
- pmap_set_prot(ptep, VM_PROT_WRITE, *ptep & L2_S_PROT_U);
- CTR1(KTR_PMAP, "pmap_fault_fix: new pte:0x%x", pte);
+ *ptep = (pte & ~L2_APX);
PTE_SYNC(ptep);
rv = 1;
+ CTR1(KTR_PMAP, "pmap_fault_fix: new pte:0x%x", *ptep);
} else if (!L2_S_REFERENCED(pte)) {
/*
* This looks like a good candidate for "page referenced"
@@ -1545,6 +1545,7 @@ pmap_fault_fixup(pmap_t pmap, vm_offset_
*ptep = pte | L2_S_REF;
PTE_SYNC(ptep);
rv = 1;
+ CTR1(KTR_PMAP, "pmap_fault_fix: new pte:0x%x", *ptep);
}
/*
More information about the svn-src-all
mailing list