summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorjhb <jhb@FreeBSD.org>2006-01-27 22:17:31 +0000
committerjhb <jhb@FreeBSD.org>2006-01-27 22:17:31 +0000
commita7d556d07e348873d6c019459f76e997352e8562 (patch)
treee19ff5ff6b1750c7698e7753bd88ec689d463eaa
parent52d005c3fb8c314a84022831b26351c8ecb3c24a (diff)
downloadFreeBSD-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.
-rw-r--r--sys/kern/kern_ktr.c20
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);
OpenPOWER on IntegriCloud