diff --git a/external/cddl/osnet/dev/lockstat/lockstat.c b/external/cddl/osnet/dev/lockstat/lockstat.c index 0afd2cc3e1be..63701415e8cc 100644 --- a/external/cddl/osnet/dev/lockstat/lockstat.c +++ b/external/cddl/osnet/dev/lockstat/lockstat.c @@ -1,4 +1,4 @@ -/* $NetBSD: lockstat.c,v 1.7 2015/03/09 01:07:27 riastradh Exp $ */ +/* $NetBSD: lockstat.c,v 1.8 2015/03/09 01:42:26 christos Exp $ */ /* * CDDL HEADER START @@ -26,7 +26,7 @@ */ #include -__KERNEL_RCSID(0, "$NetBSD: lockstat.c,v 1.7 2015/03/09 01:07:27 riastradh Exp $"); +__KERNEL_RCSID(0, "$NetBSD: lockstat.c,v 1.8 2015/03/09 01:42:26 christos Exp $"); #include #include @@ -38,6 +38,7 @@ __KERNEL_RCSID(0, "$NetBSD: lockstat.c,v 1.7 2015/03/09 01:07:27 riastradh Exp $ #include #include +#define NLOCKSTAT 1 #include #define ASSERT KASSERT @@ -62,6 +63,7 @@ lockstat_probe_t lockstat_probes[] = { }; static dtrace_provider_id_t lockstat_id; +static size_t lockstat_dtrace_count; /*ARGSUSED*/ static int @@ -72,6 +74,10 @@ lockstat_enable(void *arg, dtrace_id_t id, void *parg) ASSERT(!lockstat_probemap[LS_COMPRESS(probe->lsp_probe)]); lockstat_probemap[LS_COMPRESS(probe->lsp_probe)] = id; + if (lockstat_dtrace_count++ == 0) { + lockstat_dtrace_enabled = LB_DTRACE; + LOCKSTAT_ENABLED_UPDATE(); + } return 0; } @@ -84,6 +90,11 @@ lockstat_disable(void *arg, dtrace_id_t id __unused, void *parg) ASSERT(lockstat_probemap[LS_COMPRESS(probe->lsp_probe)]); + if (--lockstat_dtrace_count == 0) { + lockstat_dtrace_enabled = 0; + LOCKSTAT_ENABLED_UPDATE(); + } + lockstat_probemap[LS_COMPRESS(probe->lsp_probe)] = 0; }