PERFORCE change 100078 for review

John Baldwin jhb at FreeBSD.org
Mon Jun 26 18:21:35 UTC 2006


http://perforce.freebsd.org/chv.cgi?CH=100078

Change 100078 by jhb at jhb_mutex on 2006/06/26 18:20:06

	Just call obreak().
	
	Discussed with:	alc

Affected files ...

.. //depot/projects/smpng/sys/compat/svr4/svr4_misc.c#46 edit

Differences ...

==== //depot/projects/smpng/sys/compat/svr4/svr4_misc.c#46 (text+ko) ====

@@ -792,69 +792,10 @@
 	struct thread *td;
 	struct svr4_sys_break_args *uap;
 {
-	struct proc *p = td->td_proc;
-	struct vmspace *vm = p->p_vmspace;
-	vm_offset_t new, old, base, ns;
-	rlim_t datalim, vmemlim;
-	int error, rv;
+	struct obreak_args ap;
 
-	PROC_LOCK(p);
-	datalim = lim_cur(p, RLIMIT_DATA);
-	vmemlim = lim_cur(p, RLIMIT_VMEM);
-	PROC_UNLOCK(p);
-
-	base = round_page((vm_offset_t) vm->vm_daddr);
-	ns = (vm_offset_t)uap->nsize;
-	new = round_page(ns);
-	error = 0;
-	vm_map_lock(&vm->vm_map);
-	if (new > base) {
-		if ((new - base) > (unsigned)datalim) {
-			error = ENOMEM;
-			goto done;
-		}
-		if (new > vm_map_max(&vm->vm_map)) {
-			error = ENOMEM;
-			goto done;
-		}
-	} else if (new < base) {
-		/*
-		 * This is simply an invalid value.  If someone wants to
-		 * do fancy address space manipulations, mmap and munmap
-		 * can do most of what the user would want.
-		 */
-		error = EINVAL;
-		goto done;
-	}
-
-	old = base + ctob(vm->vm_dsize);
-
-	if (new > old) {
-		vm_size_t diff;
-		diff = new - old;
-		if (vm->vm_map.size + diff > vmemlim) {
-			error = ENOMEM;
-			goto done;
-		}
-		rv = vm_map_find(&vm->vm_map, NULL, 0, &old, diff, FALSE,
-			VM_PROT_ALL, VM_PROT_ALL, 0);
-		if (rv != KERN_SUCCESS) {
-			error = ENOMEM;
-			goto done;
-		}
-		vm->vm_dsize += btoc(diff);
-	} else if (new < old) {
-		rv = vm_map_remove(&vm->vm_map, new, old);
-		if (rv != KERN_SUCCESS) {
-			error = ENOMEM;
-			goto done;
-		}
-		vm->vm_dsize -= btoc(old - new);
-	}
-done:
-	vm_map_unlock(&vm->vm_map);
-
-	return (error);
+	ap.nsize = uap->nsize;
+	return (obreak(td, &ap));
 }
 
 static __inline clock_t


More information about the p4-projects mailing list