Skip site navigation (1)Skip section navigation (2)
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>