svn commit: r278693 - in stable/10: sys/kern tools/sched usr.bin/man
Sean Bruno
sbruno at FreeBSD.org
Fri Feb 13 18:45:47 UTC 2015
Author: sbruno
Date: Fri Feb 13 18:45:44 2015
New Revision: 278693
URL: https://svnweb.freebsd.org/changeset/base/278693
Log:
Revert r278650. Definite layer 8 bug.
Submitted by: dhw and Thomas Mueller <tmueller at sysgo.com>
Modified:
stable/10/sys/kern/kern_lock.c
stable/10/sys/kern/kern_mutex.c
stable/10/sys/kern/kern_rwlock.c
stable/10/sys/kern/kern_sx.c
stable/10/sys/kern/kern_timeout.c
stable/10/tools/sched/schedgraph.py
stable/10/usr.bin/man/man.sh
Directory Properties:
stable/10/ (props changed)
Modified: stable/10/sys/kern/kern_lock.c
==============================================================================
--- stable/10/sys/kern/kern_lock.c Fri Feb 13 18:37:22 2015 (r278692)
+++ stable/10/sys/kern/kern_lock.c Fri Feb 13 18:45:44 2015 (r278693)
@@ -583,9 +583,6 @@ __lockmgr_args(struct lock *lk, u_int fl
CTR3(KTR_LOCK,
"%s: spinning on %p held by %p",
__func__, lk, owner);
- KTR_STATE1(KTR_SCHED, "thread",
- sched_tdname(td), "spinning",
- "lockname:\"%s\"", lk->lock_object.lo_name);
/*
* If we are holding also an interlock drop it
@@ -601,16 +598,11 @@ __lockmgr_args(struct lock *lk, u_int fl
while (LK_HOLDER(lk->lk_lock) ==
(uintptr_t)owner && TD_IS_RUNNING(owner))
cpu_spinwait();
- KTR_STATE0(KTR_SCHED, "thread",
- sched_tdname(td), "running");
GIANT_RESTORE();
continue;
} else if (LK_CAN_ADAPT(lk, flags) &&
(x & LK_SHARE) != 0 && LK_SHARERS(x) &&
spintries < alk_retries) {
- KTR_STATE1(KTR_SCHED, "thread",
- sched_tdname(td), "spinning",
- "lockname:\"%s\"", lk->lock_object.lo_name);
if (flags & LK_INTERLOCK) {
class->lc_unlock(ilk);
flags &= ~LK_INTERLOCK;
@@ -628,8 +620,6 @@ __lockmgr_args(struct lock *lk, u_int fl
break;
cpu_spinwait();
}
- KTR_STATE0(KTR_SCHED, "thread",
- sched_tdname(td), "running");
GIANT_RESTORE();
if (i != alk_loops)
continue;
@@ -825,9 +815,6 @@ __lockmgr_args(struct lock *lk, u_int fl
CTR3(KTR_LOCK,
"%s: spinning on %p held by %p",
__func__, lk, owner);
- KTR_STATE1(KTR_SCHED, "thread",
- sched_tdname(td), "spinning",
- "lockname:\"%s\"", lk->lock_object.lo_name);
/*
* If we are holding also an interlock drop it
@@ -843,8 +830,6 @@ __lockmgr_args(struct lock *lk, u_int fl
while (LK_HOLDER(lk->lk_lock) ==
(uintptr_t)owner && TD_IS_RUNNING(owner))
cpu_spinwait();
- KTR_STATE0(KTR_SCHED, "thread",
- sched_tdname(td), "running");
GIANT_RESTORE();
continue;
} else if (LK_CAN_ADAPT(lk, flags) &&
@@ -854,9 +839,6 @@ __lockmgr_args(struct lock *lk, u_int fl
!atomic_cmpset_ptr(&lk->lk_lock, x,
x | LK_EXCLUSIVE_SPINNERS))
continue;
- KTR_STATE1(KTR_SCHED, "thread",
- sched_tdname(td), "spinning",
- "lockname:\"%s\"", lk->lock_object.lo_name);
if (flags & LK_INTERLOCK) {
class->lc_unlock(ilk);
flags &= ~LK_INTERLOCK;
@@ -873,8 +855,6 @@ __lockmgr_args(struct lock *lk, u_int fl
break;
cpu_spinwait();
}
- KTR_STATE0(KTR_SCHED, "thread",
- sched_tdname(td), "running");
GIANT_RESTORE();
if (i != alk_loops)
continue;
Modified: stable/10/sys/kern/kern_mutex.c
==============================================================================
--- stable/10/sys/kern/kern_mutex.c Fri Feb 13 18:37:22 2015 (r278692)
+++ stable/10/sys/kern/kern_mutex.c Fri Feb 13 18:45:44 2015 (r278693)
@@ -436,10 +436,6 @@ __mtx_lock_sleep(volatile uintptr_t *c,
CTR3(KTR_LOCK,
"%s: spinning on %p held by %p",
__func__, m, owner);
- KTR_STATE1(KTR_SCHED, "thread",
- sched_tdname((struct thread *)tid),
- "spinning", "lockname:\"%s\"",
- m->lock_object.lo_name);
while (mtx_owner(m) == owner &&
TD_IS_RUNNING(owner)) {
cpu_spinwait();
@@ -447,9 +443,6 @@ __mtx_lock_sleep(volatile uintptr_t *c,
spin_cnt++;
#endif
}
- KTR_STATE0(KTR_SCHED, "thread",
- sched_tdname((struct thread *)tid),
- "running");
continue;
}
}
@@ -586,8 +579,6 @@ _mtx_lock_spin_cookie(volatile uintptr_t
if (LOCK_LOG_TEST(&m->lock_object, opts))
CTR1(KTR_LOCK, "_mtx_lock_spin: %p spinning", m);
- KTR_STATE1(KTR_SCHED, "thread", sched_tdname((struct thread *)tid),
- "spinning", "lockname:\"%s\"", m->lock_object.lo_name);
#ifdef HWPMC_HOOKS
PMC_SOFT_CALL( , , lock, failed);
@@ -613,8 +604,6 @@ _mtx_lock_spin_cookie(volatile uintptr_t
if (LOCK_LOG_TEST(&m->lock_object, opts))
CTR1(KTR_LOCK, "_mtx_lock_spin: %p spin done", m);
- KTR_STATE0(KTR_SCHED, "thread", sched_tdname((struct thread *)tid),
- "running");
LOCKSTAT_PROFILE_OBTAIN_LOCK_SUCCESS(LS_MTX_SPIN_LOCK_ACQUIRE, m,
contested, waittime, (file), (line));
Modified: stable/10/sys/kern/kern_rwlock.c
==============================================================================
--- stable/10/sys/kern/kern_rwlock.c Fri Feb 13 18:37:22 2015 (r278692)
+++ stable/10/sys/kern/kern_rwlock.c Fri Feb 13 18:45:44 2015 (r278693)
@@ -44,7 +44,6 @@ __FBSDID("$FreeBSD$");
#include <sys/mutex.h>
#include <sys/proc.h>
#include <sys/rwlock.h>
-#include <sys/sched.h>
#include <sys/sysctl.h>
#include <sys/systm.h>
#include <sys/turnstile.h>
@@ -424,9 +423,6 @@ __rw_rlock(volatile uintptr_t *c, const
CTR3(KTR_LOCK,
"%s: spinning on %p held by %p",
__func__, rw, owner);
- KTR_STATE1(KTR_SCHED, "thread",
- sched_tdname(curthread), "spinning",
- "lockname:\"%s\"", rw->lock_object.lo_name);
while ((struct thread*)RW_OWNER(rw->rw_lock) ==
owner && TD_IS_RUNNING(owner)) {
cpu_spinwait();
@@ -434,23 +430,16 @@ __rw_rlock(volatile uintptr_t *c, const
spin_cnt++;
#endif
}
- KTR_STATE0(KTR_SCHED, "thread",
- sched_tdname(curthread), "running");
continue;
}
} else if (spintries < rowner_retries) {
spintries++;
- KTR_STATE1(KTR_SCHED, "thread", sched_tdname(curthread),
- "spinning", "lockname:\"%s\"",
- rw->lock_object.lo_name);
for (i = 0; i < rowner_loops; i++) {
v = rw->rw_lock;
if ((v & RW_LOCK_READ) == 0 || RW_CAN_READ(v))
break;
cpu_spinwait();
}
- KTR_STATE0(KTR_SCHED, "thread", sched_tdname(curthread),
- "running");
if (i != rowner_loops)
continue;
}
@@ -770,9 +759,6 @@ __rw_wlock_hard(volatile uintptr_t *c, u
if (LOCK_LOG_TEST(&rw->lock_object, 0))
CTR3(KTR_LOCK, "%s: spinning on %p held by %p",
__func__, rw, owner);
- KTR_STATE1(KTR_SCHED, "thread", sched_tdname(curthread),
- "spinning", "lockname:\"%s\"",
- rw->lock_object.lo_name);
while ((struct thread*)RW_OWNER(rw->rw_lock) == owner &&
TD_IS_RUNNING(owner)) {
cpu_spinwait();
@@ -780,8 +766,6 @@ __rw_wlock_hard(volatile uintptr_t *c, u
spin_cnt++;
#endif
}
- KTR_STATE0(KTR_SCHED, "thread", sched_tdname(curthread),
- "running");
continue;
}
if ((v & RW_LOCK_READ) && RW_READERS(v) &&
@@ -793,16 +777,11 @@ __rw_wlock_hard(volatile uintptr_t *c, u
}
}
spintries++;
- KTR_STATE1(KTR_SCHED, "thread", sched_tdname(curthread),
- "spinning", "lockname:\"%s\"",
- rw->lock_object.lo_name);
for (i = 0; i < rowner_loops; i++) {
if ((rw->rw_lock & RW_LOCK_WRITE_SPINNER) == 0)
break;
cpu_spinwait();
}
- KTR_STATE0(KTR_SCHED, "thread", sched_tdname(curthread),
- "running");
#ifdef KDTRACE_HOOKS
spin_cnt += rowner_loops - i;
#endif
Modified: stable/10/sys/kern/kern_sx.c
==============================================================================
--- stable/10/sys/kern/kern_sx.c Fri Feb 13 18:37:22 2015 (r278692)
+++ stable/10/sys/kern/kern_sx.c Fri Feb 13 18:45:44 2015 (r278693)
@@ -51,7 +51,6 @@ __FBSDID("$FreeBSD$");
#include <sys/lock.h>
#include <sys/mutex.h>
#include <sys/proc.h>
-#include <sys/sched.h>
#include <sys/sleepqueue.h>
#include <sys/sx.h>
#include <sys/sysctl.h>
@@ -561,10 +560,6 @@ _sx_xlock_hard(struct sx *sx, uintptr_t
CTR3(KTR_LOCK,
"%s: spinning on %p held by %p",
__func__, sx, owner);
- KTR_STATE1(KTR_SCHED, "thread",
- sched_tdname(curthread), "spinning",
- "lockname:\"%s\"",
- sx->lock_object.lo_name);
GIANT_SAVE();
while (SX_OWNER(sx->sx_lock) == x &&
TD_IS_RUNNING(owner)) {
@@ -573,14 +568,9 @@ _sx_xlock_hard(struct sx *sx, uintptr_t
spin_cnt++;
#endif
}
- KTR_STATE0(KTR_SCHED, "thread",
- sched_tdname(curthread), "running");
continue;
}
} else if (SX_SHARERS(x) && spintries < asx_retries) {
- KTR_STATE1(KTR_SCHED, "thread",
- sched_tdname(curthread), "spinning",
- "lockname:\"%s\"", sx->lock_object.lo_name);
GIANT_SAVE();
spintries++;
for (i = 0; i < asx_loops; i++) {
@@ -597,8 +587,6 @@ _sx_xlock_hard(struct sx *sx, uintptr_t
spin_cnt++;
#endif
}
- KTR_STATE0(KTR_SCHED, "thread",
- sched_tdname(curthread), "running");
if (i != asx_loops)
continue;
}
@@ -861,9 +849,6 @@ _sx_slock_hard(struct sx *sx, int opts,
CTR3(KTR_LOCK,
"%s: spinning on %p held by %p",
__func__, sx, owner);
- KTR_STATE1(KTR_SCHED, "thread",
- sched_tdname(curthread), "spinning",
- "lockname:\"%s\"", sx->lock_object.lo_name);
GIANT_SAVE();
while (SX_OWNER(sx->sx_lock) == x &&
TD_IS_RUNNING(owner)) {
@@ -872,8 +857,6 @@ _sx_slock_hard(struct sx *sx, int opts,
#endif
cpu_spinwait();
}
- KTR_STATE0(KTR_SCHED, "thread",
- sched_tdname(curthread), "running");
continue;
}
}
Modified: stable/10/sys/kern/kern_timeout.c
==============================================================================
--- stable/10/sys/kern/kern_timeout.c Fri Feb 13 18:37:22 2015 (r278692)
+++ stable/10/sys/kern/kern_timeout.c Fri Feb 13 18:45:44 2015 (r278693)
@@ -150,7 +150,6 @@ struct callout_cpu {
sbintime_t cc_lastscan;
void *cc_cookie;
u_int cc_bucket;
- char cc_ktr_event_name[20];
};
#define cc_exec_curr cc_exec_entity[0].cc_curr
@@ -189,7 +188,7 @@ struct callout_cpu cc_cpu;
static int timeout_cpu;
-static void callout_cpu_init(struct callout_cpu *cc, int cpu);
+static void callout_cpu_init(struct callout_cpu *cc);
static void softclock_call_cc(struct callout *c, struct callout_cpu *cc,
#ifdef CALLOUT_PROFILING
int *mpcalls, int *lockcalls, int *gcalls,
@@ -284,7 +283,7 @@ callout_callwheel_init(void *dummy)
cc = CC_CPU(timeout_cpu);
cc->cc_callout = malloc(ncallout * sizeof(struct callout),
M_CALLOUT, M_WAITOK);
- callout_cpu_init(cc, timeout_cpu);
+ callout_cpu_init(cc);
}
SYSINIT(callwheel_init, SI_SUB_CPU, SI_ORDER_ANY, callout_callwheel_init, NULL);
@@ -292,7 +291,7 @@ SYSINIT(callwheel_init, SI_SUB_CPU, SI_O
* Initialize the per-cpu callout structures.
*/
static void
-callout_cpu_init(struct callout_cpu *cc, int cpu)
+callout_cpu_init(struct callout_cpu *cc)
{
struct callout *c;
int i;
@@ -307,8 +306,6 @@ callout_cpu_init(struct callout_cpu *cc,
cc->cc_firstevent = INT64_MAX;
for (i = 0; i < 2; i++)
cc_cce_cleanup(cc, i);
- snprintf(cc->cc_ktr_event_name, sizeof(cc->cc_ktr_event_name),
- "callwheel cpu %d", cpu);
if (cc->cc_callout == NULL) /* Only cpu0 handles timeout(9) */
return;
for (i = 0; i < ncallout; i++) {
@@ -370,7 +367,7 @@ start_softclock(void *dummy)
continue;
cc = CC_CPU(cpu);
cc->cc_callout = NULL; /* Only cpu0 handles timeout(9). */
- callout_cpu_init(cc, cpu);
+ callout_cpu_init(cc);
if (swi_add(NULL, "clock", softclock, cc, SWI_CLOCK,
INTR_MPSAFE, &cc->cc_cookie))
panic("died while creating standard software ithreads");
@@ -677,8 +674,6 @@ softclock_call_cc(struct callout *c, str
CTR3(KTR_CALLOUT, "callout %p func %p arg %p",
c, c_func, c_arg);
}
- KTR_STATE3(KTR_SCHED, "callout", cc->cc_ktr_event_name, "running",
- "func:%p", c_func, "arg:%p", c_arg, "direct:%d", direct);
#if defined(DIAGNOSTIC) || defined(CALLOUT_PROFILING)
sbt1 = sbinuptime();
#endif
@@ -701,7 +696,6 @@ softclock_call_cc(struct callout *c, str
lastfunc = c_func;
}
#endif
- KTR_STATE0(KTR_SCHED, "callout", cc->cc_ktr_event_name, "idle");
CTR1(KTR_CALLOUT, "callout %p finished", c);
if ((c_flags & CALLOUT_RETURNUNLOCKED) == 0)
class->lc_unlock(c_lock);
Modified: stable/10/tools/sched/schedgraph.py
==============================================================================
--- stable/10/tools/sched/schedgraph.py Fri Feb 13 18:37:22 2015 (r278692)
+++ stable/10/tools/sched/schedgraph.py Fri Feb 13 18:45:44 2015 (r278693)
@@ -70,7 +70,6 @@ eventcolors = [
("count", "red"),
("running", "green"),
("idle", "grey"),
- ("spinning", "red"),
("yielding", "yellow"),
("swapped", "violet"),
("suspended", "purple"),
@@ -81,6 +80,8 @@ eventcolors = [
("runq rem", "yellow"),
("thread exit", "grey"),
("proc exit", "grey"),
+ ("callwheel idle", "grey"),
+ ("callout running", "green"),
("lock acquire", "blue"),
("lock contest", "purple"),
("failed lock try", "red"),
@@ -855,7 +856,7 @@ class EventSource:
return (Y_EVENTSOURCE)
def eventat(self, i):
- if (i >= len(self.events) or i < 0):
+ if (i >= len(self.events)):
return (None)
event = self.events[i]
return (event)
@@ -902,6 +903,7 @@ class KTRFile:
self.timestamp_f = None
self.timestamp_l = None
self.locks = {}
+ self.callwheels = {}
self.ticks = {}
self.load = {}
self.crit = {}
Modified: stable/10/usr.bin/man/man.sh
==============================================================================
--- stable/10/usr.bin/man/man.sh Fri Feb 13 18:37:22 2015 (r278692)
+++ stable/10/usr.bin/man/man.sh Fri Feb 13 18:45:44 2015 (r278693)
@@ -276,8 +276,11 @@ man_check_for_so() {
return 0
}
+# Usage: man_display_page
+# Display either the manpage or catpage depending on the use_cat variable
man_display_page() {
- local IFS pipeline preconv_enc testline
+ local EQN NROFF PIC TBL TROFF REFER VGRIND
+ local IFS l nroff_dev pipeline preproc_arg tool
# We are called with IFS set to colon. This causes really weird
# things to happen for the variables that have spaces in them.
@@ -309,49 +312,6 @@ man_display_page() {
return
fi
- case "${manpage}" in
- *.${man_charset}/*)
- case "$man_charset" in
- ISO8859-1) preconv_enc="latin-1" ;;
- ISO8859-15) preconv_enc="latin-1" ;;
- UTF-8) preconv_enc="utf-8" ;;
- esac
- ;;
- esac
-
- if [ -n "$preconv_enc" ]; then
- pipeline="preconv -e $preconv_enc |"
- fi
- testline="$pipeline mandoc -Tlint -Werror 2>/dev/null"
- pipeline="$pipeline mandoc -Tlocale | $MANPAGER"
-
- if ! eval "$cattool $manpage | $testline" ;then
- if which -s groff2; then
- man_display_page_groff
- else
- echo "This manpage needs groff(1) to be rendered" >&2
- echo "First install groff(1): " >&2
- echo "pkg install groff " >&2
- ret=1
- fi
- return
- fi
-
- if [ $debug -gt 0 ]; then
- decho "Command: $cattool $manpage | $pipeline"
- ret=0
- else
- eval "$cattool $manpage | $pipeline"
- ret=$?
- fi
-}
-
-# Usage: man_display_page
-# Display either the manpage or catpage depending on the use_cat variable
-man_display_page_groff() {
- local EQN NROFF PIC TBL TROFF REFER VGRIND
- local IFS l nroff_dev pipeline preproc_arg tool
-
# So, we really do need to parse the manpage. First, figure out the
# device flag (-T) we have to pass to eqn(1) and groff(1). Then,
# setup the pipeline of commands based on the user's request.
More information about the svn-src-stable
mailing list