From owner-svn-src-head@FreeBSD.ORG Fri Aug 6 09:25:42 2010 Return-Path: Delivered-To: svn-src-head@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id E2852106567A; Fri, 6 Aug 2010 09:25:42 +0000 (UTC) (envelope-from jchandra@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id D106F8FC18; Fri, 6 Aug 2010 09:25:42 +0000 (UTC) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id o769PggW071505; Fri, 6 Aug 2010 09:25:42 GMT (envelope-from jchandra@svn.freebsd.org) Received: (from jchandra@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id o769PgKB071503; Fri, 6 Aug 2010 09:25:42 GMT (envelope-from jchandra@svn.freebsd.org) Message-Id: <201008060925.o769PgKB071503@svn.freebsd.org> From: "Jayachandran C." Date: Fri, 6 Aug 2010 09:25:42 +0000 (UTC) To: src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org X-SVN-Group: head MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r210922 - head/sys/mips/mips X-BeenThere: svn-src-head@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: SVN commit messages for the src tree for head/-current List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Fri, 06 Aug 2010 09:25:43 -0000 Author: jchandra Date: Fri Aug 6 09:25:42 2010 New Revision: 210922 URL: http://svn.freebsd.org/changeset/base/210922 Log: Fix issue reported by alc : MIPS doesn't really need to use atomic_cmpset_int() in situations like this because the software dirty bit emulation in trap.c acquires the pmap lock. Atomics like this appear to be a carryover from i386 where the hardware-managed TLB might concurrently set the modified bit. Reviewed by: alc Modified: head/sys/mips/mips/pmap.c Modified: head/sys/mips/mips/pmap.c ============================================================================== --- head/sys/mips/mips/pmap.c Fri Aug 6 09:23:47 2010 (r210921) +++ head/sys/mips/mips/pmap.c Fri Aug 6 09:25:42 2010 (r210922) @@ -1716,7 +1716,7 @@ pmap_protect(pmap_t pmap, vm_offset_t sv vm_page_lock_queues(); PMAP_LOCK(pmap); for (; sva < eva; sva = va_next) { - pt_entry_t pbits, obits; + pt_entry_t pbits; vm_page_t m; vm_paddr_t pa; @@ -1745,8 +1745,7 @@ pmap_protect(pmap_t pmap, vm_offset_t sv /* Skip invalid PTEs */ if (!pte_test(pte, PTE_V)) continue; -retry: - obits = pbits = *pte; + pbits = *pte; pa = TLBLO_PTE_TO_PA(pbits); if (page_is_managed(pa) && pte_test(&pbits, PTE_D)) { m = PHYS_TO_VM_PAGE(pa); @@ -1757,8 +1756,7 @@ retry: pte_set(&pbits, PTE_RO); if (pbits != *pte) { - if (!atomic_cmpset_int((u_int *)pte, obits, pbits)) - goto retry; + *pte = pbits; pmap_update_page(pmap, sva, pbits); } }