diff options
author | Andriy Gapon <avg@FreeBSD.org> | 2013-02-03 09:57:39 +0000 |
---|---|---|
committer | Andriy Gapon <avg@FreeBSD.org> | 2013-02-03 09:57:39 +0000 |
commit | 36b7dde4167b0bde8317d1341faf5fe92547d16a (patch) | |
tree | 0cbd8af6d2fcc2391a51c88f2c190865a8310018 /sys/kern/kern_ktr.c | |
parent | bf861ada380d5a3673cd5d61967bce0d287b0b1d (diff) | |
download | src-36b7dde4167b0bde8317d1341faf5fe92547d16a.tar.gz src-36b7dde4167b0bde8317d1341faf5fe92547d16a.zip |
Notes
Diffstat (limited to 'sys/kern/kern_ktr.c')
-rw-r--r-- | sys/kern/kern_ktr.c | 30 |
1 files changed, 28 insertions, 2 deletions
diff --git a/sys/kern/kern_ktr.c b/sys/kern/kern_ktr.c index a83cedf345b7..5b9d7aa18996 100644 --- a/sys/kern/kern_ktr.c +++ b/sys/kern/kern_ktr.c @@ -66,6 +66,10 @@ __FBSDID("$FreeBSD$"); #include <ddb/db_output.h> #endif +#ifndef KTR_BOOT_ENTRIES +#define KTR_BOOT_ENTRIES 1024 +#endif + #ifndef KTR_ENTRIES #define KTR_ENTRIES 1024 #endif @@ -96,9 +100,9 @@ FEATURE(ktr, "Kernel support for KTR kernel tracing facility"); volatile int ktr_idx = 0; int ktr_mask = KTR_MASK; int ktr_compile = KTR_COMPILE; -int ktr_entries = KTR_ENTRIES; +int ktr_entries = KTR_BOOT_ENTRIES; int ktr_version = KTR_VERSION; -struct ktr_entry ktr_buf_init[KTR_ENTRIES]; +struct ktr_entry ktr_buf_init[KTR_BOOT_ENTRIES]; struct ktr_entry *ktr_buf = ktr_buf_init; cpuset_t ktr_cpumask = CPUSET_T_INITIALIZER(KTR_CPUMASK); static char ktr_cpumask_str[CPUSETBUFSIZ]; @@ -194,6 +198,28 @@ SYSCTL_PROC(_debug_ktr, OID_AUTO, mask, CTLTYPE_UINT|CTLFLAG_RW, 0, 0, sysctl_debug_ktr_mask, "IU", "Bitmask of KTR event classes for which logging is enabled"); +#if KTR_ENTRIES != KTR_BOOT_ENTRIES +/* + * A simplified version of sysctl_debug_ktr_entries. + * No need to care about SMP, scheduling, etc. + */ +static void +ktr_entries_initializer(void *dummy __unused) +{ + int mask; + + /* Temporarily disable ktr in case malloc() is being traced. */ + mask = ktr_mask; + ktr_mask = 0; + ktr_buf = malloc(sizeof(*ktr_buf) * KTR_ENTRIES, M_KTR, + M_WAITOK | M_ZERO); + ktr_entries = KTR_ENTRIES; + ktr_mask = mask; +} +SYSINIT(ktr_entries_initializer, SI_SUB_KMEM, SI_ORDER_ANY, + ktr_entries_initializer, NULL); +#endif + static int sysctl_debug_ktr_entries(SYSCTL_HANDLER_ARGS) { |