- A lot of style and whitespace fixes.

- Update a few comments regarding locking notes.

Submitted by:	bde (1, mostly)
This commit is contained in:
jhb 2004-02-05 20:53:25 +00:00
parent 5932ce932a
commit 4f63b6f6e0
2 changed files with 63 additions and 70 deletions

View File

@ -92,12 +92,14 @@ getpriority(td, uap)
struct thread *td;
register struct getpriority_args *uap;
{
struct proc *p;
int low = PRIO_MAX + 1;
int error = 0;
struct ksegrp *kg;
struct proc *p;
int error, low;
error = 0;
low = PRIO_MAX + 1;
switch (uap->which) {
case PRIO_PROCESS:
if (uap->who == 0)
low = td->td_ksegrp->kg_nice;
@ -188,10 +190,11 @@ setpriority(td, uap)
struct thread *td;
register struct setpriority_args *uap;
{
struct proc *curp = td->td_proc;
struct proc *curp;
register struct proc *p;
int found = 0, error = 0;
curp = td->td_proc;
switch (uap->which) {
case PRIO_PROCESS:
if (uap->who == 0) {
@ -262,8 +265,8 @@ setpriority(td, uap)
}
/*
* Set "nice" for a process. Doesn't really understand threaded processes well
* but does try. Has the unfortunate side effect of making all the NICE
* Set "nice" for a process. Doesn't really understand threaded processes
* well but does try. Has the unfortunate side effect of making all the NICE
* values for a process's ksegrps the same.. This suggests that
* NICE valuse should be stored as a process nice and deltas for the ksegrps.
* (but not yet).
@ -271,10 +274,10 @@ setpriority(td, uap)
static int
donice(struct thread *td, struct proc *p, int n)
{
int error;
int low = PRIO_MAX + 1;
struct ksegrp *kg;
int error, low;
low = PRIO_MAX + 1;
PROC_LOCK_ASSERT(p, MA_OWNED);
if ((error = p_cansched(td, p)))
return (error);
@ -284,13 +287,13 @@ donice(struct thread *td, struct proc *p, int n)
n = PRIO_MIN;
/*
* Only allow nicing if to more than the lowest nice.
* e.g. nices of 4,3,2 allow nice to 3 but not 1
* E.g., for nices of 4,3,2 allow nice to 3 but not 1
*/
FOREACH_KSEGRP_IN_PROC(p, kg) {
if (kg->kg_nice < low)
low = kg->kg_nice;
}
if (n < low && suser(td))
if (n < low && suser(td) != 0)
return (EACCES);
mtx_lock_spin(&sched_lock);
FOREACH_KSEGRP_IN_PROC(p, kg) {
@ -311,9 +314,7 @@ struct rtprio_args {
/*
* Set realtime priority
*/
/*
*
* MPSAFE
*/
/* ARGSUSED */
@ -322,15 +323,18 @@ rtprio(td, uap)
struct thread *td;
register struct rtprio_args *uap;
{
struct proc *curp = td->td_proc;
struct proc *curp;
register struct proc *p;
struct rtprio rtp;
int error, cierror = 0;
int cierror, error;
/* Perform copyin before acquiring locks if needed. */
if (uap->function == RTP_SET)
cierror = copyin(uap->rtp, &rtp, sizeof(struct rtprio));
else
cierror = 0;
curp = td->td_proc;
if (uap->pid == 0) {
p = curp;
PROC_LOCK(p);
@ -479,13 +483,14 @@ ogetrlimit(td, uap)
struct thread *td;
register struct ogetrlimit_args *uap;
{
struct proc *p = td->td_proc;
struct orlimit olim;
struct rlimit rl;
struct rlimit rl;
struct proc *p;
int error;
if (uap->which >= RLIM_NLIMITS)
return (EINVAL);
p = td->td_proc;
PROC_LOCK(p);
lim_rlimit(p, uap->which, &rl);
PROC_UNLOCK(p);
@ -514,7 +519,7 @@ setrlimit(td, uap)
struct rlimit alim;
int error;
if ((error = copyin(uap->rlp, &alim, sizeof (struct rlimit))))
if ((error = copyin(uap->rlp, &alim, sizeof(struct rlimit))))
return (error);
error = kern_setrlimit(td, uap->which, &alim);
return (error);
@ -526,8 +531,8 @@ kern_setrlimit(td, which, limp)
u_int which;
struct rlimit *limp;
{
struct proc *p = td->td_proc;
struct plimit *newlim, *oldlim;
struct proc *p;
register struct rlimit *alimp;
rlim_t oldssiz;
int error;
@ -544,6 +549,7 @@ kern_setrlimit(td, which, limp)
limp->rlim_max = RLIM_INFINITY;
oldssiz = 0;
p = td->td_proc;
newlim = lim_alloc();
PROC_LOCK(p);
oldlim = p->p_limit;
@ -653,16 +659,17 @@ getrlimit(td, uap)
struct thread *td;
register struct __getrlimit_args *uap;
{
int error;
struct proc *p = td->td_proc;
struct proc *p;
struct rlimit rlim;
int error;
if (uap->which >= RLIM_NLIMITS)
return (EINVAL);
p = td->td_proc;
PROC_LOCK(p);
lim_rlimit(p, uap->which, &rlim);
PROC_UNLOCK(p);
error = copyout(&rlim, uap->rlp, sizeof (struct rlimit));
error = copyout(&rlim, uap->rlp, sizeof(struct rlimit));
return(error);
}
@ -677,10 +684,10 @@ calcru(p, up, sp, ip)
struct timeval *sp;
struct timeval *ip;
{
struct bintime bt;
struct timeval tv;
/* {user, system, interrupt, total} {ticks, usec}; previous tu: */
u_int64_t ut, uu, st, su, it, iu, tt, tu, ptu;
struct timeval tv;
struct bintime bt;
mtx_assert(&sched_lock, MA_OWNED);
/* XXX: why spl-protect ? worst case is an off-by-one report */
@ -694,7 +701,6 @@ calcru(p, up, sp, ip)
st = 1;
tt = 1;
}
if (curthread->td_proc == p) {
/*
* Adjust for the current time slice. This is actually fairly
@ -703,20 +709,18 @@ calcru(p, up, sp, ip)
* XXXKSE use a different test due to threads on other
* processors also being 'current'.
*/
binuptime(&bt);
bintime_sub(&bt, PCPU_PTR(switchtime));
bintime_add(&bt, &p->p_runtime);
} else {
} else
bt = p->p_runtime;
}
bintime2timeval(&bt, &tv);
tu = (u_int64_t)tv.tv_sec * 1000000 + tv.tv_usec;
ptu = p->p_uu + p->p_su + p->p_iu;
if (tu < ptu || (int64_t)tu < 0) {
/* XXX no %qd in kernel. Truncate. */
printf("calcru: negative time of %ld usec for pid %d (%s)\n",
(long)tu, p->p_pid, p->p_comm);
(long)tu, p->p_pid, p->p_comm);
tu = ptu;
}
@ -741,10 +745,10 @@ calcru(p, up, sp, ip)
su = tu - uu - p->p_iu;
}
KASSERT(uu + su + p->p_iu <= tu,
("calcru: monotonisation botch 1"));
("calcru: monotonisation botch 1"));
iu = tu - uu - su;
KASSERT(iu >= p->p_iu,
("calcru: monotonisation botch 2"));
("calcru: monotonisation botch 2"));
}
p->p_uu = uu;
p->p_su = su;
@ -823,11 +827,11 @@ ruadd(ru, ru2)
}
/*
* Allocate a new resource limits structure, initialize it's
* reference count and mutex.
* Allocate a new resource limits structure and initialize its
* reference count and mutex pointer.
*/
struct plimit *
lim_alloc(void)
lim_alloc()
{
struct plimit *limp;
@ -838,9 +842,6 @@ lim_alloc(void)
return (limp);
}
/*
* NOTE: The caller must own the proc lock this limit is associated with.
*/
struct plimit *
lim_hold(limp)
struct plimit *limp;
@ -852,16 +853,13 @@ lim_hold(limp)
return (limp);
}
/*
* NOTE: The caller must own the proc lock this plimit belongs to.
*/
void
lim_free(limp)
struct plimit *limp;
{
LIM_LOCK(limp);
KASSERT(limp->pl_refcnt > 0, ("bad plimit refcnt: %d", limp->pl_refcnt));
KASSERT(limp->pl_refcnt > 0, ("plimit refcnt underflow"));
if (--limp->pl_refcnt == 0) {
mtx_destroy(&limp->pl_mtx);
free((void *)limp, M_PLIMIT);
@ -879,14 +877,13 @@ lim_copy(dst, src)
struct plimit *dst, *src;
{
KASSERT(dst->pl_refcnt == 1, ("lim_copy of shared limit"));
KASSERT(dst->pl_refcnt == 1, ("lim_copy to shared limit"));
bcopy(src->pl_rlimit, dst->pl_rlimit, sizeof(src->pl_rlimit));
}
/*
* Obtain the hard limit for a particular system resource.
* which - index into the rlimit array
* Note: callers must hold proc lock.
* Return the hard limit for a particular system resource. The
* which parameter specifies the index into the rlimit array.
*/
rlim_t
lim_max(struct proc *p, int which)
@ -898,9 +895,8 @@ lim_max(struct proc *p, int which)
}
/*
* Obtain the current (soft) limit for a particular system resource.
* which - index into the rlimit array
* Note: callers must hold proc lock.
* Return the current (soft) limit for a particular system resource.
* The which parameter which specifies the index into the rlimit array
*/
rlim_t
lim_cur(struct proc *p, int which)
@ -912,9 +908,8 @@ lim_cur(struct proc *p, int which)
}
/*
* Obtain the entire rlimit structure for a particular system limit.
* which - index into the rlimit array
* rlp - address into which the rlimit structure will be placed
* Return a copy of the entire rlimit structure for the system limit
* specified by 'which' in the rlimit structure pointed to by 'rlp'.
*/
void
lim_rlimit(struct proc *p, int which, struct rlimit *rlp)
@ -940,15 +935,15 @@ uihashinit()
}
/*
* lookup a uidinfo struct for the parameter uid.
* Look up a uidinfo struct for the parameter uid.
* uihashtbl_mtx must be locked.
*/
static struct uidinfo *
uilookup(uid)
uid_t uid;
{
struct uihashhead *uipp;
struct uidinfo *uip;
struct uihashhead *uipp;
struct uidinfo *uip;
mtx_assert(&uihashtbl_mtx, MA_OWNED);
uipp = UIHASH(uid);
@ -968,23 +963,21 @@ struct uidinfo *
uifind(uid)
uid_t uid;
{
struct uidinfo *uip;
struct uidinfo *old_uip, *uip;
mtx_lock(&uihashtbl_mtx);
uip = uilookup(uid);
if (uip == NULL) {
struct uidinfo *old_uip;
mtx_unlock(&uihashtbl_mtx);
uip = malloc(sizeof(*uip), M_UIDINFO, M_WAITOK | M_ZERO);
mtx_lock(&uihashtbl_mtx);
/*
* There's a chance someone created our uidinfo while we
* were in malloc and not holding the lock, so we have to
* make sure we don't insert a duplicate uidinfo
* make sure we don't insert a duplicate uidinfo.
*/
if ((old_uip = uilookup(uid)) != NULL) {
/* someone else beat us to it */
/* Someone else beat us to it. */
free(uip, M_UIDINFO);
uip = old_uip;
} else {
@ -1082,7 +1075,7 @@ chgproccnt(uip, diff, max)
{
UIDINFO_LOCK(uip);
/* don't allow them to exceed max, but allow subtraction */
/* Don't allow them to exceed max, but allow subtraction. */
if (diff > 0 && uip->ui_proccnt + diff > max && max != 0) {
UIDINFO_UNLOCK(uip);
return (0);

View File

@ -100,7 +100,7 @@ struct uidinfo {
long ui_proccnt; /* number of processes */
uid_t ui_uid; /* uid */
u_int ui_ref; /* reference count */
struct mtx *ui_mtxp; /* protect all counts/limits */
struct mtx *ui_mtxp; /* protect all counts/limits */
};
#define UIDINFO_LOCK(ui) mtx_lock((ui)->ui_mtxp)
@ -118,22 +118,22 @@ int chgproccnt(struct uidinfo *uip, int diff, int max);
int chgsbsize(struct uidinfo *uip, u_int *hiwat, u_int to,
rlim_t max);
int fuswintr(void *base);
rlim_t lim_cur(struct proc *p, int which);
rlim_t lim_max(struct proc *p, int which);
void lim_rlimit(struct proc *p, int which, struct rlimit *rlp);
void lim_copy(struct plimit *dst, struct plimit *src);
void lim_free(struct plimit *limp);
struct plimit
*lim_alloc(void);
void lim_copy(struct plimit *dst, struct plimit *src);
rlim_t lim_cur(struct proc *p, int which);
void lim_free(struct plimit *limp);
struct plimit
*lim_hold(struct plimit *limp);
rlim_t lim_max(struct proc *p, int which);
void lim_rlimit(struct proc *p, int which, struct rlimit *rlp);
void ruadd(struct rusage *ru, struct rusage *ru2);
int suswintr(void *base, int word);
struct uidinfo
*uifind(uid_t uid);
void uihold(struct uidinfo *uip);
void uifree(struct uidinfo *uip);
void uihashinit(void);
#endif
void uihashinit(void);
void uihold(struct uidinfo *uip);
#endif /* !_SYS_RESOURCEVAR_H_ */
#endif /* _KERNEL */
#endif /* !_SYS_RESOURCEVAR_H_ */