[DTrace-devel] [PATCH v2 2/4] fbt: clean up fprobe/kprobe support
Eugene Loh
eugene.loh at oracle.com
Thu Dec 5 23:31:07 UTC 2024
Reviewed-by: Eugene Loh <eugene.loh at oracle.com>
with the tiniest typo:
On 12/5/24 18:20, Kris Van Hees wrote:
> Instead of leaking dt_fbt_fprobe outside of the FBT provider so that
> there is *something* to represent the FBT provider, use a minimal
> dt_fbt that does the job of providing a hook to the populate function,
> which then will update dt_fbt from dt_fbt_fprobe o dt_fbt_kprobe
s/o /or /
> depending on what implementation is available (fprobe is preferred).
>
> Signed-off-by: Kris Van Hees <kris.van.hees at oracle.com>
> ---
> libdtrace/dt_prov_fbt.c | 13 ++++++++++---
> libdtrace/dt_provider.c | 2 +-
> libdtrace/dt_provider.h | 3 +--
> 3 files changed, 12 insertions(+), 6 deletions(-)
>
> diff --git a/libdtrace/dt_prov_fbt.c b/libdtrace/dt_prov_fbt.c
> index da288401..8d8545c4 100644
> --- a/libdtrace/dt_prov_fbt.c
> +++ b/libdtrace/dt_prov_fbt.c
> @@ -57,6 +57,9 @@ static const dtrace_pattr_t pattr = {
> { DTRACE_STABILITY_PRIVATE, DTRACE_STABILITY_PRIVATE, DTRACE_CLASS_ISA },
> };
>
> +dt_provimpl_t dt_fbt_fprobe;
> +dt_provimpl_t dt_fbt_kprobe;
> +
> /*
> * Scan the PROBE_LIST file and add entry and return probes for every function
> * that is listed.
> @@ -64,7 +67,6 @@ static const dtrace_pattr_t pattr = {
> static int populate(dtrace_hdl_t *dtp)
> {
> dt_provider_t *prv;
> - dt_provimpl_t *impl;
> FILE *f;
> char *buf = NULL;
> char *p;
> @@ -73,9 +75,9 @@ static int populate(dtrace_hdl_t *dtp)
> dtrace_syminfo_t sip;
> dtrace_probedesc_t pd;
>
> - impl = BPF_HAS(dtp, BPF_FEAT_FENTRY) ? &dt_fbt_fprobe : &dt_fbt_kprobe;
> + dt_fbt = BPF_HAS(dtp, BPF_FEAT_FENTRY) ? dt_fbt_kprobe : dt_fbt_kprobe;
>
> - prv = dt_provider_create(dtp, prvname, impl, &pattr, NULL);
> + prv = dt_provider_create(dtp, prvname, &dt_fbt, &pattr, NULL);
> if (prv == NULL)
> return -1; /* errno already set */
>
> @@ -463,3 +465,8 @@ dt_provimpl_t dt_fbt_kprobe = {
> .detach = &kprobe_detach,
> .probe_destroy = &dt_tp_probe_destroy,
> };
> +
> +dt_provimpl_t dt_fbt = {
> + .name = prvname,
> + .populate = &populate,
> +};
> diff --git a/libdtrace/dt_provider.c b/libdtrace/dt_provider.c
> index ca8b53df..1e2e844e 100644
> --- a/libdtrace/dt_provider.c
> +++ b/libdtrace/dt_provider.c
> @@ -30,7 +30,7 @@
> const dt_provimpl_t *dt_providers[] = {
> &dt_dtrace, /* list dt_dtrace first */
> &dt_cpc,
> - &dt_fbt_fprobe,
> + &dt_fbt,
> &dt_io,
> &dt_ip,
> &dt_lockstat,
> diff --git a/libdtrace/dt_provider.h b/libdtrace/dt_provider.h
> index 8f143dce..f62137de 100644
> --- a/libdtrace/dt_provider.h
> +++ b/libdtrace/dt_provider.h
> @@ -76,8 +76,7 @@ typedef struct dt_provimpl {
> /* list dt_dtrace first */
> extern dt_provimpl_t dt_dtrace;
> extern dt_provimpl_t dt_cpc;
> -extern dt_provimpl_t dt_fbt_fprobe;
> -extern dt_provimpl_t dt_fbt_kprobe;
> +extern dt_provimpl_t dt_fbt;
> extern dt_provimpl_t dt_io;
> extern dt_provimpl_t dt_ip;
> extern dt_provimpl_t dt_lockstat;
More information about the DTrace-devel
mailing list