diff options
| author | John Baldwin <jhb@FreeBSD.org> | 2000-11-07 01:49:48 +0000 |
|---|---|---|
| committer | John Baldwin <jhb@FreeBSD.org> | 2000-11-07 01:49:48 +0000 |
| commit | d8f03321bdd248713c75581d29f570bfc5107562 (patch) | |
| tree | f8d0958a9c6020b218d907b148c94f6966bce6b9 /sys | |
| parent | 7d1fae05bb42b43a3c1e0c583ba93c69b8f6f9be (diff) | |
Notes
Diffstat (limited to 'sys')
| -rw-r--r-- | sys/conf/options | 5 | ||||
| -rw-r--r-- | sys/kern/kern_ktr.c | 88 | ||||
| -rw-r--r-- | sys/sys/ktr.h | 165 |
3 files changed, 118 insertions, 140 deletions
diff --git a/sys/conf/options b/sys/conf/options index bdfc98ab09a8..3c4338692f5e 100644 --- a/sys/conf/options +++ b/sys/conf/options @@ -461,11 +461,12 @@ PCFCLOCK_MAX_RETRIES opt_pcfclock.h TDFX_LINUX opt_tdfx.h KTR opt_global.h -KTR_MASK opt_global.h -KTR_CPUMASK opt_global.h +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 WITNESS_DDB opt_witness.h diff --git a/sys/kern/kern_ktr.c b/sys/kern/kern_ktr.c index 486379db5620..ca1ac44fe100 100644 --- a/sys/kern/kern_ktr.c +++ b/sys/kern/kern_ktr.c @@ -30,14 +30,34 @@ */ /* - * This module holds the global variables used by KTR. + * This module holds the global variables used by KTR and the ktr_tracepoint() + * function that does the actual tracing. */ +#include "opt_ktr.h" + #include <sys/types.h> #include <sys/time.h> #include <sys/ktr.h> +#include <sys/libkern.h> #include <sys/linker_set.h> #include <sys/sysctl.h> +#include <sys/systm.h> +#include <machine/stdarg.h> + +#ifndef KTR_MASK +#define KTR_MASK (KTR_GEN) +#endif + +#ifndef KTR_CPUMASK +#define KTR_CPUMASK (~0) +#endif + +#ifdef SMP +#define KTR_CPU cpuid +#else +#define KTR_CPU 0 +#endif #ifdef KTR_EXTEND /* @@ -49,7 +69,7 @@ SYSCTL_INT(_debug, OID_AUTO, ktr_extend, CTLFLAG_RD, &ktr_extend, 1, ""); #else int ktr_extend = 0; SYSCTL_INT(_debug, OID_AUTO, ktr_extend, CTLFLAG_RD, &ktr_extend, 0, ""); -#endif +#endif /* KTR_EXTEND */ int ktr_cpumask = KTR_CPUMASK; SYSCTL_INT(_debug, OID_AUTO, ktr_cpumask, CTLFLAG_RW, &ktr_cpumask, KTR_CPUMASK, ""); @@ -62,3 +82,67 @@ SYSCTL_INT(_debug, OID_AUTO, ktr_entries, CTLFLAG_RD, &ktr_entries, KTR_ENTRIES, volatile int ktr_idx = 0; struct ktr_entry ktr_buf[KTR_ENTRIES]; + +#ifdef KTR_VERBOSE +int ktr_verbose = 1; +#else +int ktr_verbose = 0; +#endif +SYSCTL_INT(_debug, OID_AUTO, ktr_verbose, CTLFLAG_RW, &ktr_verbose, 0, ""); + +#ifdef KTR +#ifdef KTR_EXTEND +void +ktr_tracepoint(u_int mask, char *filename, u_int line, char *format, ...) +#else +void +ktr_tracepoint(u_int mask, char *format, u_long arg1, u_long arg2, u_long arg3, + u_long arg4, u_long arg5) +#endif +{ + struct ktr_entry *entry; + int newindex, saveindex, saveintr; +#ifdef KTR_EXTEND + va_list ap; +#endif + + if ((ktr_mask & mask) == 0) + return; +#ifdef KTR_EXTEND + if (((1 << KTR_CPU) & ktr_cpumask) == 0) + return; +#endif + saveintr = save_intr(); + disable_intr(); + do { + saveindex = ktr_idx; + newindex = (saveindex + 1) & (KTR_ENTRIES - 1); + } while (atomic_cmpset_rel_int(&ktr_idx, saveindex, newindex) == 0); + entry = &ktr_buf[saveindex]; + restore_intr(saveintr); + nanotime(&entry->ktr_tv); +#ifdef KTR_EXTEND + strncpy(entry->ktr_filename, filename, KTRFILENAMESIZE - 1); + entry->ktr_filename[KTRFILENAMESIZE - 1] = '\0'; + snprintf(entry->ktr_filename, KTRFILENAMESIZE, "%s", __FILE__); + entry->ktr_line = line; + entry->ktr_cpu = KTR_CPU; + va_start(ap, format); + vsnprintf(entry->ktr_desc, KTRDESCSIZE, format, ap); + va_end(ap); + if (ktr_verbose) { + va_start(ap, format); + vprintf(format, ap); + 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; +#endif +} +#endif /* KTR */ diff --git a/sys/sys/ktr.h b/sys/sys/ktr.h index d94677233c73..9005eb8f0c2f 100644 --- a/sys/sys/ktr.h +++ b/sys/sys/ktr.h @@ -85,14 +85,6 @@ #define KTR_COMPILE (KTR_GEN) #endif -#ifndef KTR_MASK -#define KTR_MASK (KTR_GEN) -#endif - -#ifndef KTR_CPUMASK -#define KTR_CPUMASK (~0) -#endif - #ifndef LOCORE #include <sys/time.h> @@ -126,6 +118,7 @@ extern int ktr_extend; extern int ktr_cpumask; extern int ktr_mask; extern int ktr_entries; +extern int ktr_verbose; extern volatile int ktr_idx; extern struct ktr_entry ktr_buf[]; @@ -138,138 +131,38 @@ extern struct ktr_entry ktr_buf[]; #endif #ifdef KTR_EXTEND -#ifndef _TR_CPU -#ifdef SMP -#define _TR_CPU cpuid +void ktr_tracepoint(u_int mask, char *filename, u_int line, + char *format, ...); #else -#define _TR_CPU 0 -#endif +void ktr_tracepoint(u_int mask, char *format, u_long arg1, u_long arg2, + u_long arg3, u_long arg4, u_long arg5); #endif -#ifndef _TR -#define _TR() \ - struct ktr_entry *_ktrptr; \ - int _ktr_newidx, _ktr_saveidx; \ - int _tr_intrsave = save_intr(); \ - disable_intr(); \ - do { \ - _ktr_saveidx = ktr_idx; \ - _ktr_newidx = (ktr_idx + 1) & (KTR_ENTRIES - 1); \ - } while (atomic_cmpset_int(&ktr_idx, _ktr_saveidx, _ktr_newidx) == 0); \ - _ktrptr = &ktr_buf[_ktr_saveidx]; \ - restore_intr(_tr_intrsave); \ - nanotime(&_ktrptr->ktr_tv); \ - snprintf (_ktrptr->ktr_filename, KTRFILENAMESIZE, "%s", __FILE__); \ - _ktrptr->ktr_line = __LINE__; \ - _ktrptr->ktr_cpu = _TR_CPU; -#endif -#define CTR0(m, _desc) \ - if (KTR_COMPILE & (m)) { \ - if ((ktr_mask & (m)) && ((1 << _TR_CPU) & ktr_cpumask)) { \ - _TR() \ - memcpy (_ktrptr->ktr_desc, _desc, KTRDESCSIZE); \ - } \ - } -#define CTR1(m, _desc, _p1) \ - if (KTR_COMPILE & (m)) { \ - if ((ktr_mask & (m)) && ((1 << _TR_CPU) & ktr_cpumask)) { \ - _TR() \ - snprintf (_ktrptr->ktr_desc, KTRDESCSIZE, _desc, _p1); \ - } \ - } -#define CTR2(m, _desc, _p1, _p2) \ - if (KTR_COMPILE & (m)) { \ - if ((ktr_mask & (m)) && ((1 << _TR_CPU) & ktr_cpumask)) { \ - _TR() \ - snprintf (_ktrptr->ktr_desc, KTRDESCSIZE, _desc, _p1, _p2); \ - } \ - } -#define CTR3(m, _desc, _p1, _p2, _p3) \ - if (KTR_COMPILE & (m)) { \ - if ((ktr_mask & (m)) && ((1 << _TR_CPU) & ktr_cpumask)) { \ - _TR() \ - snprintf (_ktrptr->ktr_desc, KTRDESCSIZE, _desc, _p1, _p2, _p3); \ - } \ - } -#define CTR4(m, _desc, _p1, _p2, _p3, _p4) \ - if (KTR_COMPILE & (m)) { \ - if ((ktr_mask & (m)) && ((1 << _TR_CPU) & ktr_cpumask)) { \ - _TR() \ - snprintf (_ktrptr->ktr_desc, KTRDESCSIZE, _desc, _p1, _p2, _p3, _p4); \ - } \ - } -#define CTR5(m, _desc, _p1, _p2, _p3, _p4, _p5) \ - if (KTR_COMPILE & (m)) { \ - if ((ktr_mask & (m)) && ((1 << _TR_CPU) & ktr_cpumask)) { \ - _TR() \ - snprintf (_ktrptr->ktr_desc, KTRDESCSIZE, _desc, _p1, _p2, _p3, _p4, _p5); \ - } \ - } +#ifdef KTR_EXTEND +#define CTR(m, format, args...) do { \ + if (KTR_COMPILE & (m)) \ + ktr_tracepoint((m), __FILE__, __LINE__, format , ##args); \ + } while(0) + +#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) #else /* not extended */ -#ifndef _TR -#define _TR(_desc) \ - struct ktr_entry *_ktrptr; \ - int _ktr_newidx, _ktr_saveidx; \ - do { \ - _ktr_saveidx = ktr_idx; \ - _ktr_newidx = (ktr_idx + 1) & (KTR_ENTRIES - 1); \ - } while (atomic_cmpset_int(&ktr_idx, _ktr_saveidx, _ktr_newidx) == 0); \ - _ktrptr = &ktr_buf[_ktr_saveidx]; \ - nanotime(&_ktrptr->ktr_tv); \ - _ktrptr->ktr_desc = (_desc); -#endif -#define CTR0(m, _desc) \ - if (KTR_COMPILE & (m)) { \ - if (ktr_mask & (m)) { \ - _TR(_desc) \ - } \ - } -#define CTR1(m, _desc, _p1) \ - if (KTR_COMPILE & (m)) { \ - if (ktr_mask & (m)) { \ - _TR(_desc) \ - _ktrptr->ktr_parm1 = (u_long)(_p1); \ - } \ - } -#define CTR2(m, _desc, _p1, _p2) \ - if (KTR_COMPILE & (m)) { \ - if (ktr_mask & (m)) { \ - _TR(_desc) \ - _ktrptr->ktr_parm1 = (u_long)(_p1); \ - _ktrptr->ktr_parm2 = (u_long)(_p2); \ - } \ - } -#define CTR3(m, _desc, _p1, _p2, _p3) \ - if (KTR_COMPILE & (m)) { \ - if (ktr_mask & (m)) { \ - _TR(_desc) \ - _ktrptr->ktr_parm1 = (u_long)(_p1); \ - _ktrptr->ktr_parm2 = (u_long)(_p2); \ - _ktrptr->ktr_parm3 = (u_long)(_p3); \ - } \ - } -#define CTR4(m, _desc, _p1, _p2, _p3, _p4) \ - if (KTR_COMPILE & (m)) { \ - if (ktr_mask & (m)) { \ - _TR(_desc) \ - _ktrptr->ktr_parm1 = (u_long)(_p1); \ - _ktrptr->ktr_parm2 = (u_long)(_p2); \ - _ktrptr->ktr_parm3 = (u_long)(_p3); \ - _ktrptr->ktr_parm4 = (u_long)(_p4); \ - } \ - } -#define CTR5(m, _desc, _p1, _p2, _p3, _p4, _p5) \ - if (KTR_COMPILE & (m)) { \ - if (ktr_mask & (m)) { \ - _TR(_desc) \ - _ktrptr->ktr_parm1 = (u_long)(_p1); \ - _ktrptr->ktr_parm2 = (u_long)(_p2); \ - _ktrptr->ktr_parm3 = (u_long)(_p3); \ - _ktrptr->ktr_parm4 = (u_long)(_p4); \ - _ktrptr->ktr_parm5 = (u_long)(_p5); \ - } \ - } -#endif +#define CTR5(m, format, p1, p2, p3, p4, p5) do { \ + if (KTR_COMPILE & (m)) \ + ktr_tracepoint((m), format, (u_long)p1, (u_long)p2, \ + (u_long)p3, (u_long)p4, (u_long)p5); \ + } while(0) +#define CTR0(m, format) CTR5(m, format, 0, 0, 0, 0, 0) +#define CTR1(m, format, p1) CTR5(m, format, p1, 0, 0, 0, 0) +#define CTR2(m, format, p1, p2) CTR5(m, format, p1, p2, 0, 0, 0) +#define CTR3(m, format, p1, p2, p3) CTR5(m, format, p1, p2, p3, 0, 0) +#define CTR4(m, format, p1, p2, p3, p4) CTR5(m, format, p1, p2, p3, p4, 0) +#endif /* KTR_EXTEND */ #else /* KTR */ #undef KTR_COMPILE #define KTR_COMPILE 0 |
