svn commit: r237719 - in stable/9: sys/kern sys/sys usr.bin/kdump

John Baldwin jhb at FreeBSD.org
Thu Jun 28 18:38:25 UTC 2012


Author: jhb
Date: Thu Jun 28 18:38:24 2012
New Revision: 237719
URL: http://svn.freebsd.org/changeset/base/237719

Log:
  MFC 234494:
  Include the associated wait channel message for context switch ktrace
  records.  kdump supports both the old and new messages.

Modified:
  stable/9/sys/kern/kern_condvar.c
  stable/9/sys/kern/kern_ktrace.c
  stable/9/sys/kern/kern_synch.c
  stable/9/sys/kern/subr_trap.c
  stable/9/sys/sys/ktrace.h
  stable/9/usr.bin/kdump/kdump.1
  stable/9/usr.bin/kdump/kdump.c
Directory Properties:
  stable/9/sys/   (props changed)
  stable/9/sys/amd64/include/xen/   (props changed)
  stable/9/sys/boot/   (props changed)
  stable/9/sys/boot/i386/efi/   (props changed)
  stable/9/sys/boot/ia64/efi/   (props changed)
  stable/9/sys/boot/ia64/ski/   (props changed)
  stable/9/sys/boot/powerpc/boot1.chrp/   (props changed)
  stable/9/sys/boot/powerpc/ofw/   (props changed)
  stable/9/sys/cddl/contrib/opensolaris/   (props changed)
  stable/9/sys/conf/   (props changed)
  stable/9/sys/contrib/dev/acpica/   (props changed)
  stable/9/sys/contrib/octeon-sdk/   (props changed)
  stable/9/sys/contrib/pf/   (props changed)
  stable/9/sys/contrib/x86emu/   (props changed)
  stable/9/sys/dev/   (props changed)
  stable/9/sys/dev/e1000/   (props changed)
  stable/9/sys/dev/isp/   (props changed)
  stable/9/sys/dev/ixgbe/   (props changed)
  stable/9/sys/fs/   (props changed)
  stable/9/sys/fs/ntfs/   (props changed)
  stable/9/sys/modules/   (props changed)
  stable/9/usr.bin/kdump/   (props changed)

Modified: stable/9/sys/kern/kern_condvar.c
==============================================================================
--- stable/9/sys/kern/kern_condvar.c	Thu Jun 28 17:15:16 2012	(r237718)
+++ stable/9/sys/kern/kern_condvar.c	Thu Jun 28 18:38:24 2012	(r237719)
@@ -103,7 +103,7 @@ _cv_wait(struct cv *cvp, struct lock_obj
 	lock_state = 0;
 #ifdef KTRACE
 	if (KTRPOINT(td, KTR_CSW))
-		ktrcsw(1, 0);
+		ktrcsw(1, 0, cv_wmesg(cvp));
 #endif
 	CV_ASSERT(cvp, lock, td);
 	WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, lock,
@@ -140,7 +140,7 @@ _cv_wait(struct cv *cvp, struct lock_obj
 
 #ifdef KTRACE
 	if (KTRPOINT(td, KTR_CSW))
-		ktrcsw(0, 0);
+		ktrcsw(0, 0, cv_wmesg(cvp));
 #endif
 	PICKUP_GIANT();
 	if (lock != &Giant.lock_object) {
@@ -162,7 +162,7 @@ _cv_wait_unlock(struct cv *cvp, struct l
 	td = curthread;
 #ifdef KTRACE
 	if (KTRPOINT(td, KTR_CSW))
-		ktrcsw(1, 0);
+		ktrcsw(1, 0, cv_wmesg(cvp));
 #endif
 	CV_ASSERT(cvp, lock, td);
 	WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, lock,
@@ -197,7 +197,7 @@ _cv_wait_unlock(struct cv *cvp, struct l
 
 #ifdef KTRACE
 	if (KTRPOINT(td, KTR_CSW))
-		ktrcsw(0, 0);
+		ktrcsw(0, 0, cv_wmesg(cvp));
 #endif
 	PICKUP_GIANT();
 }
@@ -220,7 +220,7 @@ _cv_wait_sig(struct cv *cvp, struct lock
 	lock_state = 0;
 #ifdef KTRACE
 	if (KTRPOINT(td, KTR_CSW))
-		ktrcsw(1, 0);
+		ktrcsw(1, 0, cv_wmesg(cvp));
 #endif
 	CV_ASSERT(cvp, lock, td);
 	WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, lock,
@@ -258,7 +258,7 @@ _cv_wait_sig(struct cv *cvp, struct lock
 
 #ifdef KTRACE
 	if (KTRPOINT(td, KTR_CSW))
-		ktrcsw(0, 0);
+		ktrcsw(0, 0, cv_wmesg(cvp));
 #endif
 	PICKUP_GIANT();
 	if (lock != &Giant.lock_object) {
@@ -286,7 +286,7 @@ _cv_timedwait(struct cv *cvp, struct loc
 	lock_state = 0;
 #ifdef KTRACE
 	if (KTRPOINT(td, KTR_CSW))
-		ktrcsw(1, 0);
+		ktrcsw(1, 0, cv_wmesg(cvp));
 #endif
 	CV_ASSERT(cvp, lock, td);
 	WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, lock,
@@ -324,7 +324,7 @@ _cv_timedwait(struct cv *cvp, struct loc
 
 #ifdef KTRACE
 	if (KTRPOINT(td, KTR_CSW))
-		ktrcsw(0, 0);
+		ktrcsw(0, 0, cv_wmesg(cvp));
 #endif
 	PICKUP_GIANT();
 	if (lock != &Giant.lock_object) {
@@ -353,7 +353,7 @@ _cv_timedwait_sig(struct cv *cvp, struct
 	lock_state = 0;
 #ifdef KTRACE
 	if (KTRPOINT(td, KTR_CSW))
-		ktrcsw(1, 0);
+		ktrcsw(1, 0, cv_wmesg(cvp));
 #endif
 	CV_ASSERT(cvp, lock, td);
 	WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, lock,
@@ -392,7 +392,7 @@ _cv_timedwait_sig(struct cv *cvp, struct
 
 #ifdef KTRACE
 	if (KTRPOINT(td, KTR_CSW))
-		ktrcsw(0, 0);
+		ktrcsw(0, 0, cv_wmesg(cvp));
 #endif
 	PICKUP_GIANT();
 	if (lock != &Giant.lock_object) {

Modified: stable/9/sys/kern/kern_ktrace.c
==============================================================================
--- stable/9/sys/kern/kern_ktrace.c	Thu Jun 28 17:15:16 2012	(r237718)
+++ stable/9/sys/kern/kern_ktrace.c	Thu Jun 28 18:38:24 2012	(r237719)
@@ -731,8 +731,9 @@ ktrpsig(sig, action, mask, code)
 }
 
 void
-ktrcsw(out, user)
+ktrcsw(out, user, wmesg)
 	int out, user;
+	const char *wmesg;
 {
 	struct thread *td = curthread;
 	struct ktr_request *req;
@@ -744,6 +745,10 @@ ktrcsw(out, user)
 	kc = &req->ktr_data.ktr_csw;
 	kc->out = out;
 	kc->user = user;
+	if (wmesg != NULL)
+		strlcpy(kc->wmesg, wmesg, sizeof(kc->wmesg));
+	else
+		bzero(kc->wmesg, sizeof(kc->wmesg));
 	ktr_enqueuerequest(td, req);
 	ktrace_exit(td);
 }

Modified: stable/9/sys/kern/kern_synch.c
==============================================================================
--- stable/9/sys/kern/kern_synch.c	Thu Jun 28 17:15:16 2012	(r237718)
+++ stable/9/sys/kern/kern_synch.c	Thu Jun 28 18:38:24 2012	(r237719)
@@ -158,7 +158,7 @@ _sleep(void *ident, struct lock_object *
 	p = td->td_proc;
 #ifdef KTRACE
 	if (KTRPOINT(td, KTR_CSW))
-		ktrcsw(1, 0);
+		ktrcsw(1, 0, wmesg);
 #endif
 	WITNESS_WARN(WARN_GIANTOK | WARN_SLEEPOK, lock,
 	    "Sleeping on \"%s\"", wmesg);
@@ -252,7 +252,7 @@ _sleep(void *ident, struct lock_object *
 	}
 #ifdef KTRACE
 	if (KTRPOINT(td, KTR_CSW))
-		ktrcsw(0, 0);
+		ktrcsw(0, 0, wmesg);
 #endif
 	PICKUP_GIANT();
 	if (lock != NULL && lock != &Giant.lock_object && !(priority & PDROP)) {
@@ -314,7 +314,7 @@ msleep_spin(void *ident, struct mtx *mtx
 #ifdef KTRACE
 	if (KTRPOINT(td, KTR_CSW)) {
 		sleepq_release(ident);
-		ktrcsw(1, 0);
+		ktrcsw(1, 0, wmesg);
 		sleepq_lock(ident);
 	}
 #endif
@@ -332,7 +332,7 @@ msleep_spin(void *ident, struct mtx *mtx
 	}
 #ifdef KTRACE
 	if (KTRPOINT(td, KTR_CSW))
-		ktrcsw(0, 0);
+		ktrcsw(0, 0, wmesg);
 #endif
 	PICKUP_GIANT();
 	mtx_lock_spin(mtx);

Modified: stable/9/sys/kern/subr_trap.c
==============================================================================
--- stable/9/sys/kern/subr_trap.c	Thu Jun 28 17:15:16 2012	(r237718)
+++ stable/9/sys/kern/subr_trap.c	Thu Jun 28 18:38:24 2012	(r237719)
@@ -219,7 +219,7 @@ ast(struct trapframe *framep)
 	if (flags & TDF_NEEDRESCHED) {
 #ifdef KTRACE
 		if (KTRPOINT(td, KTR_CSW))
-			ktrcsw(1, 1);
+			ktrcsw(1, 1, __func__);
 #endif
 		thread_lock(td);
 		sched_prio(td, td->td_user_pri);
@@ -227,7 +227,7 @@ ast(struct trapframe *framep)
 		thread_unlock(td);
 #ifdef KTRACE
 		if (KTRPOINT(td, KTR_CSW))
-			ktrcsw(0, 1);
+			ktrcsw(0, 1, __func__);
 #endif
 	}
 

Modified: stable/9/sys/sys/ktrace.h
==============================================================================
--- stable/9/sys/sys/ktrace.h	Thu Jun 28 17:15:16 2012	(r237718)
+++ stable/9/sys/sys/ktrace.h	Thu Jun 28 18:38:24 2012	(r237719)
@@ -135,9 +135,15 @@ struct ktr_psig {
  * KTR_CSW - trace context switches
  */
 #define KTR_CSW		6
+struct ktr_csw_old {
+	int	out;	/* 1 if switch out, 0 if switch in */
+	int	user;	/* 1 if usermode (ivcsw), 0 if kernel (vcsw) */
+};
+
 struct ktr_csw {
 	int	out;	/* 1 if switch out, 0 if switch in */
 	int	user;	/* 1 if usermode (ivcsw), 0 if kernel (vcsw) */
+	char	wmesg[8];
 };
 
 /*
@@ -227,7 +233,7 @@ struct ktr_faultend {
 
 #ifdef	_KERNEL
 void	ktrnamei(char *);
-void	ktrcsw(int, int);
+void	ktrcsw(int, int, const char *);
 void	ktrpsig(int, sig_t, sigset_t *, int);
 void	ktrfault(vm_offset_t, int);
 void	ktrfaultend(int);

Modified: stable/9/usr.bin/kdump/kdump.1
==============================================================================
--- stable/9/usr.bin/kdump/kdump.1	Thu Jun 28 17:15:16 2012	(r237718)
+++ stable/9/usr.bin/kdump/kdump.1	Thu Jun 28 18:38:24 2012	(r237719)
@@ -28,7 +28,7 @@
 .\"	@(#)kdump.1	8.1 (Berkeley) 6/6/93
 .\" $FreeBSD$
 .\"
-.Dd April 5, 2012
+.Dd April 20, 2012
 .Dt KDUMP 1
 .Os
 .Sh NAME
@@ -167,7 +167,7 @@ The possible operations are:
 .It Li NAMI Ta file name lookup Ta path to file
 .It Li GIO Ta general I/O Ta fd, read/write, number of bytes
 .It Li PSIG Ta signal Ta signal name, handler, mask, code
-.It Li CSW Ta context switch Ta stop/resume user/kernel
+.It Li CSW Ta context switch Ta stop/resume user/kernel wmesg
 .It Li USER Ta data from user process Ta the data
 .It Li STRU Ta various syscalls Ta structure
 .It Li SCTL Ta Xr sysctl 3 requests Ta MIB name

Modified: stable/9/usr.bin/kdump/kdump.c
==============================================================================
--- stable/9/usr.bin/kdump/kdump.c	Thu Jun 28 17:15:16 2012	(r237718)
+++ stable/9/usr.bin/kdump/kdump.c	Thu Jun 28 18:38:24 2012	(r237719)
@@ -95,6 +95,7 @@ void visdump(char *, int, int);
 void ktrgenio(struct ktr_genio *, int);
 void ktrpsig(struct ktr_psig *);
 void ktrcsw(struct ktr_csw *);
+void ktrcsw_old(struct ktr_csw_old *);
 void ktruser(int, unsigned char *);
 void ktrsockaddr(struct sockaddr *);
 void ktrstat(struct stat *);
@@ -296,7 +297,10 @@ main(int argc, char *argv[])
 			ktrpsig((struct ktr_psig *)m);
 			break;
 		case KTR_CSW:
-			ktrcsw((struct ktr_csw *)m);
+			if (ktrlen == sizeof(struct ktr_csw_old))
+				ktrcsw_old((struct ktr_csw_old *)m);
+			else
+				ktrcsw((struct ktr_csw *)m);
 			break;
 		case KTR_USER:
 			ktruser(ktrlen, m);
@@ -1164,12 +1168,19 @@ ktrpsig(struct ktr_psig *psig)
 }
 
 void
-ktrcsw(struct ktr_csw *cs)
+ktrcsw_old(struct ktr_csw_old *cs)
 {
 	(void)printf("%s %s\n", cs->out ? "stop" : "resume",
 		cs->user ? "user" : "kernel");
 }
 
+void
+ktrcsw(struct ktr_csw *cs)
+{
+	printf("%s %s \"%s\"\n", cs->out ? "stop" : "resume",
+	    cs->user ? "user" : "kernel", cs->wmesg);
+}
+
 #define	UTRACE_DLOPEN_START		1
 #define	UTRACE_DLOPEN_STOP		2
 #define	UTRACE_DLCLOSE_START		3


More information about the svn-src-stable-9 mailing list