[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