Page MenuHomeFreeBSD

D6117.id15641.diff
No OneTemporary

D6117.id15641.diff

Index: kern/kern_shutdown.c
===================================================================
--- kern/kern_shutdown.c
+++ kern/kern_shutdown.c
@@ -56,7 +56,6 @@
#include <sys/kernel.h>
#include <sys/kerneldump.h>
#include <sys/kthread.h>
-#include <sys/ktr.h>
#include <sys/malloc.h>
#include <sys/mount.h>
#include <sys/priv.h>
@@ -556,127 +555,7 @@
/* NOTREACHED */ /* assuming reset worked */
}
-#if defined(WITNESS) || defined(INVARIANTS)
-static int kassert_warn_only = 0;
-#ifdef KDB
-static int kassert_do_kdb = 0;
-#endif
-#ifdef KTR
-static int kassert_do_ktr = 0;
-#endif
-static int kassert_do_log = 1;
-static int kassert_log_pps_limit = 4;
-static int kassert_log_mute_at = 0;
-static int kassert_log_panic_at = 0;
-static int kassert_warnings = 0;
-
-SYSCTL_NODE(_debug, OID_AUTO, kassert, CTLFLAG_RW, NULL, "kassert options");
-
-SYSCTL_INT(_debug_kassert, OID_AUTO, warn_only, CTLFLAG_RWTUN,
- &kassert_warn_only, 0,
- "KASSERT triggers a panic (1) or just a warning (0)");
-
-#ifdef KDB
-SYSCTL_INT(_debug_kassert, OID_AUTO, do_kdb, CTLFLAG_RWTUN,
- &kassert_do_kdb, 0, "KASSERT will enter the debugger");
-#endif
-
-#ifdef KTR
-SYSCTL_UINT(_debug_kassert, OID_AUTO, do_ktr, CTLFLAG_RWTUN,
- &kassert_do_ktr, 0,
- "KASSERT does a KTR, set this to the KTRMASK you want");
-#endif
-
-SYSCTL_INT(_debug_kassert, OID_AUTO, do_log, CTLFLAG_RWTUN,
- &kassert_do_log, 0, "KASSERT triggers a panic (1) or just a warning (0)");
-
-SYSCTL_INT(_debug_kassert, OID_AUTO, warnings, CTLFLAG_RWTUN,
- &kassert_warnings, 0, "number of KASSERTs that have been triggered");
-
-SYSCTL_INT(_debug_kassert, OID_AUTO, log_panic_at, CTLFLAG_RWTUN,
- &kassert_log_panic_at, 0, "max number of KASSERTS before we will panic");
-
-SYSCTL_INT(_debug_kassert, OID_AUTO, log_pps_limit, CTLFLAG_RWTUN,
- &kassert_log_pps_limit, 0, "limit number of log messages per second");
-
-SYSCTL_INT(_debug_kassert, OID_AUTO, log_mute_at, CTLFLAG_RWTUN,
- &kassert_log_mute_at, 0, "max number of KASSERTS to log");
-
-static int kassert_sysctl_kassert(SYSCTL_HANDLER_ARGS);
-
-SYSCTL_PROC(_debug_kassert, OID_AUTO, kassert,
- CTLTYPE_INT | CTLFLAG_RW | CTLFLAG_SECURE, NULL, 0,
- kassert_sysctl_kassert, "I", "set to trigger a test kassert");
-
-static int
-kassert_sysctl_kassert(SYSCTL_HANDLER_ARGS)
-{
- int error, i;
-
- error = sysctl_wire_old_buffer(req, sizeof(int));
- if (error == 0) {
- i = 0;
- error = sysctl_handle_int(oidp, &i, 0, req);
- }
- if (error != 0 || req->newptr == NULL)
- return (error);
- KASSERT(0, ("kassert_sysctl_kassert triggered kassert %d", i));
- return (0);
-}
-
/*
- * Called by KASSERT, this decides if we will panic
- * or if we will log via printf and/or ktr.
- */
-void
-kassert_panic(const char *fmt, ...)
-{
- static char buf[256];
- va_list ap;
-
- va_start(ap, fmt);
- (void)vsnprintf(buf, sizeof(buf), fmt, ap);
- va_end(ap);
-
- /*
- * panic if we're not just warning, or if we've exceeded
- * kassert_log_panic_at warnings.
- */
- if (!kassert_warn_only ||
- (kassert_log_panic_at > 0 &&
- kassert_warnings >= kassert_log_panic_at)) {
- va_start(ap, fmt);
- vpanic(fmt, ap);
- /* NORETURN */
- }
-#ifdef KTR
- if (kassert_do_ktr)
- CTR0(ktr_mask, buf);
-#endif /* KTR */
- /*
- * log if we've not yet met the mute limit.
- */
- if (kassert_do_log &&
- (kassert_log_mute_at == 0 ||
- kassert_warnings < kassert_log_mute_at)) {
- static struct timeval lasterr;
- static int curerr;
-
- if (ppsratecheck(&lasterr, &curerr, kassert_log_pps_limit)) {
- printf("KASSERT failed: %s\n", buf);
- kdb_backtrace();
- }
- }
-#ifdef KDB
- if (kassert_do_kdb) {
- kdb_enter(KDB_WHY_KASSERT, buf);
- }
-#endif
- atomic_add_int(&kassert_warnings, 1);
-}
-#endif
-
-/*
* Panic is called on unresolvable fatal errors. It prints "panic: mesg",
* and then reboots. If we are called twice, then we avoid trying to sync
* the disks as this often leads to recursive panics.
Index: kern/subr_witness.c
===================================================================
--- kern/subr_witness.c
+++ kern/subr_witness.c
@@ -185,6 +185,8 @@
#define WITNESS_INDEX_ASSERT(i) \
MPASS((i) > 0 && (i) <= w_max_used_index && (i) < witness_count)
+#define kassert_panic panic
+
static MALLOC_DEFINE(M_WITNESS, "Witness", "Witness");
/*
Index: sys/systm.h
===================================================================
--- sys/systm.h
+++ sys/systm.h
@@ -76,19 +76,15 @@
enum VM_GUEST { VM_GUEST_NO = 0, VM_GUEST_VM, VM_GUEST_XEN, VM_GUEST_HV,
VM_GUEST_VMWARE, VM_LAST };
-#if defined(WITNESS) || defined(INVARIANTS)
-void kassert_panic(const char *fmt, ...) __printflike(1, 2);
-#endif
-
#ifdef INVARIANTS /* The option is always available */
#define KASSERT(exp,msg) do { \
if (__predict_false(!(exp))) \
- kassert_panic msg; \
+ panic msg; \
} while (0)
#define VNASSERT(exp, vp, msg) do { \
if (__predict_false(!(exp))) { \
vn_printf(vp, "VNASSERT failed\n"); \
- kassert_panic msg; \
+ panic msg; \
} \
} while (0)
#else

File Metadata

Mime Type
text/plain
Expires
Thu, Jul 23, 2:54 AM (3 h, 52 m)
Storage Engine
blob
Storage Format
Raw Data
Storage Handle
35389262
Default Alt Text
D6117.id15641.diff (4 KB)

Event Timeline