Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 12 Mar 2010 17:15:45 +0000 (UTC)
From:      Nathan Whitehorn <nwhitehorn@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-projects@freebsd.org
Subject:   svn commit: r205087 - in projects/ppc64/sys/powerpc: aim include
Message-ID:  <201003121715.o2CHFjLN062135@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: nwhitehorn
Date: Fri Mar 12 17:15:44 2010
New Revision: 205087
URL: http://svn.freebsd.org/changeset/base/205087

Log:
  Move USER_ADDR into high memory, too. With the exception of possible OF
  mappings, all memory below 2^32 is now used for direct mapped quantities
  only, paving the way for a large-page direct map in this region, and
  removing assumptions about where physical memory happens to have been
  mapped.

Modified:
  projects/ppc64/sys/powerpc/aim/copyinout.c
  projects/ppc64/sys/powerpc/aim/trap.c
  projects/ppc64/sys/powerpc/include/sr.h
  projects/ppc64/sys/powerpc/include/vmparam.h

Modified: projects/ppc64/sys/powerpc/aim/copyinout.c
==============================================================================
--- projects/ppc64/sys/powerpc/aim/copyinout.c	Fri Mar 12 16:08:52 2010	(r205086)
+++ projects/ppc64/sys/powerpc/aim/copyinout.c	Fri Mar 12 17:15:44 2010	(r205087)
@@ -82,7 +82,7 @@ set_user_sr(pmap_t pm, const void *addr)
 {
 	register_t esid, vsid, slb1, slb2;
 
-	esid = USER_SR;
+	esid = USER_ADDR >> ADDR_SR_SHFT;
 	PMAP_LOCK(pm);
 	vsid = va_to_vsid(pm, (vm_offset_t)addr);
 	PMAP_UNLOCK(pm);
@@ -245,7 +245,7 @@ subyte(void *addr, int byte)
 
 	td = PCPU_GET(curthread);
 	pm = &td->td_proc->p_vmspace->vm_pmap;
-	p = (char *)((uintptr_t)USER_ADDR + ((uintptr_t)addr & ~SEGMENT_MASK));
+	p = (char *)(USER_ADDR + ((uintptr_t)addr & ~SEGMENT_MASK));
 
 	if (setfault(env)) {
 		td->td_pcb->pcb_onfault = NULL;
@@ -271,7 +271,7 @@ suword32(void *addr, int word)
 
 	td = PCPU_GET(curthread);
 	pm = &td->td_proc->p_vmspace->vm_pmap;
-	p = (int *)((uintptr_t)USER_ADDR + ((uintptr_t)addr & ~SEGMENT_MASK));
+	p = (int *)(USER_ADDR + ((uintptr_t)addr & ~SEGMENT_MASK));
 
 	if (setfault(env)) {
 		td->td_pcb->pcb_onfault = NULL;
@@ -297,7 +297,7 @@ suword(void *addr, long word)
 
 	td = PCPU_GET(curthread);
 	pm = &td->td_proc->p_vmspace->vm_pmap;
-	p = (long *)((uintptr_t)USER_ADDR + ((uintptr_t)addr & ~SEGMENT_MASK));
+	p = (long *)(USER_ADDR + ((uintptr_t)addr & ~SEGMENT_MASK));
 
 	if (setfault(env)) {
 		td->td_pcb->pcb_onfault = NULL;
@@ -337,8 +337,7 @@ fubyte(const void *addr)
 
 	td = PCPU_GET(curthread);
 	pm = &td->td_proc->p_vmspace->vm_pmap;
-	p = (u_char *)((uintptr_t)USER_ADDR +
-	    ((uintptr_t)addr & ~SEGMENT_MASK));
+	p = (u_char *)(USER_ADDR + ((uintptr_t)addr & ~SEGMENT_MASK));
 
 	if (setfault(env)) {
 		td->td_pcb->pcb_onfault = NULL;
@@ -364,7 +363,7 @@ fuword32(const void *addr)
 
 	td = PCPU_GET(curthread);
 	pm = &td->td_proc->p_vmspace->vm_pmap;
-	p = (int32_t *)((uintptr_t)USER_ADDR + ((uintptr_t)addr & ~SEGMENT_MASK));
+	p = (int32_t *)(USER_ADDR + ((uintptr_t)addr & ~SEGMENT_MASK));
 
 	if (setfault(env)) {
 		td->td_pcb->pcb_onfault = NULL;
@@ -390,7 +389,7 @@ fuword(const void *addr)
 
 	td = PCPU_GET(curthread);
 	pm = &td->td_proc->p_vmspace->vm_pmap;
-	p = (long *)((uintptr_t)USER_ADDR + ((uintptr_t)addr & ~SEGMENT_MASK));
+	p = (long *)(USER_ADDR + ((uintptr_t)addr & ~SEGMENT_MASK));
 
 	if (setfault(env)) {
 		td->td_pcb->pcb_onfault = NULL;
@@ -423,8 +422,7 @@ casuword32(volatile uint32_t *addr, uint
 
 	td = PCPU_GET(curthread);
 	pm = &td->td_proc->p_vmspace->vm_pmap;
-	p = (uint32_t *)((uintptr_t)USER_ADDR +
-	    ((uintptr_t)addr & ~SEGMENT_MASK));
+	p = (uint32_t *)(USER_ADDR + ((uintptr_t)addr & ~SEGMENT_MASK));
 
 	set_user_sr(pm,(const void *)(vm_offset_t)addr);
 
@@ -469,8 +467,7 @@ casuword(volatile u_long *addr, u_long o
 
 	td = PCPU_GET(curthread);
 	pm = &td->td_proc->p_vmspace->vm_pmap;
-	p = (u_long *)((uintptr_t)USER_ADDR +
-	    ((uintptr_t)addr & ~SEGMENT_MASK));
+	p = (u_long *)(USER_ADDR + ((uintptr_t)addr & ~SEGMENT_MASK));
 
 	set_user_sr(pm,(const void *)(vm_offset_t)addr);
 

Modified: projects/ppc64/sys/powerpc/aim/trap.c
==============================================================================
--- projects/ppc64/sys/powerpc/aim/trap.c	Fri Mar 12 16:08:52 2010	(r205086)
+++ projects/ppc64/sys/powerpc/aim/trap.c	Fri Mar 12 17:15:44 2010	(r205087)
@@ -560,7 +560,7 @@ trap_pfault(struct trapframe *frame, int
 	if (user) {
 		map = &p->p_vmspace->vm_map;
 	} else {
-		if ((eva >> ADDR_SR_SHFT) == USER_SR) {
+		if ((eva >> ADDR_SR_SHFT) == (USER_ADDR >> ADDR_SR_SHFT)) {
 			if (p->p_vmspace == NULL)
 				return (SIGSEGV);
 

Modified: projects/ppc64/sys/powerpc/include/sr.h
==============================================================================
--- projects/ppc64/sys/powerpc/include/sr.h	Fri Mar 12 16:08:52 2010	(r205086)
+++ projects/ppc64/sys/powerpc/include/sr.h	Fri Mar 12 17:15:44 2010	(r205087)
@@ -50,7 +50,11 @@
 #define	KERNEL_SEGMENT	(0xfffff0 + KERNEL_SR)
 #define	KERNEL2_SEGMENT	(0xfffff0 + KERNEL2_SR)
 #define	EMPTY_SEGMENT	0xfffff0
-#define	USER_ADDR	((void *)((register_t)USER_SR << ADDR_SR_SHFT))
+#ifdef __powerpc64__
+#define	USER_ADDR	0xcffffffff0000000UL
+#else
+#define	USER_ADDR	((uintptr_t)USER_SR << ADDR_SR_SHFT)
+#endif
 #define	SEGMENT_LENGTH	0x10000000UL
 #define	SEGMENT_INVMASK	0x0fffffffUL
 #define	SEGMENT_MASK	~SEGMENT_INVMASK

Modified: projects/ppc64/sys/powerpc/include/vmparam.h
==============================================================================
--- projects/ppc64/sys/powerpc/include/vmparam.h	Fri Mar 12 16:08:52 2010	(r205086)
+++ projects/ppc64/sys/powerpc/include/vmparam.h	Fri Mar 12 17:15:44 2010	(r205087)
@@ -100,7 +100,7 @@
 
 #ifdef __powerpc64__
 #define	VM_MIN_KERNEL_ADDRESS		0xc000000000000000UL
-#define	VM_MAX_KERNEL_ADDRESS		0xcfffffffffffffffUL
+#define	VM_MAX_KERNEL_ADDRESS		0xcfffffffefffffffUL
 #define	VM_MAX_SAFE_KERNEL_ADDRESS	VM_MAX_KERNEL_ADDRESS
 #else
 #define	VM_MIN_KERNEL_ADDRESS	((vm_offset_t)KERNEL_SR << ADDR_SR_SHFT)



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201003121715.o2CHFjLN062135>