delete VERBOSE #ifdef's
[unix-history] / usr / src / sys / vm / vm_unix.c
CommitLineData
619edcce
KM
1/*
2 * Copyright (c) 1988 University of Utah.
3 * Copyright (c) 1991 The Regents of the University of California.
4 * All rights reserved.
5 *
6 * This code is derived from software contributed to Berkeley by
7 * the Systems Programming Group of the University of Utah Computer
8 * Science Department.
9 *
10 * %sccs.include.redist.c%
11 *
12 * from: Utah $Hdr: vm_unix.c 1.1 89/11/07$
13 *
dd89ed8a 14 * @(#)vm_unix.c 7.4 (Berkeley) %G%
619edcce
KM
15 */
16
17/*
18 * Traditional sbrk/grow interface to VM
19 */
1692aa9f
KB
20#include <sys/param.h>
21#include <sys/systm.h>
22#include <sys/proc.h>
23#include <sys/resourcevar.h>
619edcce 24
1692aa9f 25#include <vm/vm.h>
619edcce 26
dd89ed8a
CT
27struct obreak_args {
28 char *nsiz;
29};
619edcce 30/* ARGSUSED */
1692aa9f 31int
619edcce
KM
32obreak(p, uap, retval)
33 struct proc *p;
dd89ed8a 34 struct obreak_args *uap;
619edcce
KM
35 int *retval;
36{
ffe0d082 37 register struct vmspace *vm = p->p_vmspace;
619edcce
KM
38 vm_offset_t new, old;
39 int rv;
40 register int diff;
41
ffe0d082 42 old = (vm_offset_t)vm->vm_daddr;
619edcce 43 new = round_page(uap->nsiz);
ffe0d082 44 if ((int)(new - old) > p->p_rlimit[RLIMIT_DATA].rlim_cur)
619edcce 45 return(ENOMEM);
ffe0d082 46 old = round_page(old + ctob(vm->vm_dsize));
619edcce
KM
47 diff = new - old;
48 if (diff > 0) {
ffe0d082 49 rv = vm_allocate(&vm->vm_map, &old, diff, FALSE);
619edcce
KM
50 if (rv != KERN_SUCCESS) {
51 uprintf("sbrk: grow failed, return = %d\n", rv);
52 return(ENOMEM);
53 }
ffe0d082 54 vm->vm_dsize += btoc(diff);
619edcce
KM
55 } else if (diff < 0) {
56 diff = -diff;
ffe0d082 57 rv = vm_deallocate(&vm->vm_map, new, diff);
619edcce
KM
58 if (rv != KERN_SUCCESS) {
59 uprintf("sbrk: shrink failed, return = %d\n", rv);
60 return(ENOMEM);
61 }
ffe0d082 62 vm->vm_dsize -= btoc(diff);
619edcce
KM
63 }
64 return(0);
65}
66
67/*
ffe0d082
MK
68 * Enlarge the "stack segment" to include the specified
69 * stack pointer for the process.
619edcce 70 */
1692aa9f 71int
ffe0d082
MK
72grow(p, sp)
73 struct proc *p;
619edcce
KM
74 unsigned sp;
75{
ffe0d082 76 register struct vmspace *vm = p->p_vmspace;
619edcce
KM
77 register int si;
78
79 /*
80 * For user defined stacks (from sendsig).
81 */
ffe0d082 82 if (sp < (unsigned)vm->vm_maxsaddr)
619edcce
KM
83 return (0);
84 /*
85 * For common case of already allocated (from trap).
86 */
ffe0d082 87 if (sp >= USRSTACK - ctob(vm->vm_ssize))
619edcce
KM
88 return (1);
89 /*
90 * Really need to check vs limit and increment stack size if ok.
91 */
ffe0d082
MK
92 si = clrnd(btoc(USRSTACK-sp) - vm->vm_ssize);
93 if (vm->vm_ssize + si > btoc(p->p_rlimit[RLIMIT_STACK].rlim_cur))
619edcce 94 return (0);
ffe0d082 95 vm->vm_ssize += si;
619edcce
KM
96 return (1);
97}
98
dd89ed8a
CT
99struct ovadvise_args {
100 int anom;
101};
619edcce 102/* ARGSUSED */
1692aa9f 103int
619edcce
KM
104ovadvise(p, uap, retval)
105 struct proc *p;
dd89ed8a 106 struct ovadvise_args *uap;
619edcce
KM
107 int *retval;
108{
109
ffe0d082 110 return (EINVAL);
619edcce 111}