From owner-svn-src-projects@FreeBSD.ORG Mon Nov 7 00:12:17 2011 Return-Path: Delivered-To: svn-src-projects@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 151A6106564A; Mon, 7 Nov 2011 00:12:17 +0000 (UTC) (envelope-from cognet@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 05D0A8FC0C; Mon, 7 Nov 2011 00:12:17 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.4/8.14.4) with ESMTP id pA70CGmP048448; Mon, 7 Nov 2011 00:12:16 GMT (envelope-from cognet@svn.freebsd.org) Received: (from cognet@localhost) by svn.freebsd.org (8.14.4/8.14.4/Submit) id pA70CGSr048446; Mon, 7 Nov 2011 00:12:16 GMT (envelope-from cognet@svn.freebsd.org) Message-Id: <201111070012.pA70CGSr048446@svn.freebsd.org> From: Olivier Houchard Date: Mon, 7 Nov 2011 00:12:16 +0000 (UTC) To: src-committers@freebsd.org, svn-src-projects@freebsd.org X-SVN-Group: projects MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r227288 - projects/armv6/sys/arm/arm X-BeenThere: svn-src-projects@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the src " projects" tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Mon, 07 Nov 2011 00:12:17 -0000 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); }