[prev in list] [next in list] [prev in thread] [next in thread]
List: openbsd-tech
Subject: more mem on i386
From: Ted Unangst <ted.unangst () gmail ! com>
Date: 2008-09-26 5:53:31
Message-ID: Pine.BSO.4.64.0809260149550.21384 () rodin ! t3rl ! org
[Download RAW message or body]
This should let an i386 process use more like 2GB of memory. It shrinks
brk to make some room, so jumbo emacs processes may become sad.
Index: arch/amd64/include/vmparam.h
===================================================================
RCS file: /home/tedu/cvs/src/sys/arch/amd64/include/vmparam.h,v
retrieving revision 1.10
diff -u -u -r1.10 vmparam.h
--- arch/amd64/include/vmparam.h 18 Jul 2008 16:40:17 -0000 1.10
+++ arch/amd64/include/vmparam.h 26 Sep 2008 05:39:41 -0000
@@ -59,6 +59,9 @@
#ifndef DFLDSIZ
#define DFLDSIZ ((paddr_t)128*1024*1024) /* initial data size limit */
#endif
+#ifndef BRKSIZ
+#define BRKSIZ (1*1024*1024*1024)
+#endif
#ifndef MAXDSIZ
#define MAXDSIZ ((paddr_t)8*1024*1024*1024) /* max data size */
#endif
Index: arch/i386/include/vmparam.h
===================================================================
RCS file: /home/tedu/cvs/src/sys/arch/i386/include/vmparam.h,v
retrieving revision 1.41
diff -u -u -r1.41 vmparam.h
--- arch/i386/include/vmparam.h 18 Jul 2008 16:40:17 -0000 1.41
+++ arch/i386/include/vmparam.h 26 Sep 2008 05:38:32 -0000
@@ -62,8 +62,11 @@
#ifndef DFLDSIZ
#define DFLDSIZ (64*1024*1024) /* initial data size limit */
#endif
+#ifndef BRKSIZ
+#define BRKSIZ (256*1024*1024)
+#endif
#ifndef MAXDSIZ
-#define MAXDSIZ (1024*1024*1024) /* max data size */
+#define MAXDSIZ (2LL*1024*1024*1024) /* max data size */
#endif
#ifndef DFLSSIZ
#define DFLSSIZ (4*1024*1024) /* initial stack size limit */
Index: compat/svr4/svr4_misc.c
===================================================================
RCS file: /home/tedu/cvs/src/sys/compat/svr4/svr4_misc.c,v
retrieving revision 1.49
diff -u -u -r1.49 svr4_misc.c
--- compat/svr4/svr4_misc.c 1 Oct 2007 12:10:55 -0000 1.49
+++ compat/svr4/svr4_misc.c 26 Sep 2008 05:03:08 -0000
@@ -370,7 +370,7 @@
SCARG(&mm, addr) = SCARG(uap, addr);
SCARG(&mm, pos) = SCARG(uap, pos);
- rp = (void *) round_page((vaddr_t)p->p_vmspace->vm_daddr + MAXDSIZ);
+ rp = (void *) round_page((vaddr_t)p->p_vmspace->vm_daddr + BRKSIZ);
if ((SCARG(&mm, flags) & MAP_FIXED) == 0 &&
SCARG(&mm, addr) != 0 && SCARG(&mm, addr) < rp)
SCARG(&mm, addr) = rp;
@@ -404,7 +404,7 @@
SCARG(&mm, addr) = SCARG(uap, addr);
SCARG(&mm, pos) = SCARG(uap, pos);
- rp = (void *) round_page((vaddr_t)p->p_vmspace->vm_daddr + MAXDSIZ);
+ rp = (void *) round_page((vaddr_t)p->p_vmspace->vm_daddr + BRKSIZ);
if ((SCARG(&mm, flags) & MAP_FIXED) == 0 &&
SCARG(&mm, addr) != 0 && SCARG(&mm, addr) < rp)
SCARG(&mm, addr) = rp;
Index: kern/exec_elf.c
===================================================================
RCS file: /home/tedu/cvs/src/sys/kern/exec_elf.c,v
retrieving revision 1.66
diff -u -u -r1.66 exec_elf.c
--- kern/exec_elf.c 18 Jul 2008 16:58:06 -0000 1.66
+++ kern/exec_elf.c 26 Sep 2008 05:39:25 -0000
@@ -378,11 +378,11 @@
addr = trunc_page(pos + loadmap[i].vaddr);
size = round_page(addr + loadmap[i].memsz) - addr;
- /* CRAP - map_findspace does not avoid daddr+MAXDSIZ */
+ /* CRAP - map_findspace does not avoid heap */
if ((addr + size > (vaddr_t)p->p_vmspace->vm_daddr) &&
- (addr < (vaddr_t)p->p_vmspace->vm_daddr + MAXDSIZ))
+ (addr < (vaddr_t)p->p_vmspace->vm_daddr + BRKSIZ))
addr = round_page((vaddr_t)p->p_vmspace->vm_daddr +
- MAXDSIZ);
+ BRKSIZ);
if (uvm_map_findspace(&p->p_vmspace->vm_map, addr, size,
&addr, uobj, uoff, 0, UVM_FLAG_FIXED) == NULL) {
Index: uvm/uvm_map.c
===================================================================
RCS file: /home/tedu/cvs/src/sys/uvm/uvm_map.c,v
retrieving revision 1.104
diff -u -u -r1.104 uvm_map.c
--- uvm/uvm_map.c 23 Sep 2008 13:25:46 -0000 1.104
+++ uvm/uvm_map.c 26 Sep 2008 05:39:35 -0000
@@ -1172,12 +1172,10 @@
return (round_page(addr));
}
#endif
- addr = (vaddr_t)p->p_vmspace->vm_daddr + MAXDSIZ;
-#if !defined(__vax__)
- addr += arc4random() & (MIN((256 * 1024 * 1024), MAXDSIZ) - 1);
-#else
/* start malloc/mmap after the brk */
addr = (vaddr_t)p->p_vmspace->vm_daddr + BRKSIZ;
+#if !defined(__vax__)
+ addr += arc4random() & (MIN((256 * 1024 * 1024), BRKSIZ) - 1);
#endif
return (round_page(addr));
}
Index: uvm/uvm_mmap.c
===================================================================
RCS file: /home/tedu/cvs/src/sys/uvm/uvm_mmap.c,v
retrieving revision 1.70
diff -u -u -r1.70 uvm_mmap.c
--- uvm/uvm_mmap.c 1 Sep 2007 15:14:44 -0000 1.70
+++ uvm/uvm_mmap.c 26 Sep 2008 04:43:23 -0000
@@ -198,12 +198,12 @@
/* prevent a user requested address from falling in heap space */
if ((vaddr + size > (vaddr_t)p->p_vmspace->vm_daddr) &&
- (vaddr < (vaddr_t)p->p_vmspace->vm_daddr + MAXDSIZ)) {
+ (vaddr < (vaddr_t)p->p_vmspace->vm_daddr + BRKSIZ)) {
if (flags & UVM_FLAG_FIXED) {
error = EINVAL;
goto done;
}
- vaddr = round_page((vaddr_t)p->p_vmspace->vm_daddr + MAXDSIZ);
+ vaddr = round_page((vaddr_t)p->p_vmspace->vm_daddr + BRKSIZ);
}
again:
@@ -216,9 +216,9 @@
} else {
/* prevent a returned address from falling in heap space */
if ((vaddr + size > (vaddr_t)p->p_vmspace->vm_daddr)
- && (vaddr < (vaddr_t)p->p_vmspace->vm_daddr + MAXDSIZ)) {
+ && (vaddr < (vaddr_t)p->p_vmspace->vm_daddr + BRKSIZ)) {
vaddr = round_page((vaddr_t)p->p_vmspace->vm_daddr +
- MAXDSIZ);
+ BRKSIZ);
goto again;
}
error = 0;
[prev in list] [next in list] [prev in thread] [next in thread]
Configure |
About |
News |
Add a list |
Sponsored by KoreLogic