diff options
author | jhb <jhb@FreeBSD.org> | 2006-01-27 22:17:31 +0000 |
---|---|---|
committer | jhb <jhb@FreeBSD.org> | 2006-01-27 22:17:31 +0000 |
commit | a7d556d07e348873d6c019459f76e997352e8562 (patch) | |
tree | e19ff5ff6b1750c7698e7753bd88ec689d463eaa /sys/kern/kern_ktr.c | |
parent | 52d005c3fb8c314a84022831b26351c8ecb3c24a (diff) | |
download | FreeBSD-src-a7d556d07e348873d6c019459f76e997352e8562.zip FreeBSD-src-a7d556d07e348873d6c019459f76e997352e8562.tar.gz |
Add a new sysctl, debug.ktr.clear. If you write a non-zero value to this
sysctl then it will clear the KTR buffer. Note that if you have active
KTR traces at the same time as a clear operation the behavior is undefined,
though it shouldn't panic.
Diffstat (limited to 'sys/kern/kern_ktr.c')
-rw-r--r-- | sys/kern/kern_ktr.c | 20 |
1 files changed, 20 insertions, 0 deletions
diff --git a/sys/kern/kern_ktr.c b/sys/kern/kern_ktr.c index ad5d8e8..7dfaec9 100644 --- a/sys/kern/kern_ktr.c +++ b/sys/kern/kern_ktr.c @@ -100,6 +100,26 @@ SYSCTL_INT(_debug_ktr, OID_AUTO, version, CTLFLAG_RD, &ktr_version, 0, ""); volatile int ktr_idx = 0; struct ktr_entry ktr_buf[KTR_ENTRIES]; +static int +sysctl_debug_ktr_clear(SYSCTL_HANDLER_ARGS) +{ + int clear, error; + + clear = 0; + error = sysctl_handle_int(oidp, &clear, 0, req); + if (error || !req->newptr) + return (error); + + if (clear) { + bzero(ktr_buf, sizeof(ktr_buf)); + ktr_idx = 0; + } + + return (error); +} +SYSCTL_PROC(_debug_ktr, OID_AUTO, clear, CTLTYPE_INT|CTLFLAG_RW, 0, 0, + sysctl_debug_ktr_clear, "I", "Clear KTR Buffer"); + #ifdef KTR_VERBOSE int ktr_verbose = KTR_VERBOSE; TUNABLE_INT("debug.ktr.verbose", &ktr_verbose); |