From owner-p4-projects@FreeBSD.ORG Tue Apr 8 01:51:46 2003 Return-Path: Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id DA0E237B404; Tue, 8 Apr 2003 01:51:45 -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 79F2437B401 for ; Tue, 8 Apr 2003 01:51:45 -0700 (PDT) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 073F243F85 for ; Tue, 8 Apr 2003 01:51:45 -0700 (PDT) (envelope-from peter@freebsd.org) Received: from repoman.freebsd.org (localhost [127.0.0.1]) by repoman.freebsd.org (8.12.6/8.12.6) with ESMTP id h388pi0U011860 for ; Tue, 8 Apr 2003 01:51:44 -0700 (PDT) (envelope-from peter@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.6/8.12.6/Submit) id h388pi3A011857 for perforce@freebsd.org; Tue, 8 Apr 2003 01:51:44 -0700 (PDT) Date: Tue, 8 Apr 2003 01:51:44 -0700 (PDT) Message-Id: <200304080851.h388pi3A011857@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 28502 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: Tue, 08 Apr 2003 08:51:47 -0000 http://perforce.freebsd.org/chv.cgi?CH=28502 Change 28502 by peter@peter_daintree on 2003/04/08 01:50:45 actually create the 4-level structure. extra mappings are needed because I'm not using UMA for the pages. Affected files ... .. //depot/projects/hammer/sys/x86_64/x86_64/pmap.c#18 edit Differences ... ==== //depot/projects/hammer/sys/x86_64/x86_64/pmap.c#18 (text+ko) ==== @@ -1036,6 +1036,8 @@ register struct pmap *pmap; { vm_page_t ptdpg[NPGPTD]; + vm_page_t pdppg; + vm_page_t pml4pg; vm_paddr_t pa; int i; @@ -1057,7 +1059,7 @@ */ if (pmap->pm_pteobj == NULL) pmap->pm_pteobj = vm_object_allocate(OBJT_DEFAULT, PTDPTDI + - NPGPTD); + NPGPTD + 2); /* * allocate the page directory page(s) @@ -1072,12 +1074,32 @@ vm_page_unlock_queues(); } + pml4pg = vm_page_grab(pmap->pm_pteobj, PTDPTDI + NPGPTD, + VM_ALLOC_NORMAL | VM_ALLOC_RETRY | VM_ALLOC_WIRED | VM_ALLOC_ZERO); + vm_page_lock_queues(); + vm_page_flag_clear(pml4pg, PG_BUSY); + pml4pg->valid = VM_PAGE_BITS_ALL; + vm_page_unlock_queues(); + + pdppg = vm_page_grab(pmap->pm_pteobj, PTDPTDI + NPGPTD + 1, + VM_ALLOC_NORMAL | VM_ALLOC_RETRY | VM_ALLOC_WIRED | VM_ALLOC_ZERO); + vm_page_lock_queues(); + vm_page_flag_clear(pdppg, PG_BUSY); + pdppg->valid = VM_PAGE_BITS_ALL; + vm_page_unlock_queues(); + pmap_qenter((vm_offset_t)pmap->pm_pdir, ptdpg, NPGPTD); + pmap_qenter((vm_offset_t)pmap->pm_pdp, &pdppg, 1); + pmap_qenter((vm_offset_t)pmap->pm_pml4, &pml4pg, 1); for (i = 0; i < NPGPTD; i++) { if ((ptdpg[i]->flags & PG_ZERO) == 0) bzero(pmap->pm_pdir + (i * NPDEPG), PAGE_SIZE); } + if ((pdppg->flags & PG_ZERO) == 0) + bzero(pmap->pm_pdp, PAGE_SIZE); + if ((pml4pg->flags & PG_ZERO) == 0) + bzero(pmap->pm_pml4, PAGE_SIZE); mtx_lock_spin(&allpmaps_lock); LIST_INSERT_HEAD(&allpmaps, pmap, pm_list); @@ -1089,10 +1111,9 @@ for (i = 0; i < NPGPTD; i++) { pa = VM_PAGE_TO_PHYS(ptdpg[i]); pmap->pm_pdir[PTDPTDI + i] = pa | PG_V | PG_RW | PG_A | PG_M; -#ifdef PAE pmap->pm_pdp[i] = pa | PG_V; -#endif } + pmap->pm_pml4[0] = VM_PAGE_TO_PHYS(pdppg) | PG_V; pmap->pm_active = 0; TAILQ_INIT(&pmap->pm_pvlist);