From owner-p4-projects Wed Nov 20 18:21:50 2002 Delivered-To: p4-projects@freebsd.org Received: by hub.freebsd.org (Postfix, from userid 32767) id 1826F37B401; Wed, 20 Nov 2002 18:21:46 -0800 (PST) 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 0695D37B415 for ; Wed, 20 Nov 2002 18:21:45 -0800 (PST) Received: from repoman.freebsd.org (repoman.freebsd.org [216.136.204.115]) by mx1.FreeBSD.org (Postfix) with ESMTP id 3BD8243E3B for ; Wed, 20 Nov 2002 18:21:43 -0800 (PST) (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 gAL2IbmV023859 for ; Wed, 20 Nov 2002 18:18:37 -0800 (PST) (envelope-from peter@freebsd.org) Received: (from perforce@localhost) by repoman.freebsd.org (8.12.6/8.12.6/Submit) id gAL2Ib2Q023856 for perforce@freebsd.org; Wed, 20 Nov 2002 18:18:37 -0800 (PST) Date: Wed, 20 Nov 2002 18:18:37 -0800 (PST) Message-Id: <200211210218.gAL2Ib2Q023856@repoman.freebsd.org> X-Authentication-Warning: repoman.freebsd.org: perforce set sender to peter@freebsd.org using -f From: Peter Wemm Subject: PERFORCE change 21328 for review To: Perforce Change Reviews Sender: owner-p4-projects@FreeBSD.ORG Precedence: bulk List-ID: List-Archive: (Web Archive) List-Help: (List Instructions) List-Subscribe: List-Unsubscribe: X-Loop: FreeBSD.ORG http://perforce.freebsd.org/chv.cgi?CH=21328 Change 21328 by peter@peter_daintree on 2002/11/20 18:17:56 fill in some more blanks Affected files ... .. //depot/projects/hammer/sys/x86_64/include/pmap.h#3 edit Differences ... ==== //depot/projects/hammer/sys/x86_64/include/pmap.h#3 (text+ko) ==== @@ -83,35 +83,32 @@ #define PGEX_U 0x04 /* access from User mode (UPL) */ /* - * Size of Kernel address space. This is the number of page table pages - * (4MB each) to use for the kernel. 256 pages == 1 Gigabyte. - * This **MUST** be a multiple of 4 (eg: 252, 256, 260, etc). + * Size of Kernel address space. This is the number of level 4 (top) + * entries. We use half of them for the kernel due to the 48 bit + * virtual address sign extension. */ -#ifndef KVA_PAGES #define KVA_PAGES 256 -#endif /* * Pte related macros */ -#define VADDR(pdi, pti) ((vm_offset_t)(((pdi)< -typedef u_int32_t pd_entry_t; -typedef u_int32_t pt_entry_t; +typedef u_int64_t pd_entry_t; +typedef u_int64_t pt_entry_t; +typedef u_int64_t pdp_entry_t; +typedef u_int64_t pml4_entry_t; +#define PML4ESIZE sizeof(pml4_entry_t) /* for assembly files */ +#define PDPESIZE sizeof(pdp_entry_t) /* for assembly files */ #define PDESIZE sizeof(pd_entry_t) /* for assembly files */ #define PTESIZE sizeof(pt_entry_t) /* for assembly files */ /* * Address of current and alternate address space page table maps * and directories. + * XXX it might be saner to just direct map all of physical memory + * into the kernel using 2MB pages. We have enough space to do + * it (2^47 bits of KVM, while current max physical addressability + * is 2^40 physical bits). Then we can get rid of the evil hole + * in the page tables and the evil overlapping. */ #ifdef _KERNEL -extern pt_entry_t PTmap[], APTmap[]; -extern pd_entry_t PTD[], APTD[]; -extern pd_entry_t PTDpde, APTDpde; +extern pt_entry_t PTmap[], APTmap[]; +extern pd_entry_t PDmap[], APDmap[]; +extern pdp_entry_t PDPmap[], APDPmap[]; +extern pml4_entry_t PML4[], APML4; +extern pd_entry_t PML4pml4e, APML4pml4e; + -extern pd_entry_t *IdlePTD; /* physical address of "Idle" state directory */ +extern pd_entry_t *IdlePML4; /* physical address of "Idle" state directory */ #endif #ifdef _KERNEL @@ -150,8 +159,8 @@ * Note: these work recursively, thus vtopte of a pte will give * the corresponding pde that in turn maps it. */ -#define vtopte(va) (PTmap + i386_btop(va)) -#define avtopte(va) (APTmap + i386_btop(va)) +#define vtopte(va) (PTmap + x86_64_btop(va)) +#define avtopte(va) (APTmap + x86_64_btop(va)) /* * Routine: pmap_kextract @@ -163,9 +172,11 @@ pmap_kextract(vm_offset_t va) { vm_offset_t pa; - if ((pa = (vm_offset_t) PTD[va >> PDRSHIFT]) & PG_PS) { + +/* XXX the acronyms are giving me headaches at the moment */ +/* XXX if ((pa = (vm_offset_t) PTD[va >> PDRSHIFT]) & PG_PS) { pa = (pa & ~(NBPDR - 1)) | (va & (NBPDR - 1)); - } else { + } else */ { pa = *(vm_offset_t *)vtopte(va); pa = (pa & PG_FRAME) | (va & PAGE_MASK); } To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe p4-projects" in the body of the message