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>