Date: Wed, 20 Nov 2002 19:24:58 -0800 (PST) From: Peter Wemm <peter@FreeBSD.org> To: Perforce Change Reviews <perforce@freebsd.org> Subject: PERFORCE change 21331 for review Message-ID: <200211210324.gAL3OwRv027622@repoman.freebsd.org>
next in thread | raw e-mail | index | archive | help
http://perforce.freebsd.org/chv.cgi?CH=21331 Change 21331 by peter@peter_daintree on 2002/11/20 19:24:51 more cleanup, filling in blanks. Affected files ... .. //depot/projects/hammer/sys/x86_64/include/param.h#6 edit .. //depot/projects/hammer/sys/x86_64/include/pmap.h#4 edit .. //depot/projects/hammer/sys/x86_64/include/vmparam.h#2 edit Differences ... ==== //depot/projects/hammer/sys/x86_64/include/param.h#6 (text+ko) ==== @@ -111,17 +111,6 @@ #define NBPML4T (1ul<<PML4SHIFT)/* bytes/page map lev4 table */ #define PML4MASK (NBPML4T-1) -/* - * 48 bit page virtual addresses have a "hole" where you - * have to sign extend the top bit. This puts the kernel - * at L4 entry 256, which corresponds to 0xffff800000000000, - * which is the sign extended form of 0x0000008000000000. - * There is a big "hole" from 0x0000008000000000 though - * 0xffff7fffffffffff. - */ -#define KERNBASE 0xffff800000000000ul /* start of kernel virtual */ -#define BTOPKERNBASE ((u_long)KERNBASE >> PGSHIFT) - #define IOPAGES 2 /* pages of i/o permission bitmap */ #ifndef KSTACK_PAGES ==== //depot/projects/hammer/sys/x86_64/include/pmap.h#4 (text+ko) ==== @@ -90,27 +90,31 @@ #define KVA_PAGES 256 /* - * Pte related macros + * Pte related macros. This is complicated by having to deal with + * the sign extension of the 48th bit. */ -#define VADDR(l4, l3, l2, l1) ((vm_offset_t) ( \ - ((l4)<<PML4SHIFT) | \ ((l3)<<PDPSHIFT) | \ - ((l2)<<PDRSHIFT) | ((l1)<<PAGE_SHIFT)) ) +#define VADDR_SIGN(l4) \ + ((l4) >= NPML4EPG/2 ? ((unsigned long)-1 << 47) : 0ul) +#define VADDR(l4, l3, l2, l1) ( \ + ((unsigned long)(l4) << PML4SHIFT) | VADDR_SIGN(l4) | \ + ((unsigned long)(l3) << PDPSHIFT) | \ + ((unsigned long)(l2) << PDRSHIFT) | \ + ((unsigned long)(l1) << PAGE_SHIFT)) #ifndef NKPT -#define NKPT 30 /* actual number of kernel page tables */ +#define NKPT 30 /* initial number of kernel page tables */ #endif -#define NKPDE (KVA_PAGES - 1) /* addressable number of page tables/pde's */ +#define NKPML4E (KVA_PAGES - 1) /* addressable number of page tables/pde's */ /* * The *PTDI values control the layout of virtual memory */ -#define APTDPTDI (NPML4EPG-1) /* alt ptd entry that points to APTD */ -#define KPTDI (APTDPTDI-NKPDE)/* start of kernel virtual pde's */ +#define APML4PML4I (NPML4EPG-1) /* alt ptd entry that points to APTD */ +#define KPML4I (NPML4EPG/2) /* start of kernel virtual pde's */ /* Hole */ -#define PTDPTDI ((NPML4EPG/2)-1)/* ptd entry that points to ptd! */ -#define UMAXPTDI (PTDPTDI-1) /* ptd entry for user space end */ -#define UMAXPTEOFF (NPTEPG) /* pte entry for user space end */ +#define PML4PML4I (KPTDI-1) /* pml4 entry that points to ptd! */ +#define UMAXPML4I (PML4PML4I-1) /* pml4 entry for user space end */ /* * XXX doesn't really belong here I guess... ==== //depot/projects/hammer/sys/x86_64/include/vmparam.h#2 (text+ko) ==== @@ -44,11 +44,9 @@ #define _MACHINE_VMPARAM_H_ 1 /* - * Machine dependent constants for 386. + * Machine dependent constants for x86-64. */ -#define VM_PROT_READ_IS_EXEC /* if you can read -- then you can exec */ - /* * Virtual memory related constants, all in bytes */ @@ -69,8 +67,6 @@ #define SGROWSIZ (128UL*1024) /* amount to grow stack */ #endif -#define USRTEXT (1*PAGE_SIZE) /* base of user text XXX bogus */ - /* * The time for a process to be blocked before being very swappable. * This is a number of seconds which the system takes as being a non-trivial @@ -90,23 +86,20 @@ * messy at times, but hey, we'll do anything to save a page :-) */ -#define VM_MAX_KERNEL_ADDRESS VADDR(KPTDI+NKPDE, 0) -#define VM_MIN_KERNEL_ADDRESS VADDR(PTDPTDI, PTDPTDI) +#define VM_MAX_KERNEL_ADDRESS VADDR(KPML4I+NKML4E, 0, 0, 0) +#define VM_MIN_KERNEL_ADDRESS VADDR(KPML4I, 0, 0, 0) -#define KERNBASE VADDR(KPTDI, 0) +#define KERNBASE VM_MIN_KERNEL_ADDRESS -#define KPT_MAX_ADDRESS VADDR(PTDPTDI, KPTDI+NKPT) -#define KPT_MIN_ADDRESS VADDR(PTDPTDI, KPTDI) +#define UPT_MAX_ADDRESS VADDR(PML4PML4I, PML4PML4I, 0, 0) +#define UPT_MIN_ADDRESS VADDR(PML4PML4I, 0, 0, 0) -#define UPT_MAX_ADDRESS VADDR(PTDPTDI, PTDPTDI) -#define UPT_MIN_ADDRESS VADDR(PTDPTDI, 0) +#define VM_MAXUSER_ADDRESS UPT_MIN_ADDRESS -#define VM_MAXUSER_ADDRESS VADDR(UMAXPTDI, UMAXPTEOFF) - #define USRSTACK VM_MAXUSER_ADDRESS -#define VM_MAX_ADDRESS VADDR(PTDPTDI, PTDPTDI) -#define VM_MIN_ADDRESS ((vm_offset_t)0) +#define VM_MAX_ADDRESS UPT_MAX_ADDRESS +#define VM_MIN_ADDRESS (0) /* virtual sizes (bytes) for various kernel submaps */ #ifndef VM_KMEM_SIZE To Unsubscribe: send mail to majordomo@FreeBSD.org with "unsubscribe p4-projects" in the body of the message
Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200211210324.gAL3OwRv027622>