SCCS-vsn: sys/kern/kern_sig.c 7.20
SCCS-vsn: sys/kern/kern_resource.c 7.8
SCCS-vsn: sys/tahoe/tahoe/sys_machdep.c 7.4
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*
- * @(#)kern_resource.c 7.7 (Berkeley) %G%
+ * @(#)kern_resource.c 7.8 (Berkeley) %G%
#include "proc.h"
/*
* Resource controls and accounting.
*/
#include "proc.h"
/*
* Resource controls and accounting.
*/
-getpriority()
-{
- register struct a {
+getpriority(curp, uap, retval)
+ struct proc *curp;
+ register struct args {
- } *uap = (struct a *)u.u_ap;
+ } *uap;
+ int *retval;
+{
register struct proc *p;
register int low = PRIO_MAX + 1;
register struct proc *p;
register int low = PRIO_MAX + 1;
case PRIO_PROCESS:
if (uap->who == 0)
case PRIO_PROCESS:
if (uap->who == 0)
else
p = pfind(uap->who);
if (p == 0)
else
p = pfind(uap->who);
if (p == 0)
register struct pgrp *pg;
if (uap->who == 0)
register struct pgrp *pg;
if (uap->who == 0)
- pg = u.u_procp->p_pgrp;
else if ((pg = pgfind(uap->who)) == NULL)
break;
for (p = pg->pg_mem; p != NULL; p = p->p_pgrpnxt) {
else if ((pg = pgfind(uap->who)) == NULL)
break;
for (p = pg->pg_mem; p != NULL; p = p->p_pgrpnxt) {
case PRIO_USER:
if (uap->who == 0)
case PRIO_USER:
if (uap->who == 0)
for (p = allproc; p != NULL; p = p->p_nxt) {
if (p->p_uid == uap->who &&
p->p_nice < low)
for (p = allproc; p != NULL; p = p->p_nxt) {
if (p->p_uid == uap->who &&
p->p_nice < low)
- u.u_error = EINVAL;
- return;
- }
- if (low == PRIO_MAX + 1) {
- u.u_error = ESRCH;
- return;
+ if (low == PRIO_MAX + 1)
+ RETURN (ESRCH);
+ *retval = low;
+ RETURN (0);
-setpriority()
-{
- register struct a {
+/* ARGSUSED */
+setpriority(curp, uap, retval)
+ struct proc *curp;
+ register struct args {
int which;
int who;
int prio;
int which;
int who;
int prio;
- } *uap = (struct a *)u.u_ap;
+ } *uap;
+ int *retval;
+{
+ int found = 0, error = 0;
switch (uap->which) {
case PRIO_PROCESS:
if (uap->who == 0)
switch (uap->which) {
case PRIO_PROCESS:
if (uap->who == 0)
else
p = pfind(uap->who);
if (p == 0)
break;
else
p = pfind(uap->who);
if (p == 0)
break;
+ error = donice(curp, p, uap->prio);
register struct pgrp *pg;
if (uap->who == 0)
register struct pgrp *pg;
if (uap->who == 0)
- pg = u.u_procp->p_pgrp;
else if ((pg = pgfind(uap->who)) == NULL)
break;
for (p = pg->pg_mem; p != NULL; p = p->p_pgrpnxt) {
else if ((pg = pgfind(uap->who)) == NULL)
break;
for (p = pg->pg_mem; p != NULL; p = p->p_pgrpnxt) {
+ error = donice(curp, p, uap->prio);
case PRIO_USER:
if (uap->who == 0)
case PRIO_USER:
if (uap->who == 0)
for (p = allproc; p != NULL; p = p->p_nxt)
if (p->p_uid == uap->who) {
for (p = allproc; p != NULL; p = p->p_nxt)
if (p->p_uid == uap->who) {
+ error = donice(curp, p, uap->prio);
found++;
}
break;
default:
found++;
}
break;
default:
- u.u_error = EINVAL;
- return;
+ RETURN (ESRCH);
+ RETURN (0);
-donice(p, n)
- register struct proc *p;
+donice(curp, chgp, n)
+ register struct proc *curp, *chgp;
- if (u.u_uid && u.u_procp->p_ruid &&
- u.u_uid != p->p_uid && u.u_procp->p_ruid != p->p_uid) {
- u.u_error = EPERM;
- return;
- }
+ if (curp->p_uid && curp->p_ruid &&
+ curp->p_uid != chgp->p_uid && curp->p_ruid != chgp->p_uid)
+ return (EPERM);
if (n > PRIO_MAX)
n = PRIO_MAX;
if (n < PRIO_MIN)
n = PRIO_MIN;
if (n > PRIO_MAX)
n = PRIO_MAX;
if (n < PRIO_MIN)
n = PRIO_MIN;
- if (n < p->p_nice && suser(u.u_cred, &u.u_acflag)) {
- u.u_error = EACCES;
- return;
- }
- p->p_nice = n;
- (void) setpri(p);
+ if (n < chgp->p_nice && suser(u.u_cred, &u.u_acflag))
+ return (EACCES);
+ chgp->p_nice = n;
+ (void) setpri(chgp);
+ return (0);
-setrlimit()
-{
- register struct a {
+/* ARGSUSED */
+setrlimit(p, uap, retval)
+ struct proc *p;
+ register struct args {
u_int which;
struct rlimit *lim;
u_int which;
struct rlimit *lim;
- } *uap = (struct a *)u.u_ap;
+ } *uap;
+ int *retval;
+{
struct rlimit alim;
register struct rlimit *alimp;
extern unsigned maxdmap;
struct rlimit alim;
register struct rlimit *alimp;
extern unsigned maxdmap;
- if (uap->which >= RLIM_NLIMITS) {
- u.u_error = EINVAL;
- return;
- }
+ if (uap->which >= RLIM_NLIMITS)
+ RETURN (EINVAL);
alimp = &u.u_rlimit[uap->which];
alimp = &u.u_rlimit[uap->which];
- u.u_error = copyin((caddr_t)uap->lim, (caddr_t)&alim,
- sizeof (struct rlimit));
- if (u.u_error)
- return;
+ if (error =
+ copyin((caddr_t)uap->lim, (caddr_t)&alim, sizeof (struct rlimit)))
+ RETURN (error);
if (alim.rlim_cur > alimp->rlim_max || alim.rlim_max > alimp->rlim_max)
if (alim.rlim_cur > alimp->rlim_max || alim.rlim_max > alimp->rlim_max)
- if (u.u_error = suser(u.u_cred, &u.u_acflag))
- return;
+ if (error = suser(u.u_cred, &u.u_acflag))
+ RETURN (error);
switch (uap->which) {
case RLIMIT_DATA:
switch (uap->which) {
case RLIMIT_DATA:
}
*alimp = alim;
if (uap->which == RLIMIT_RSS)
}
*alimp = alim;
if (uap->which == RLIMIT_RSS)
- u.u_procp->p_maxrss = alim.rlim_cur/NBPG;
+ p->p_maxrss = alim.rlim_cur/NBPG;
+ RETURN (0);
-getrlimit()
-{
- register struct a {
+/* ARGSUSED */
+getrlimit(p, uap, retval)
+ struct proc *p;
+ register struct args {
u_int which;
struct rlimit *rlp;
u_int which;
struct rlimit *rlp;
- } *uap = (struct a *)u.u_ap;
+ } *uap;
+ int *retval;
+{
- if (uap->which >= RLIM_NLIMITS) {
- u.u_error = EINVAL;
- return;
- }
- u.u_error = copyout((caddr_t)&u.u_rlimit[uap->which], (caddr_t)uap->rlp,
- sizeof (struct rlimit));
+ if (uap->which >= RLIM_NLIMITS)
+ RETURN (EINVAL);
+ RETURN (copyout((caddr_t)&u.u_rlimit[uap->which], (caddr_t)uap->rlp,
+ sizeof (struct rlimit)));
-getrusage()
-{
- register struct a {
+/* ARGSUSED */
+getrusage(p, uap, retval)
+ register struct proc *p;
+ register struct args {
int who;
struct rusage *rusage;
int who;
struct rusage *rusage;
- } *uap = (struct a *)u.u_ap;
+ } *uap;
+ int *retval;
+{
register struct rusage *rup;
register struct rusage *rup;
- struct proc *p = u.u_procp;
- u.u_error = EINVAL;
- return;
- u.u_error = copyout((caddr_t)rup, (caddr_t)uap->rusage,
- sizeof (struct rusage));
+ RETURN (copyout((caddr_t)rup, (caddr_t)uap->rusage,
+ sizeof (struct rusage)));
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
* IMPLIED WARRANTIES, INCLUDING, WITHOUT LIMITATION, THE IMPLIED
* WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE.
*
- * @(#)kern_sig.c 7.19 (Berkeley) %G%
+ * @(#)kern_sig.c 7.20 (Berkeley) %G%
{
register struct proc *p;
struct pgrp *pgrp;
{
register struct proc *p;
struct pgrp *pgrp;
- int f = 0, error = ESRCH;
- return (f ? 0 : error);
+ return (f ? 0 : ESRCH);
* Nonexistent system call-- signal process (may want to handle it).
* Flag error in case process won't see signal immediately (blocked or ignored).
*/
* Nonexistent system call-- signal process (may want to handle it).
* Flag error in case process won't see signal immediately (blocked or ignored).
*/
+/* ARGSUSED */
+nosys(p, args, retval)
+ struct proc *p;
+ void *args;
+ int *retval;
- psignal(u.u_procp, SIGSYS);
- u.u_error = EINVAL;
+ psignal(p, SIGSYS);
+ RETURN (EINVAL);
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*
* All rights reserved. The Berkeley software License Agreement
* specifies the terms and conditions for redistribution.
*
- * @(#)sys_machdep.c 7.3 (Berkeley) %G%
+ * @(#)sys_machdep.c 7.4 (Berkeley) %G%
#ifdef TRACE
int nvualarm;
#ifdef TRACE
int nvualarm;
-vtrace()
-{
- register struct a {
+/* ARGSUSED */
+vtrace(p, uap, retval)
+ register struct proc *p;
+ register struct args {
int request;
int value;
} *uap;
int request;
int value;
} *uap;
- uap = (struct a *)u.u_ap;
switch (uap->request) {
case VTR_DISABLE: /* disable a trace point */
case VTR_ENABLE: /* enable a trace point */
if (uap->value < 0 || uap->value >= TR_NFLAGS)
switch (uap->request) {
case VTR_DISABLE: /* disable a trace point */
case VTR_ENABLE: /* enable a trace point */
if (uap->value < 0 || uap->value >= TR_NFLAGS)
- u.u_error = EINVAL;
- else {
- u.u_r.r_val1 = traceflags[uap->value];
- traceflags[uap->value] = uap->request;
- }
+ RETURN (EINVAL);
+ *retval = traceflags[uap->value];
+ traceflags[uap->value] = uap->request;
break;
case VTR_VALUE: /* return a trace point setting */
if (uap->value < 0 || uap->value >= TR_NFLAGS)
break;
case VTR_VALUE: /* return a trace point setting */
if (uap->value < 0 || uap->value >= TR_NFLAGS)
- u.u_error = EINVAL;
- else
- u.u_r.r_val1 = traceflags[uap->value];
+ RETURN (EINVAL);
+ *retval = traceflags[uap->value];
break;
case VTR_UALARM: /* set a real-time ualarm, less than 1 min */
break;
case VTR_UALARM: /* set a real-time ualarm, less than 1 min */
- if (uap->value <= 0 || uap->value > 60 * hz ||
- nvualarm > 5)
- u.u_error = EINVAL;
- else {
- nvualarm++;
- timeout(vdoualarm, (caddr_t)u.u_procp->p_pid,
- uap->value);
- }
+ if (uap->value <= 0 || uap->value > 60 * hz || nvualarm > 5)
+ RETURN (EINVAL);
+ nvualarm++;
+ timeout(vdoualarm, (caddr_t)p->p_pid, uap->value);
- trace(TR_STAMP, uap->value, u.u_procp->p_pid);
+ trace(TR_STAMP, uap->value, p->p_pid);