From owner-svn-src-user@FreeBSD.ORG Sat Jul 11 02:58:36 2009 Return-Path: Delivered-To: svn-src-user@freebsd.org Received: from mx1.freebsd.org (mx1.freebsd.org [IPv6:2001:4f8:fff6::34]) by hub.freebsd.org (Postfix) with ESMTP id 62CF8106566B; Sat, 11 Jul 2009 02:58:36 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (svn.freebsd.org [IPv6:2001:4f8:fff6::2c]) by mx1.freebsd.org (Postfix) with ESMTP id 51A198FC12; Sat, 11 Jul 2009 02:58:36 +0000 (UTC) (envelope-from kmacy@FreeBSD.org) Received: from svn.freebsd.org (localhost [127.0.0.1]) by svn.freebsd.org (8.14.3/8.14.3) with ESMTP id n6B2waWU039791; Sat, 11 Jul 2009 02:58:36 GMT (envelope-from kmacy@svn.freebsd.org) Received: (from kmacy@localhost) by svn.freebsd.org (8.14.3/8.14.3/Submit) id n6B2waTL039789; Sat, 11 Jul 2009 02:58:36 GMT (envelope-from kmacy@svn.freebsd.org) Message-Id: <200907110258.n6B2waTL039789@svn.freebsd.org> From: Kip Macy Date: Sat, 11 Jul 2009 02:58:36 +0000 (UTC) To: src-committers@freebsd.org, svn-src-user@freebsd.org X-SVN-Group: user MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cc: Subject: svn commit: r195604 - user/kmacy/releng_7_2_fcs_1/sys/amd64/amd64 X-BeenThere: svn-src-user@freebsd.org X-Mailman-Version: 2.1.5 Precedence: list List-Id: "SVN commit messages for the experimental " user" src tree" List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Sat, 11 Jul 2009 02:58:36 -0000 Author: kmacy Date: Sat Jul 11 02:58:36 2009 New Revision: 195604 URL: http://svn.freebsd.org/changeset/base/195604 Log: implement pmap_qenter_prot for "amd64" Modified: user/kmacy/releng_7_2_fcs_1/sys/amd64/amd64/pmap.c Modified: user/kmacy/releng_7_2_fcs_1/sys/amd64/amd64/pmap.c ============================================================================== --- user/kmacy/releng_7_2_fcs_1/sys/amd64/amd64/pmap.c Sat Jul 11 02:58:09 2009 (r195603) +++ user/kmacy/releng_7_2_fcs_1/sys/amd64/amd64/pmap.c Sat Jul 11 02:58:36 2009 (r195604) @@ -1204,16 +1204,24 @@ pmap_map(vm_offset_t *virt, vm_paddr_t s * Note: SMP coherent. Uses a ranged shootdown IPI. */ void -pmap_qenter(vm_offset_t sva, vm_page_t *ma, int count) +pmap_qenter_prot(vm_offset_t sva, vm_page_t *ma, int count, vm_prot_t prot) { pt_entry_t *endpte, oldpte, *pte; + uint64_t flags = PG_V; + if (prot & VM_PROT_WRITE) + flags |= PG_RW; + if ((prot & VM_PROT_EXECUTE) == 0) + flags |= PG_NX; + oldpte = 0; pte = vtopte(sva); endpte = pte + count; while (pte < endpte) { oldpte |= *pte; - pte_store(pte, VM_PAGE_TO_PHYS(*ma) | PG_G | PG_RW | PG_V); + pte_store(pte, VM_PAGE_TO_PHYS(*ma) | PG_G | flags); + if (prot & VM_PROT_EXCLUDE) + dump_exclude_page(VM_PAGE_TO_PHYS(*ma)); pte++; ma++; } @@ -1222,6 +1230,16 @@ pmap_qenter(vm_offset_t sva, vm_page_t * PAGE_SIZE); } +void +pmap_qenter(vm_offset_t sva, vm_page_t *ma, int count) +{ + + pmap_qenter_prot(sva, ma, count, + VM_PROT_READ|VM_PROT_WRITE|VM_PROT_EXECUTE); + +} + + /* * This routine tears out page mappings from the * kernel -- it is meant only for temporary mappings. @@ -1234,6 +1252,7 @@ pmap_qremove(vm_offset_t sva, int count) va = sva; while (count-- > 0) { + dump_unexclude_page(pmap_kextract(va)); pmap_kremove(va); va += PAGE_SIZE; }