From 4c5209cb213d2736b60e266d0742f0262d8272d6 Mon Sep 17 00:00:00 2001 From: Mateusz Guzik Date: Tue, 24 Apr 2018 01:04:10 +0000 Subject: [PATCH] lockstat: track lockstat just like sdt probes In particular flip the frequently tested var to bool. --- sys/cddl/dev/sdt/sdt.c | 15 +++++++++++---- sys/kern/kern_lockstat.c | 2 +- sys/sys/lockstat.h | 2 +- 3 files changed, 13 insertions(+), 6 deletions(-) diff --git a/sys/cddl/dev/sdt/sdt.c b/sys/cddl/dev/sdt/sdt.c index e9d01184997..9e3053d9007 100644 --- a/sys/cddl/dev/sdt/sdt.c +++ b/sys/cddl/dev/sdt/sdt.c @@ -77,6 +77,7 @@ static void sdt_kld_unload_try(void *, struct linker_file *, int *); static MALLOC_DEFINE(M_SDT, "SDT", "DTrace SDT providers"); static int sdt_probes_enabled_count; +static int lockstat_enabled_count; static dtrace_pattr_t sdt_attr = { { DTRACE_STABILITY_EVOLVING, DTRACE_STABILITY_EVOLVING, DTRACE_CLASS_COMMON }, @@ -208,8 +209,11 @@ sdt_enable(void *arg __unused, dtrace_id_t id, void *parg) probe->id = id; probe->sdtp_lf->nenabled++; - if (strcmp(probe->prov->name, "lockstat") == 0) - lockstat_enabled++; + if (strcmp(probe->prov->name, "lockstat") == 0) { + lockstat_enabled_count++; + if (lockstat_enabled_count == 1) + lockstat_enabled = true; + } sdt_probes_enabled_count++; if (sdt_probes_enabled_count == 1) sdt_probes_enabled = true; @@ -225,8 +229,11 @@ sdt_disable(void *arg __unused, dtrace_id_t id, void *parg) sdt_probes_enabled_count--; if (sdt_probes_enabled_count == 0) sdt_probes_enabled = false; - if (strcmp(probe->prov->name, "lockstat") == 0) - lockstat_enabled--; + if (strcmp(probe->prov->name, "lockstat") == 0) { + lockstat_enabled_count--; + if (lockstat_enabled_count == 0) + lockstat_enabled = false; + } probe->id = 0; probe->sdtp_lf->nenabled--; } diff --git a/sys/kern/kern_lockstat.c b/sys/kern/kern_lockstat.c index 99f1763bc4b..6b71ab8e1f9 100644 --- a/sys/kern/kern_lockstat.c +++ b/sys/kern/kern_lockstat.c @@ -64,7 +64,7 @@ SDT_PROBE_DEFINE1(lockstat, , , sx__downgrade, "struct sx *"); SDT_PROBE_DEFINE2(lockstat, , , thread__spin, "struct mtx *", "uint64_t"); -volatile int __read_frequently lockstat_enabled; +volatile bool __read_frequently lockstat_enabled; uint64_t lockstat_nsecs(struct lock_object *lo) diff --git a/sys/sys/lockstat.h b/sys/sys/lockstat.h index 6167a7d15e9..9a6674fa2f6 100644 --- a/sys/sys/lockstat.h +++ b/sys/sys/lockstat.h @@ -70,7 +70,7 @@ SDT_PROBE_DECLARE(lockstat, , , thread__spin); #define LOCKSTAT_WRITER 0 #define LOCKSTAT_READER 1 -extern volatile int lockstat_enabled; +extern volatile bool lockstat_enabled; #ifdef KDTRACE_HOOKS