diff options
| author | Jake Burkholder <jake@FreeBSD.org> | 2002-04-01 05:35:26 +0000 |
|---|---|---|
| committer | Jake Burkholder <jake@FreeBSD.org> | 2002-04-01 05:35:26 +0000 |
| commit | 60a57b73ef051fa4e7a6421c66f92b139e4ccc3e (patch) | |
| tree | a1ddb5388858cb799351ef968fc9232ab5847893 | |
| parent | e5319c69a44522ce988176404ab22ddd75b81635 (diff) | |
Notes
| -rw-r--r-- | sys/conf/options | 1 | ||||
| -rw-r--r-- | sys/kern/kern_ktr.c | 117 | ||||
| -rw-r--r-- | sys/sparc64/sparc64/genassym.c | 13 | ||||
| -rw-r--r-- | sys/sys/ktr.h | 67 |
4 files changed, 70 insertions, 128 deletions
diff --git a/sys/conf/options b/sys/conf/options index b67aaf493555..380095589cb3 100644 --- a/sys/conf/options +++ b/sys/conf/options @@ -495,7 +495,6 @@ KTR_MASK opt_ktr.h 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 diff --git a/sys/kern/kern_ktr.c b/sys/kern/kern_ktr.c index 0686aa2fdec9..f442e2be4627 100644 --- a/sys/kern/kern_ktr.c +++ b/sys/kern/kern_ktr.c @@ -46,7 +46,8 @@ #include <sys/sysctl.h> #include <sys/systm.h> #include <sys/time.h> -#include <machine/stdarg.h> + +#include <machine/cpu.h> #include <ddb/ddb.h> @@ -62,22 +63,12 @@ #define KTR_CPUMASK (~0) #endif -#ifdef SMP -#define KTR_CPU PCPU_GET(cpuid) -#else -#define KTR_CPU 0 -#endif - -#ifdef KTR_EXTEND -#define KTR_EXTEND_DEFAULT 1 -#else -#define KTR_EXTEND_DEFAULT 0 +#ifndef KTR_TIME +#define KTR_TIME get_cyclecount() #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 +77,6 @@ SYSCTL_NODE(_debug, OID_AUTO, ktr, CTLFLAG_RD, 0, "KTR options"); * 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,77 +88,75 @@ SYSCTL_INT(_debug_ktr, OID_AUTO, mask, CTLFLAG_RW, &ktr_mask, 0, ""); 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_VERBOSE struct thread *td; - int cpu; -#ifdef KTR_EXTEND - va_list ap; #endif + int cpu; if (panicstr) return; if ((ktr_mask & mask) == 0) return; - td = curthread; - if (td->td_inktr) - return; 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_timestamp = KTR_TIME; entry->ktr_cpu = cpu; - nanotime(&entry->ktr_tv); -#ifdef KTR_EXTEND - entry->ktr_filename = filename; + 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 - 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; #endif + entry->ktr_desc = format; + 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 } #ifdef DDB @@ -227,29 +213,21 @@ db_mach_vtrace(void) 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: ", tstate.cur); - if (db_ktr_verbose) - db_printf("%4ld.%06ld ", (long)kp->ktr_tv.tv_sec, - kp->ktr_tv.tv_nsec / 1000); -#ifdef KTR_EXTEND #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) @@ -262,4 +240,3 @@ db_mach_vtrace(void) } #endif /* DDB */ -#endif /* KTR */ diff --git a/sys/sparc64/sparc64/genassym.c b/sys/sparc64/sparc64/genassym.c index 6791f4e073b6..93f700cbd8ee 100644 --- a/sys/sparc64/sparc64/genassym.c +++ b/sys/sparc64/sparc64/genassym.c @@ -134,12 +134,13 @@ ASSYM(KTR_CT8, KTR_CT8); ASSYM(KTR_SIZEOF, sizeof(struct ktr_entry)); ASSYM(KTR_DESC, offsetof(struct ktr_entry, ktr_desc)); ASSYM(KTR_CPU, offsetof(struct ktr_entry, ktr_cpu)); -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_TIMESTAMP, offsetof(struct ktr_entry, ktr_timestamp)); +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)); diff --git a/sys/sys/ktr.h b/sys/sys/ktr.h index 8894b6641852..04c479c1e9df 100644 --- a/sys/sys/ktr.h +++ b/sys/sys/ktr.h @@ -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 { - struct timespec ktr_tv; + 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 @@ extern struct ktr_entry ktr_buf[]; #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 @@ void ktr_tracepoint(u_int mask, const char *format, u_long arg1, u_long arg2, #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 |
