summaryrefslogtreecommitdiffstats
path: root/sys
diff options
context:
space:
mode:
Diffstat (limited to 'sys')
-rw-r--r--sys/kern/kern_ktr.c6
-rw-r--r--sys/kern/kern_ktrace.c20
-rw-r--r--sys/kern/kern_sig.c18
-rw-r--r--sys/sys/ktrace.h3
-rw-r--r--sys/sys/proc.h9
5 files changed, 27 insertions, 29 deletions
diff --git a/sys/kern/kern_ktr.c b/sys/kern/kern_ktr.c
index 2454406..7c50790 100644
--- a/sys/kern/kern_ktr.c
+++ b/sys/kern/kern_ktr.c
@@ -188,9 +188,9 @@ ktr_tracepoint(u_int mask, const char *file, int line, const char *format,
return;
#if defined(KTR_VERBOSE) || defined(KTR_ALQ)
td = curthread;
- if (td->td_inktr)
+ if (td->td_pflags & TDP_INKTR)
return;
- td->td_inktr++;
+ td->td_pflags |= TDP_INKTR;
#endif
#ifdef KTR_ALQ
if (ktr_alq_enabled &&
@@ -247,7 +247,7 @@ ktr_tracepoint(u_int mask, const char *file, int line, const char *format,
done:
#endif
#if defined(KTR_VERBOSE) || defined(KTR_ALQ)
- td->td_inktr--;
+ td->td_pflags &= ~TDP_INKTR;
#endif
}
diff --git a/sys/kern/kern_ktrace.c b/sys/kern/kern_ktrace.c
index 8e97122..ecb2421 100644
--- a/sys/kern/kern_ktrace.c
+++ b/sys/kern/kern_ktrace.c
@@ -157,12 +157,12 @@ sysctl_kern_ktrace_request_pool(SYSCTL_HANDLER_ARGS)
if (error)
return (error);
td = curthread;
- td->td_inktrace = 1;
+ td->td_pflags |= TDP_INKTRACE;
mtx_lock(&ktrace_mtx);
oldsize = ktr_requestpool;
newsize = ktrace_resize_pool(wantsize);
mtx_unlock(&ktrace_mtx);
- td->td_inktrace = 0;
+ td->td_pflags &= ~TDP_INKTRACE;
error = SYSCTL_OUT(req, &oldsize, sizeof(uint));
if (error)
return (error);
@@ -215,11 +215,11 @@ ktr_getrequest(int type)
struct proc *p = td->td_proc;
int pm;
- td->td_inktrace = 1;
+ td->td_pflags |= TDP_INKTRACE;
mtx_lock(&ktrace_mtx);
if (!KTRCHECK(td, type)) {
mtx_unlock(&ktrace_mtx);
- td->td_inktrace = 0;
+ td->td_pflags &= ~TDP_INKTRACE;
return (NULL);
}
req = STAILQ_FIRST(&ktr_free);
@@ -248,7 +248,7 @@ ktr_getrequest(int type)
mtx_unlock(&ktrace_mtx);
if (pm)
printf("Out of ktrace request objects.\n");
- td->td_inktrace = 0;
+ td->td_pflags &= ~TDP_INKTRACE;
}
return (req);
}
@@ -261,7 +261,7 @@ ktr_submitrequest(struct ktr_request *req)
STAILQ_INSERT_TAIL(&ktr_todo, req, ktr_list);
sema_post(&ktrace_sema);
mtx_unlock(&ktrace_mtx);
- curthread->td_inktrace = 0;
+ curthread->td_pflags &= ~TDP_INKTRACE;
}
static void
@@ -514,7 +514,7 @@ ktrace(td, uap)
if (ops != KTROP_CLEARFILE && facs == 0)
return (EINVAL);
- td->td_inktrace = 1;
+ td->td_pflags |= TDP_INKTRACE;
if (ops != KTROP_CLEAR) {
/*
* an operation which requires a file argument.
@@ -525,7 +525,7 @@ ktrace(td, uap)
error = vn_open(&nd, &flags, 0);
if (error) {
mtx_unlock(&Giant);
- td->td_inktrace = 0;
+ td->td_pflags &= ~TDP_INKTRACE;
return (error);
}
NDFREE(&nd, NDF_ONLY_PNBUF);
@@ -534,7 +534,7 @@ ktrace(td, uap)
if (vp->v_type != VREG) {
(void) vn_close(vp, FREAD|FWRITE, td->td_ucred, td);
mtx_unlock(&Giant);
- td->td_inktrace = 0;
+ td->td_pflags &= ~TDP_INKTRACE;
return (EACCES);
}
mtx_unlock(&Giant);
@@ -623,7 +623,7 @@ done:
(void) vn_close(vp, FWRITE, td->td_ucred, td);
mtx_unlock(&Giant);
}
- td->td_inktrace = 0;
+ td->td_pflags &= ~TDP_INKTRACE;
return (error);
#else /* !KTRACE */
return (ENOSYS);
diff --git a/sys/kern/kern_sig.c b/sys/kern/kern_sig.c
index ef4948f..6126f5f 100644
--- a/sys/kern/kern_sig.c
+++ b/sys/kern/kern_sig.c
@@ -874,7 +874,7 @@ out:
mtx_unlock(&ps->ps_mtx);
#ifdef KTRACE
if (KTRPOINT(td, KTR_PSIG))
- ktrpsig(sig, action, td->td_flags & TDF_OLDMASK ?
+ ktrpsig(sig, action, td->td_pflags & TDP_OLDMASK ?
&td->td_oldsigmask : &td->td_sigmask, 0);
#endif
_STOPEVENT(p, S_SIG, sig);
@@ -1089,9 +1089,7 @@ kern_sigsuspend(struct thread *td, sigset_t mask)
*/
PROC_LOCK(p);
td->td_oldsigmask = td->td_sigmask;
- mtx_lock_spin(&sched_lock);
- td->td_flags |= TDF_OLDMASK;
- mtx_unlock_spin(&sched_lock);
+ td->td_pflags |= TDP_OLDMASK;
SIG_CANTMASK(mask);
td->td_sigmask = mask;
signotify(td);
@@ -1122,9 +1120,7 @@ osigsuspend(td, uap)
PROC_LOCK(p);
td->td_oldsigmask = td->td_sigmask;
- mtx_lock_spin(&sched_lock);
- td->td_flags |= TDF_OLDMASK;
- mtx_unlock_spin(&sched_lock);
+ td->td_pflags |= TDP_OLDMASK;
OSIG2SIG(uap->mask, mask);
SIG_CANTMASK(mask);
SIGSETLO(td->td_sigmask, mask);
@@ -2136,7 +2132,7 @@ postsig(sig)
action = ps->ps_sigact[_SIG_IDX(sig)];
#ifdef KTRACE
if (KTRPOINT(td, KTR_PSIG))
- ktrpsig(sig, action, td->td_flags & TDF_OLDMASK ?
+ ktrpsig(sig, action, td->td_pflags & TDP_OLDMASK ?
&td->td_oldsigmask : &td->td_sigmask, 0);
#endif
_STOPEVENT(p, S_SIG, sig);
@@ -2164,11 +2160,9 @@ postsig(sig)
* mask from before the sigsuspend is what we want
* restored after the signal processing is completed.
*/
- if (td->td_flags & TDF_OLDMASK) {
+ if (td->td_pflags & TDP_OLDMASK) {
returnmask = td->td_oldsigmask;
- mtx_lock_spin(&sched_lock);
- td->td_flags &= ~TDF_OLDMASK;
- mtx_unlock_spin(&sched_lock);
+ td->td_pflags &= ~TDP_OLDMASK;
} else
returnmask = td->td_sigmask;
diff --git a/sys/sys/ktrace.h b/sys/sys/ktrace.h
index 8fffcaf..cff0e91 100644
--- a/sys/sys/ktrace.h
+++ b/sys/sys/ktrace.h
@@ -70,7 +70,8 @@ struct ktr_header {
* is the public interface.
*/
#define KTRCHECK(td, type) ((td)->td_proc->p_traceflag & (1 << type))
-#define KTRPOINT(td, type) (KTRCHECK((td), (type)) && !(td)->td_inktrace)
+#define KTRPOINT(td, type) \
+ (KTRCHECK((td), (type)) && !((td)->td_pflags & TDP_INKTRACE))
/*
* ktrace record types
diff --git a/sys/sys/proc.h b/sys/sys/proc.h
index 125e690..dec25e5 100644
--- a/sys/sys/proc.h
+++ b/sys/sys/proc.h
@@ -269,14 +269,13 @@ struct thread {
#define td_startzero td_flags
int td_flags; /* (j) TDF_* flags. */
int td_inhibitors; /* (j) Why can not run */
+ int td_pflags; /* (k) Private thread (TDP_*) flags. */
struct kse *td_last_kse; /* (j) Previous value of td_kse */
struct kse *td_kse; /* (j) Current KSE if running. */
int td_dupfd; /* (k) Ret value from fdopen. XXX */
void *td_wchan; /* (j) Sleep address. */
const char *td_wmesg; /* (j) Reason for sleep. */
u_char td_lastcpu; /* (j) Last cpu we were on. */
- u_char td_inktr; /* (k) Currently handling a KTR. */
- u_char td_inktrace; /* (k) Currently handling a KTRACE. */
u_char td_oncpu; /* (j) Which cpu we are on. */
short td_locks; /* (k) DEBUG: lockmgr count of locks */
struct mtx *td_blocked; /* (j) Mutex process is blocked on. */
@@ -333,7 +332,6 @@ struct thread {
struct td_sched *td_sched; /* (*) Scheduler specific data */
};
/* flags kept in td_flags */
-#define TDF_OLDMASK 0x000001 /* Need to restore mask after suspend. */
#define TDF_INPANIC 0x000002 /* Caused a panic, let it drive crashdump. */
#define TDF_CAN_UNBIND 0x000004 /* Only temporarily bound. */
#define TDF_SINTR 0x000008 /* Sleep is interruptible. */
@@ -352,6 +350,11 @@ struct thread {
#define TDF_NEEDSIGCHK 0x020000 /* Thread may need signal delivery. */
#define TDF_DEADLKTREAT 0x800000 /* Lock aquisition - deadlock treatment. */
+/* "private" flags kept in td_pflags */
+#define TDP_OLDMASK 0x0001 /* Need to restore mask after suspend. */
+#define TDP_INKTR 0x0002 /* Thread is currently in KTR code. */
+#define TDP_INKTRACE 0x0004 /* Thread is currently in KTRACE code. */
+
#define TDI_SUSPENDED 0x0001 /* On suspension queue. */
#define TDI_SLEEPING 0x0002 /* Actually asleep! (tricky). */
#define TDI_SWAPPED 0x0004 /* Stack not in mem.. bad juju if run. */
OpenPOWER on IntegriCloud