From dede34d3553650bfa4ab0443d89e79acf181bece Mon Sep 17 00:00:00 2001 From: Andrzej Bialecki Date: Tue, 29 Sep 1998 11:20:16 +0000 Subject: [PATCH] Add sysctl 'machdep.msgbuf_clear'. Setting it to anything causes the kernel message buffer to be cleared. It comes handy in situations when the only logging facility you have is the msgbuf. Reviewed by: jkh --- sys/amd64/amd64/machdep.c | 29 +++++++++++++++++++++++++---- sys/i386/i386/machdep.c | 29 +++++++++++++++++++++++++---- 2 files changed, 50 insertions(+), 8 deletions(-) diff --git a/sys/amd64/amd64/machdep.c b/sys/amd64/amd64/machdep.c index 37bc7dc5387f..d2d20259f540 100644 --- a/sys/amd64/amd64/machdep.c +++ b/sys/amd64/amd64/machdep.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)machdep.c 7.4 (Berkeley) 6/3/91 - * $Id: machdep.c,v 1.309 1998/09/14 22:43:32 jdp Exp $ + * $Id: machdep.c,v 1.310 1998/09/25 17:34:48 peter Exp $ */ #include "apm.h" @@ -207,8 +207,8 @@ sysctl_machdep_msgbuf SYSCTL_HANDLER_ARGS { int error; - /* Unwind the buffer, so that is linear (possibly starting with - * some initial nulls. + /* Unwind the buffer, so that it's linear (possibly starting with + * some initial nulls). */ error=sysctl_handle_opaque(oidp,msgbufp->msg_ptr+msgbufp->msg_bufr, msgbufp->msg_size-msgbufp->msg_bufr,req); @@ -221,7 +221,28 @@ sysctl_machdep_msgbuf SYSCTL_HANDLER_ARGS } SYSCTL_PROC(_machdep, OID_AUTO, msgbuf, CTLTYPE_STRING|CTLFLAG_RD, - 0, 0, sysctl_machdep_msgbuf, "A",""); + 0, 0, sysctl_machdep_msgbuf, "A","Contents of kernel message buffer"); + +static int msgbuf_clear; + +static int +sysctl_machdep_msgbuf_clear SYSCTL_HANDLER_ARGS +{ + int error; + error = sysctl_handle_int(oidp, oidp->oid_arg1, oidp->oid_arg2, + req); + if (!error && req->newptr) { + /* Clear the buffer and reset write pointer */ + bzero(msgbufp->msg_ptr,msgbufp->msg_size); + msgbufp->msg_bufr=msgbufp->msg_bufx=0; + msgbuf_clear=0; + } + return (error); +} + +SYSCTL_PROC(_machdep, OID_AUTO, msgbuf_clear, CTLTYPE_INT|CTLFLAG_RW, + &msgbuf_clear, 0, sysctl_machdep_msgbuf_clear, "I", + "Clear kernel message buffer"); int bootverbose = 0, Maxmem = 0; long dumplo; diff --git a/sys/i386/i386/machdep.c b/sys/i386/i386/machdep.c index 37bc7dc5387f..d2d20259f540 100644 --- a/sys/i386/i386/machdep.c +++ b/sys/i386/i386/machdep.c @@ -35,7 +35,7 @@ * SUCH DAMAGE. * * from: @(#)machdep.c 7.4 (Berkeley) 6/3/91 - * $Id: machdep.c,v 1.309 1998/09/14 22:43:32 jdp Exp $ + * $Id: machdep.c,v 1.310 1998/09/25 17:34:48 peter Exp $ */ #include "apm.h" @@ -207,8 +207,8 @@ sysctl_machdep_msgbuf SYSCTL_HANDLER_ARGS { int error; - /* Unwind the buffer, so that is linear (possibly starting with - * some initial nulls. + /* Unwind the buffer, so that it's linear (possibly starting with + * some initial nulls). */ error=sysctl_handle_opaque(oidp,msgbufp->msg_ptr+msgbufp->msg_bufr, msgbufp->msg_size-msgbufp->msg_bufr,req); @@ -221,7 +221,28 @@ sysctl_machdep_msgbuf SYSCTL_HANDLER_ARGS } SYSCTL_PROC(_machdep, OID_AUTO, msgbuf, CTLTYPE_STRING|CTLFLAG_RD, - 0, 0, sysctl_machdep_msgbuf, "A",""); + 0, 0, sysctl_machdep_msgbuf, "A","Contents of kernel message buffer"); + +static int msgbuf_clear; + +static int +sysctl_machdep_msgbuf_clear SYSCTL_HANDLER_ARGS +{ + int error; + error = sysctl_handle_int(oidp, oidp->oid_arg1, oidp->oid_arg2, + req); + if (!error && req->newptr) { + /* Clear the buffer and reset write pointer */ + bzero(msgbufp->msg_ptr,msgbufp->msg_size); + msgbufp->msg_bufr=msgbufp->msg_bufx=0; + msgbuf_clear=0; + } + return (error); +} + +SYSCTL_PROC(_machdep, OID_AUTO, msgbuf_clear, CTLTYPE_INT|CTLFLAG_RW, + &msgbuf_clear, 0, sysctl_machdep_msgbuf_clear, "I", + "Clear kernel message buffer"); int bootverbose = 0, Maxmem = 0; long dumplo;