? 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 */