? uvm.diff
Index: uvm_mmap.c
===================================================================
RCS file: /cvsroot/src/sys/uvm/uvm_mmap.c,v
retrieving revision 1.145
diff -u -p -u -r1.145 uvm_mmap.c
--- uvm_mmap.c	11 Sep 2013 18:26:14 -0000	1.145
+++ uvm_mmap.c	25 Jan 2014 03:22:58 -0000
@@ -1253,5 +1253,8 @@ vaddr_t
 uvm_default_mapaddr(struct proc *p, vaddr_t base, vsize_t sz)
 {
 
-	return VM_DEFAULT_ADDRESS(base, sz);
+	if (p->p_vmspace->vm_map.flags & VM_MAP_TOPDOWN)
+		return VM_DEFAULT_ADDRESS_TOPDOWN(base, sz);
+	else
+		return VM_DEFAULT_ADDRESS_BOTTOMUP(base, sz);
 }
Index: uvm_param.h
===================================================================
RCS file: /cvsroot/src/sys/uvm/uvm_param.h,v
retrieving revision 1.31
diff -u -p -u -r1.31 uvm_param.h
--- uvm_param.h	19 Mar 2012 00:17:08 -0000	1.31
+++ uvm_param.h	25 Jan 2014 03:22:58 -0000
@@ -225,6 +225,11 @@ extern const int *const uvmexp_pageshift
  * NOT defined, then the port can offer topdown as an option, but it
  * MUST define the VM_DEFAULT_ADDRESS macro itself.
  */
+#define VM_DEFAULT_ADDRESS_BOTTOMUP(da, sz) \
+    round_page((vaddr_t)(da) + (vsize_t)maxdmap)
+#define VM_DEFAULT_ADDRESS_TOPDOWN(da, sz) \
+    trunc_page(VM_MAXUSER_ADDRESS - MAXSSIZ - (sz))
+
 #if defined(USE_TOPDOWN_VM) || defined(__USE_TOPDOWN_VM)
 # if !defined(__HAVE_TOPDOWN_VM) && !defined(__USE_TOPDOWN_VM)
 #  error "Top down memory allocation not enabled for this system"
@@ -234,8 +239,7 @@ extern const int *const uvmexp_pageshift
 #   if !defined(__USE_TOPDOWN_VM)
 #    error "Top down memory allocation not configured for this system"
 #   else /* !__USE_TOPDOWN_VM */
-#    define VM_DEFAULT_ADDRESS(da, sz) \
-	trunc_page(VM_MAXUSER_ADDRESS - MAXSSIZ - (sz))
+#    define VM_DEFAULT_ADDRESS(da, sz) VM_DEFAULT_ADDRESS_TOPDOWN(da, sz)
 #   endif /* !__USE_TOPDOWN_VM */
 #  endif /* !VM_DEFAULT_ADDRESS */
 # endif /* !__HAVE_TOPDOWN_VM && !__USE_TOPDOWN_VM */
@@ -245,7 +249,7 @@ extern const int *const uvmexp_pageshift
 # if defined(VM_DEFAULT_ADDRESS)
 #  error "Default vm address should not be defined here"
 # else /* VM_DEFAULT_ADDRESS */
-#  define VM_DEFAULT_ADDRESS(da, sz) round_page((vaddr_t)(da) + (vsize_t)maxdmap)
+#  define VM_DEFAULT_ADDRESS(da, sz) VM_DEFAULT_ADDRESS_BOTTOMUP(da, sz)
 # endif /* VM_DEFAULT_ADDRESS */
 #endif /* !__USING_TOPDOWN_VM */