From owner-p4-projects@FreeBSD.ORG Tue May 18 17:49:17 2004 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 3DEBF16A4D1; Tue, 18 May 2004 17:49:17 -0700 (PDT) Delivered-To: perforce@freebsd.org Received: from mx1.FreeBSD.org (mx1.freebsd.org [216.136.204.125]) by hub.freebsd.org (Postfix) with ESMTP id 0F28D16A4CE for ; Tue, 18 May 2004 17:49:17 -0700 (PDT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 080FB43D48 for ; Tue, 18 May 2004 17:49:17 -0700 (PDT) (envelope-from peter@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.10/8.12.10) with ESMTP id i4J0nGGe078328 for ; Tue, 18 May 2004 17:49:16 -0700 (PDT) (envelope-from peter@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.10/8.12.10/Submit) id i4J0nGh8078325 for perforce@freebsd.org; Tue, 18 May 2004 17:49:16 -0700 (PDT) (envelope-from peter@freebsd.org) Date: Tue, 18 May 2004 17:49:16 -0700 (PDT) Message-Id: <200405190049.i4J0nGh8078325@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to peter@freebsd.org using -f From: Peter Wemm To: Perforce Change Reviews Subject: PERFORCE change 53022 for review X-BeenThere: p4-projects@freebsd.org X-Mailman-Version: 2.1.1 Precedence: list List-Id: p4 projects tree changes List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , X-List-Received-Date: Wed, 19 May 2004 00:49:18 -0000 http://perforce.freebsd.org/chv.cgi?CH=53022 Change 53022 by peter@peter_hammer on 2004/05/18 17:48:54 clear the kernel/direct map/recursive mapping pml4 entries and put the pml4 page in the zero queue. Move the PHYS_TO_VM_PAGE() outside the queues lock, just like on i386. Affected files ... .. //depot/projects/hammer/sys/amd64/amd64/pmap.c#67 edit Differences ... ==== //depot/projects/hammer/sys/amd64/amd64/pmap.c#67 (text+ko) ==== @@ -1287,6 +1287,8 @@ pmap_release(pmap_t pmap) { vm_page_t m; + int i; + static int j; KASSERT(pmap->pm_stats.resident_count == 0, ("pmap_release: pmap resident count %ld != 0", @@ -1296,12 +1298,16 @@ LIST_REMOVE(pmap, pm_list); mtx_unlock_spin(&allpmaps_lock); + m = PHYS_TO_VM_PAGE(pmap->pm_pml4[PML4PML4I]); + + pmap->pm_pml4[KPML4I] = 0; /* KVA */ + pmap->pm_pml4[DMPML4I] = 0; /* Direct Map */ + pmap->pm_pml4[PML4PML4I] = 0; /* Recursive Mapping */ + vm_page_lock_queues(); - m = PHYS_TO_VM_PAGE(pmap->pm_pml4[PML4PML4I]); m->wire_count--; atomic_subtract_int(&cnt.v_wire_count, 1); - /* XXX check if we can vm_page_free_zero here! */ - vm_page_free(m); + vm_page_free_zero(m); vm_page_unlock_queues(); }