Skip site navigation (1)Skip section navigation (2)
Date:      Sat, 30 Mar 2002 18:19:22 -0800 (PST)
From:      Jake Burkholder <jake@FreeBSD.org>
To:        Perforce Change Reviews <perforce@freebsd.org>
Subject:   PERFORCE change 8703 for review
Message-ID:  <200203310219.g2V2JMu45259@freefall.freebsd.org>

next in thread | raw e-mail | index | archive | help
http://people.freebsd.org/~peter/p4db/chv.cgi?CH=8703

Change 8703 by jake@jake_sparc64 on 2002/03/30 18:18:38

	ktr changes to make a userland dump tool feasible.
	- add a version number
	- remove KTR_EXTEND
	- use an array for the arguments
	- remove recursion detection if KTR_VERBOSE is not defined

Affected files ...

... //depot/projects/sparc64/sys/conf/options#21 edit
... //depot/projects/sparc64/sys/kern/kern_ktr.c#13 edit
... //depot/projects/sparc64/sys/sparc64/include/ktr.h#9 edit
... //depot/projects/sparc64/sys/sparc64/sparc64/genassym.c#65 edit
... //depot/projects/sparc64/sys/sys/ktr.h#9 edit

Differences ...

==== //depot/projects/sparc64/sys/conf/options#21 (text+ko) ====

@@ -498,7 +498,6 @@
 KTR_CPUMASK		opt_ktr.h
 KTR_COMPILE		opt_global.h
 KTR_ENTRIES		opt_global.h
-KTR_EXTEND		opt_global.h
 KTR_VERBOSE		opt_ktr.h
 MUTEX_DEBUG		opt_global.h
 WITNESS			opt_global.h

==== //depot/projects/sparc64/sys/kern/kern_ktr.c#13 (text+ko) ====

@@ -46,9 +46,9 @@
 #include <sys/sysctl.h>
 #include <sys/systm.h>
 #include <sys/time.h>
+
 #include <machine/cpu.h>
 #include <machine/ktr.h>
-#include <machine/stdarg.h>
 
 #include <ddb/ddb.h>
 
@@ -64,20 +64,12 @@
 #define	KTR_CPUMASK	(~0)
 #endif
 
-#ifndef KTR_CPU
-#define KTR_CPU		PCPU_GET(cpuid)
+#ifndef KTR_TIME
+#define	KTR_TIME	get_cyclecount()
 #endif
 
-#ifdef KTR_EXTEND
-#define KTR_EXTEND_DEFAULT	1
-#else
-#define KTR_EXTEND_DEFAULT	0
-#endif
-
-#ifdef KTR_VERBOSE
-#define KTR_VERBOSE_DEFAULT	1
-#else
-#define KTR_VERBOSE_DEFAULT	0
+#ifndef KTR_CPU
+#define	KTR_CPU		PCPU_GET(cpuid)
 #endif
 
 SYSCTL_NODE(_debug, OID_AUTO, ktr, CTLFLAG_RD, 0, "KTR options");
@@ -86,9 +78,6 @@
  * This variable is used only by gdb to work out what fields are in
  * ktr_entry.
  */
-int     ktr_extend = KTR_EXTEND_DEFAULT;
-SYSCTL_INT(_debug_ktr, OID_AUTO, extend, CTLFLAG_RD, &ktr_extend, 0, "");
-
 int	ktr_cpumask = KTR_CPUMASK;
 TUNABLE_INT("debug.ktr.cpumask", &ktr_cpumask);
 SYSCTL_INT(_debug_ktr, OID_AUTO, cpumask, CTLFLAG_RW, &ktr_cpumask, 0, "");
@@ -100,68 +89,74 @@
 int	ktr_entries = KTR_ENTRIES;
 SYSCTL_INT(_debug_ktr, OID_AUTO, entries, CTLFLAG_RD, &ktr_entries, 0, "");
 
+int	ktr_version = KTR_VERSION;
+SYSCTL_INT(_debug_ktr, OID_AUTO, version, CTLFLAG_RD, &ktr_version, 0, "");
+
 volatile int	ktr_idx = 0;
 struct	ktr_entry ktr_buf[KTR_ENTRIES];
 
-int	ktr_verbose = KTR_VERBOSE_DEFAULT;
+#ifdef KTR_VERBOSE
+int	ktr_verbose = KTR_VERBOSE;
 TUNABLE_INT("debug.ktr.verbose", &ktr_verbose);
 SYSCTL_INT(_debug_ktr, OID_AUTO, verbose, CTLFLAG_RW, &ktr_verbose, 0, "");
+#endif
 
-#ifdef KTR
-#ifdef KTR_EXTEND
 void
-ktr_tracepoint(u_int mask, const char *filename, u_int line,
-	       const char *format, ...)
-#else
-void
-ktr_tracepoint(u_int mask, const char *format, u_long arg1, u_long arg2,
-	       u_long arg3, u_long arg4, u_long arg5, u_long arg6)
-#endif
+ktr_tracepoint(u_int mask, const char *file, int line, const char *format,
+    u_long arg1, u_long arg2, u_long arg3, u_long arg4, u_long arg5,
+    u_long arg6)
 {
 	struct ktr_entry *entry;
 	int newindex, saveindex;
-#ifdef KTR_EXTEND
-	va_list ap;
+#ifdef KTR_VERBOSE
+	struct thread *td;
 #endif
+	int cpu;
 
 	if (panicstr)
 		return;
 	if ((ktr_mask & mask) == 0)
 		return;
-	if (((1 << KTR_CPU) & ktr_cpumask) == 0)
+	cpu = KTR_CPU;
+	if (((1 << cpu) & ktr_cpumask) == 0)
+		return;
+#ifdef KTR_VERBOSE
+	td = curthread;
+	if (td->td_inktr)
 		return;
+	td->td_inktr++;
+#endif
 	do {
 		saveindex = ktr_idx;
 		newindex = (saveindex + 1) & (KTR_ENTRIES - 1);
 	} while (atomic_cmpset_rel_int(&ktr_idx, saveindex, newindex) == 0);
 	entry = &ktr_buf[saveindex];
-	entry->ktr_cpu = KTR_CPU;
-	entry->ktr_timestamp = get_cyclecount();
-#ifdef KTR_EXTEND
-	entry->ktr_filename = filename;
+	entry->ktr_timestamp = KTR_TIME;
+	entry->ktr_cpu = cpu;
+	entry->ktr_file = file;
 	entry->ktr_line = line;
-	va_start(ap, format);
-	vsnprintf(entry->ktr_desc, KTRDESCSIZE, format, ap);
-	va_end(ap);
+#ifdef KTR_VERBOSE
 	if (ktr_verbose) {
 #ifdef SMP
-		printf("cpu%d ", entry->ktr_cpu);
+		printf("cpu%d ", cpu);
 #endif
-		if (ktr_verbose > 1)
-			printf("%s.%d\t", entry->ktr_filename, entry->ktr_line);
-		va_start(ap, format);
-		vprintf(format, ap);
+		if (ktr_verbose > 1) {
+			printf("%s.%d\t", entry->ktr_file,
+			    entry->ktr_line);
+		}
+		printf(format, arg1, arg2, arg3, arg4, arg5, arg6);
 		printf("\n");
-		va_end(ap);
 	}
-#else
+#endif
 	entry->ktr_desc = format;
-	entry->ktr_parm1 = arg1;
-	entry->ktr_parm2 = arg2;
-	entry->ktr_parm3 = arg3;
-	entry->ktr_parm4 = arg4;
-	entry->ktr_parm5 = arg5;
-	entry->ktr_parm6 = arg6;
+	entry->ktr_parms[0] = arg1;
+	entry->ktr_parms[1] = arg2;
+	entry->ktr_parms[2] = arg3;
+	entry->ktr_parms[3] = arg4;
+	entry->ktr_parms[4] = arg5;
+	entry->ktr_parms[5] = arg6;
+#ifdef KTR_VERBOSE
+	td->td_inktr--;
 #endif
 }
 
@@ -179,22 +174,17 @@
 
 DB_SHOW_COMMAND(ktr, db_ktr_all)
 {
-	int	all, c, lines;
+	int	c, lines;
 
-	all = 0;
-	db_ktr_verbose = 0;
 	lines = NUM_LINES_PER_PAGE;
 	tstate.cur = (ktr_idx - 1) & (KTR_ENTRIES - 1);
 	tstate.first = -1;
 	if (strcmp(modif, "v") == 0)
 		db_ktr_verbose = 1;
-	else if (strcmp(modif, "a") == 0)
-		all = 1;
+	else
+		db_ktr_verbose = 0;
 	while (db_mach_vtrace())
-		if (all) {
-			if (cncheckc() != -1)
-				return;
-		} else if (--lines == 0) {
+		if (--lines == 0) {
 			db_printf("--More--");
 			c = cngetc();
 			db_printf("\r");
@@ -221,35 +211,29 @@
 		db_printf("--- End of trace buffer ---\n");
 		return (0);
 	}
-	if (tstate.first == -1)
-		tstate.first = tstate.cur;
 	kp = &ktr_buf[tstate.cur];
 
 	/* Skip over unused entries. */
-#ifdef KTR_EXTEND
-	if (kp->ktr_desc[0] == '\0') {
-#else
 	if (kp->ktr_desc == NULL) {
-#endif
 		db_printf("--- End of trace buffer ---\n");
 		return (0);
 	}
-	db_printf("%d: %d %10.10ld ", tstate.cur, kp->ktr_cpu,
-	    ktr_buf[(tstate.cur + 1) & (KTR_ENTRIES - 1)].ktr_timestamp -
-	    kp->ktr_timestamp);
-#ifdef KTR_EXTEND
+	db_printf("%d: ", tstate.cur);
 #ifdef SMP
 	db_printf("cpu%d ", kp->ktr_cpu);
 #endif
-	if (db_ktr_verbose)
-		db_printf("%s.%d\t", kp->ktr_filename, kp->ktr_line);
-	db_printf("%s", kp->ktr_desc);
-#else
-	db_printf(kp->ktr_desc, kp->ktr_parm1, kp->ktr_parm2, kp->ktr_parm3,
-	    kp->ktr_parm4, kp->ktr_parm5, kp->ktr_parm6);
-#endif
+	if (db_ktr_verbose) {
+		db_printf("%10.10lld %s.%d\t", (long long)kp->ktr_timestamp,
+		    kp->ktr_file, kp->ktr_line);
+	}
+	db_printf(kp->ktr_desc, kp->ktr_parms[0], kp->ktr_parms[1],
+	    kp->ktr_parms[2], kp->ktr_parms[3], kp->ktr_parms[4],
+	    kp->ktr_parms[5]);
 	db_printf("\n");
 
+	if (tstate.first == -1)
+		tstate.first = tstate.cur;
+
 	if (--tstate.cur < 0)
 		tstate.cur = KTR_ENTRIES - 1;
 
@@ -257,4 +241,3 @@
 }
 
 #endif	/* DDB */
-#endif	/* KTR */

==== //depot/projects/sparc64/sys/sparc64/include/ktr.h#9 (text+ko) ====

@@ -70,10 +70,12 @@
 	SET(ktr_buf, r3, r1) ; \
 	mulx	r2, KTR_SIZEOF, r2 ; \
 	add	r1, r2, r1 ; \
+	rd	%tick, r2 ; \
+	stx	r2, [r1 + KTR_TIMESTAMP] ; \
 	UPA_GET_MID(r2) ; \
 	stw	r2, [r1 + KTR_CPU] ; \
-	rd	%tick, r2 ; \
-	stx	r2, [r1 + KTR_TIMESTAMP] ; \
+	stw	%g0, [r1 + KTR_LINE] ; \
+	stx	%g0, [r1 + KTR_FILE] ; \
 	SET(l1 ## b, r3, r2) ; \
 	stx	r2, [r1 + KTR_DESC]
 

==== //depot/projects/sparc64/sys/sparc64/sparc64/genassym.c#65 (text+ko) ====

@@ -135,15 +135,17 @@
 ASSYM(KTR_CT8, KTR_CT8);
 
 ASSYM(KTR_SIZEOF, sizeof(struct ktr_entry));
+ASSYM(KTR_TIMESTAMP, offsetof(struct ktr_entry, ktr_timestamp));
+ASSYM(KTR_CPU, offsetof(struct ktr_entry, ktr_cpu));
+ASSYM(KTR_LINE, offsetof(struct ktr_entry, ktr_line));
+ASSYM(KTR_FILE, offsetof(struct ktr_entry, ktr_file));
 ASSYM(KTR_DESC, offsetof(struct ktr_entry, ktr_desc));
-ASSYM(KTR_CPU, offsetof(struct ktr_entry, ktr_cpu));
-ASSYM(KTR_TIMESTAMP, offsetof(struct ktr_entry, ktr_timestamp));
-ASSYM(KTR_PARM1, offsetof(struct ktr_entry, ktr_parm1));
-ASSYM(KTR_PARM2, offsetof(struct ktr_entry, ktr_parm2));
-ASSYM(KTR_PARM3, offsetof(struct ktr_entry, ktr_parm3));
-ASSYM(KTR_PARM4, offsetof(struct ktr_entry, ktr_parm4));
-ASSYM(KTR_PARM5, offsetof(struct ktr_entry, ktr_parm5));
-ASSYM(KTR_PARM6, offsetof(struct ktr_entry, ktr_parm6));
+ASSYM(KTR_PARM1, offsetof(struct ktr_entry, ktr_parms[0]));
+ASSYM(KTR_PARM2, offsetof(struct ktr_entry, ktr_parms[1]));
+ASSYM(KTR_PARM3, offsetof(struct ktr_entry, ktr_parms[2]));
+ASSYM(KTR_PARM4, offsetof(struct ktr_entry, ktr_parms[3]));
+ASSYM(KTR_PARM5, offsetof(struct ktr_entry, ktr_parms[4]));
+ASSYM(KTR_PARM6, offsetof(struct ktr_entry, ktr_parms[5]));
 
 ASSYM(TTE_VPN, offsetof(struct tte, tte_vpn));
 ASSYM(TTE_DATA, offsetof(struct tte, tte_data));

==== //depot/projects/sparc64/sys/sys/ktr.h#9 (text+ko) ====

@@ -36,11 +36,6 @@
 #ifndef _SYS_KTR_H_
 #define _SYS_KTR_H_
 
-/* Requires sys/types.h, sys/time.h, machine/atomic.h, and machine/cpufunc.h */
-
-#include <machine/atomic.h>
-#include <machine/cpufunc.h>
-
 /*
  * Hack around due to egcs-1.1.2 not knowing what __func__ is.
  */
@@ -96,35 +91,25 @@
 #define	KTR_COMPILE	(KTR_GEN)
 #endif
 
-#ifndef LOCORE
+/*
+ * Version number for ktr_entry struct.  Increment this when you break binary
+ * compatibility.
+ */
+#define	KTR_VERSION	1
 
-#include <sys/time.h>
+#define	KTR_PARMS	6
 
-#ifndef KTRDESCSIZE
-#define KTRDESCSIZE 80
-#endif
+#ifndef LOCORE
 
 struct ktr_entry {
 	u_int64_t ktr_timestamp;
 	int	ktr_cpu;
-#ifdef KTR_EXTEND
-	char	ktr_desc[KTRDESCSIZE];
-	const	char *ktr_filename;
 	int	ktr_line;
-#else
+	const	char *ktr_file;
 	const	char *ktr_desc;
-	u_long	ktr_parm1;
-	u_long	ktr_parm2;
-	u_long	ktr_parm3;
-	u_long	ktr_parm4;
-	u_long	ktr_parm5;
-	u_long	ktr_parm6;
-#endif
+	u_long	ktr_parms[KTR_PARMS];
 };
 
-/* These variables are used by gdb to analyse the output */
-extern int ktr_extend;
-
 extern int ktr_cpumask;
 extern int ktr_mask;
 extern int ktr_entries;
@@ -136,34 +121,15 @@
 #endif /* !LOCORE */
 #ifdef KTR
 
-#ifdef KTR_EXTEND
-void	ktr_tracepoint(u_int mask, const char *filename, u_int line,
-		       const char *format, ...) __printflike(4, 5);
-#else
-void	ktr_tracepoint(u_int mask, const char *format, u_long arg1, u_long arg2,
-		       u_long arg3, u_long arg4, u_long arg5, u_long arg6);
-#endif
-
-#ifdef KTR_EXTEND
-#define CTR(m, format, args...) do {					\
-	if (KTR_COMPILE & (m))						\
-		ktr_tracepoint((m), __FILE__, __LINE__, format , ##args); \
-	} while(0)
+void	ktr_tracepoint(u_int mask, const char *file, int line,
+	    const char *format, u_long arg1, u_long arg2, u_long arg3,
+	    u_long arg4, u_long arg5, u_long arg6);
 
-#define	CTR0(m, format)			CTR(m, format)
-#define	CTR1(m, format, p1)		CTR(m, format, p1)
-#define	CTR2(m, format, p1, p2)		CTR(m, format, p1, p2)
-#define	CTR3(m, format, p1, p2, p3)	CTR(m, format, p1, p2, p3)
-#define	CTR4(m, format, p1, p2, p3, p4)	CTR(m, format, p1, p2, p3, p4)
-#define	CTR5(m, format, p1, p2, p3, p4, p5)				\
-	CTR(m, format, p1, p2, p3, p4, p5)
-#define	CTR6(m, format, p1, p2, p3, p4, p5, p6)				\
-	CTR(m, format, p1, p2, p3, p4, p5, p6)
-#else							    /* not extended */
 #define CTR6(m, format, p1, p2, p3, p4, p5, p6) do {			\
 	if (KTR_COMPILE & (m))						\
-		ktr_tracepoint((m), format, (u_long)p1, (u_long)p2,	\
-		    (u_long)p3, (u_long)p4, (u_long)p5, (u_long)p6);	\
+		ktr_tracepoint((m), __FILE__, __LINE__, format,		\
+		    (u_long)p1, (u_long)p2, (u_long)p3, (u_long)p4,	\
+		    (u_long)p5, (u_long)p6);				\
 	} while(0)
 #define CTR0(m, format)			CTR6(m, format, 0, 0, 0, 0, 0, 0)
 #define CTR1(m, format, p1)		CTR6(m, format, p1, 0, 0, 0, 0, 0)
@@ -171,7 +137,6 @@
 #define	CTR3(m, format, p1, p2, p3)	CTR6(m, format, p1, p2, p3, 0, 0, 0)
 #define	CTR4(m, format, p1, p2, p3, p4)	CTR6(m, format, p1, p2, p3, p4, 0, 0)
 #define	CTR5(m, format, p1, p2, p3, p4, p5)	CTR6(m, format, p1, p2, p3, p4, p5, 0)
-#endif	/* KTR_EXTEND */
 #else	/* KTR */
 #undef KTR_COMPILE
 #define KTR_COMPILE 0

To Unsubscribe: send mail to majordomo@FreeBSD.org
with "unsubscribe p4-projects" in the body of the message




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?200203310219.g2V2JMu45259>