[DTrace-devel] [PATCH 07/16] Add support for provider-specific enabling

Kris Van Hees kris.van.hees at oracle.com
Thu Mar 18 21:54:32 PDT 2021


In general, probes are added to the list of enablings if they match
the probe description of specified in any program.  Some providers may
need to do some additional processing as part of adding a probe to the
list of enablings.  This patch adds support for an enable() provider
implementation hook.

Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
---
 libdtrace/dt_program.c  | 14 +++++++++-----
 libdtrace/dt_provider.h |  2 ++
 2 files changed, 11 insertions(+), 5 deletions(-)

diff --git a/libdtrace/dt_program.c b/libdtrace/dt_program.c
index 354077fb..a12e78fd 100644
--- a/libdtrace/dt_program.c
+++ b/libdtrace/dt_program.c
@@ -146,12 +146,16 @@ typedef struct pi_state {
 static int
 dt_stmt_probe(dtrace_hdl_t *dtp, dt_probe_t *prp, pi_state_t *st)
 {
-	if (!dt_in_list(&dtp->dt_enablings, prp)) {
-		dtrace_probeinfo_t p;
+	dtrace_probeinfo_t	p;
 
-		dt_probe_info(dtp, prp->desc, &p);
-		dt_list_append(&dtp->dt_enablings, prp);
-	}
+	dt_probe_info(dtp, prp->desc, &p);
+
+	assert(prp->prov->impl != NULL);
+	if (prp->prov->impl->enable == NULL) {
+		if (!dt_in_list(&dtp->dt_enablings, prp))
+			dt_list_append(&dtp->dt_enablings, prp);
+	} else
+		prp->prov->impl->enable(dtp, prp);
 
 	dt_probe_add_clause(dtp, prp, st->idp);
 	(*st->cnt)++;
diff --git a/libdtrace/dt_provider.h b/libdtrace/dt_provider.h
index 02eca0ae..b8ac9c1e 100644
--- a/libdtrace/dt_provider.h
+++ b/libdtrace/dt_provider.h
@@ -61,6 +61,8 @@ typedef struct dt_provimpl {
 	int (*populate)(dtrace_hdl_t *dtp);	/* register probes */
 	int (*provide)(dtrace_hdl_t *dtp,	/* provide probes */
 		       const dtrace_probedesc_t *pdp);
+	void (*enable)(dtrace_hdl_t *dtp,	/* enable the given probe */
+		       struct dt_probe *prp);
 	void (*trampoline)(dt_pcb_t *pcb);	/* generate BPF trampoline */
 	int (*attach)(dtrace_hdl_t *dtp,	/* attach BPF prog to probe */
 		      const struct dt_probe *prp, int bpf_fd);
-- 
2.28.0




More information about the DTrace-devel mailing list