Changeset View
Changeset View
Standalone View
Standalone View
sys/kern/kern_ktr.c
Show All 12 Lines | |||||
if (clear) { | if (clear) { | ||||
bzero(ktr_buf, sizeof(*ktr_buf) * ktr_entries); | bzero(ktr_buf, sizeof(*ktr_buf) * ktr_entries); | ||||
ktr_idx = 0; | ktr_idx = 0; | ||||
} | } | ||||
return (error); | return (error); | ||||
} | } | ||||
SYSCTL_PROC(_debug_ktr, OID_AUTO, clear, CTLTYPE_INT|CTLFLAG_RW, 0, 0, | SYSCTL_PROC(_debug_ktr, OID_AUTO, clear, | ||||
sysctl_debug_ktr_clear, "I", "Clear KTR Buffer"); | CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, | ||||
0, 0, sysctl_debug_ktr_clear, "I", | |||||
"Clear KTR Buffer"); | |||||
/* | /* | ||||
* This is a sysctl proc so that it is serialized as !MPSAFE along with | * This is a sysctl proc so that it is serialized as !MPSAFE along with | ||||
* the other ktr sysctl procs. | * the other ktr sysctl procs. | ||||
*/ | */ | ||||
static int | static int | ||||
sysctl_debug_ktr_mask(SYSCTL_HANDLER_ARGS) | sysctl_debug_ktr_mask(SYSCTL_HANDLER_ARGS) | ||||
{ | { | ||||
uint64_t mask; | uint64_t mask; | ||||
int error; | int error; | ||||
mask = ktr_mask; | mask = ktr_mask; | ||||
error = sysctl_handle_64(oidp, &mask, 0, req); | error = sysctl_handle_64(oidp, &mask, 0, req); | ||||
if (error || !req->newptr) | if (error || !req->newptr) | ||||
return (error); | return (error); | ||||
ktr_mask = mask; | ktr_mask = mask; | ||||
return (error); | return (error); | ||||
} | } | ||||
SYSCTL_PROC(_debug_ktr, OID_AUTO, mask, CTLTYPE_U64 | CTLFLAG_RWTUN, 0, 0, | SYSCTL_PROC(_debug_ktr, OID_AUTO, mask, | ||||
sysctl_debug_ktr_mask, "QU", | CTLTYPE_U64 | CTLFLAG_RWTUN | CTLFLAG_NEEDGIANT, | ||||
0, 0, sysctl_debug_ktr_mask, "QU", | |||||
"Bitmask of KTR event classes for which logging is enabled"); | "Bitmask of KTR event classes for which logging is enabled"); | ||||
#if KTR_ENTRIES > KTR_BOOT_ENTRIES | #if KTR_ENTRIES > KTR_BOOT_ENTRIES | ||||
/* | /* | ||||
* A simplified version of sysctl_debug_ktr_entries. | * A simplified version of sysctl_debug_ktr_entries. | ||||
* No need to care about SMP, scheduling, etc. | * No need to care about SMP, scheduling, etc. | ||||
*/ | */ | ||||
static void | static void | ||||
Show All 24 Lines | |||||
ktr_idx = 0; | ktr_idx = 0; | ||||
ktr_mask = mask; | ktr_mask = mask; | ||||
if (oldbuf != NULL) | if (oldbuf != NULL) | ||||
free(oldbuf, M_KTR); | free(oldbuf, M_KTR); | ||||
return (error); | return (error); | ||||
} | } | ||||
SYSCTL_PROC(_debug_ktr, OID_AUTO, entries, CTLTYPE_INT|CTLFLAG_RW, 0, 0, | SYSCTL_PROC(_debug_ktr, OID_AUTO, entries, | ||||
sysctl_debug_ktr_entries, "I", "Number of entries in the KTR buffer"); | CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, | ||||
0, 0, sysctl_debug_ktr_entries, "I", | |||||
"Number of entries in the KTR buffer"); | |||||
#ifdef KTR_VERBOSE | #ifdef KTR_VERBOSE | ||||
int ktr_verbose = KTR_VERBOSE; | int ktr_verbose = KTR_VERBOSE; | ||||
TUNABLE_INT("debug.ktr.verbose", &ktr_verbose); | TUNABLE_INT("debug.ktr.verbose", &ktr_verbose); | ||||
SYSCTL_INT(_debug_ktr, OID_AUTO, verbose, CTLFLAG_RW, &ktr_verbose, 0, ""); | SYSCTL_INT(_debug_ktr, OID_AUTO, verbose, CTLFLAG_RW, &ktr_verbose, 0, ""); | ||||
#endif | #endif | ||||
#ifdef KTR_ALQ | #ifdef KTR_ALQ | ||||
Show All 24 Lines | |||||
ktr_alq_enabled = 0; | ktr_alq_enabled = 0; | ||||
alq_close(ktr_alq); | alq_close(ktr_alq); | ||||
ktr_alq = NULL; | ktr_alq = NULL; | ||||
} | } | ||||
return (error); | return (error); | ||||
} | } | ||||
SYSCTL_PROC(_debug_ktr, OID_AUTO, alq_enable, | SYSCTL_PROC(_debug_ktr, OID_AUTO, alq_enable, | ||||
CTLTYPE_INT|CTLFLAG_RW, 0, 0, sysctl_debug_ktr_alq_enable, | CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_NEEDGIANT, | ||||
"I", "Enable KTR logging"); | 0, 0, sysctl_debug_ktr_alq_enable, "I", | ||||
"Enable KTR logging"); | |||||
#endif | #endif | ||||
void | void | ||||
ktr_tracepoint(uint64_t mask, const char *file, int line, const char *format, | ktr_tracepoint(uint64_t 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 arg1, u_long arg2, u_long arg3, u_long arg4, u_long arg5, | ||||
u_long arg6) | u_long arg6) | ||||
{ | { | ||||
struct ktr_entry *entry; | struct ktr_entry *entry; | ||||
Show All 12 Lines |