summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMateusz Guzik <mjg@FreeBSD.org>2018-04-24 01:06:20 +0000
committerMateusz Guzik <mjg@FreeBSD.org>2018-04-24 01:06:20 +0000
commit7cd794214ad9572dc805fcda4bf78ea5bd3c89c8 (patch)
tree544c5fdeddb477ee8e7f3022b81da98b86848012
parent4c5209cb213d2736b60e266d0742f0262d8272d6 (diff)
Notes
-rw-r--r--sys/cddl/dev/dtmalloc/dtmalloc.c9
-rw-r--r--sys/kern/kern_malloc.c7
2 files changed, 13 insertions, 3 deletions
diff --git a/sys/cddl/dev/dtmalloc/dtmalloc.c b/sys/cddl/dev/dtmalloc/dtmalloc.c
index 017d1350b48d8..49516a27a6352 100644
--- a/sys/cddl/dev/dtmalloc/dtmalloc.c
+++ b/sys/cddl/dev/dtmalloc/dtmalloc.c
@@ -36,6 +36,9 @@
#include <sys/dtrace.h>
#include <sys/dtrace_bsd.h>
+extern bool dtrace_malloc_enabled;
+static uint32_t dtrace_malloc_enabled_count;
+
static d_open_t dtmalloc_open;
static int dtmalloc_unload(void);
static void dtmalloc_getargdesc(void *, dtrace_id_t, void *, dtrace_argdesc_t *);
@@ -152,6 +155,9 @@ dtmalloc_enable(void *arg, dtrace_id_t id, void *parg)
{
uint32_t *p = parg;
*p = id;
+ dtrace_malloc_enabled_count++;
+ if (dtrace_malloc_enabled_count == 1)
+ dtrace_malloc_enabled = true;
}
static void
@@ -159,6 +165,9 @@ dtmalloc_disable(void *arg, dtrace_id_t id, void *parg)
{
uint32_t *p = parg;
*p = 0;
+ dtrace_malloc_enabled_count--;
+ if (dtrace_malloc_enabled_count == 0)
+ dtrace_malloc_enabled = false;
}
static void
diff --git a/sys/kern/kern_malloc.c b/sys/kern/kern_malloc.c
index e772163fbc004..2c2000860722d 100644
--- a/sys/kern/kern_malloc.c
+++ b/sys/kern/kern_malloc.c
@@ -93,7 +93,8 @@ __FBSDID("$FreeBSD$");
#ifdef KDTRACE_HOOKS
#include <sys/dtrace_bsd.h>
-dtrace_malloc_probe_func_t dtrace_malloc_probe;
+bool __read_frequently dtrace_malloc_enabled;
+dtrace_malloc_probe_func_t __read_mostly dtrace_malloc_probe;
#endif
#if defined(INVARIANTS) || defined(MALLOC_MAKE_FAILURES) || \
@@ -376,7 +377,7 @@ malloc_type_zone_allocated(struct malloc_type *mtp, unsigned long size,
mtsp->mts_size |= 1 << zindx;
#ifdef KDTRACE_HOOKS
- if (dtrace_malloc_probe != NULL) {
+ if (__predict_false(dtrace_malloc_enabled)) {
uint32_t probe_id = mtip->mti_probes[DTMALLOC_PROBE_MALLOC];
if (probe_id != 0)
(dtrace_malloc_probe)(probe_id,
@@ -415,7 +416,7 @@ malloc_type_freed(struct malloc_type *mtp, unsigned long size)
mtsp->mts_numfrees++;
#ifdef KDTRACE_HOOKS
- if (dtrace_malloc_probe != NULL) {
+ if (__predict_false(dtrace_malloc_enabled)) {
uint32_t probe_id = mtip->mti_probes[DTMALLOC_PROBE_FREE];
if (probe_id != 0)
(dtrace_malloc_probe)(probe_id,