[DTrace-devel] [PATCH 3/8] bpf: introduce dt_bpf_prog_attach()

Kris Van Hees kris.van.hees at oracle.com
Thu Apr 4 20:07:57 UTC 2024


On Thu, Apr 04, 2024 at 03:53:29PM -0400, Eugene Loh via DTrace-devel wrote:
> Here is what I see on a couple of VMs I run on:
> 
>     grep attach_btf_id /usr/include/linux/bpf.h
> 
>     x86 OL7 UEK6 5.4.17-2136.328.3.el7uek.x86_64    (nil)
>     arm OL7 UEK6 5.4.17-2136.328.3.el7uek.aarch64   (nil)
>     x86 OL8 UEK6 5.4.17-2136.328.3.el8uek.x86_64    __u32 attach_btf_id;
>     arm OL8 UEK6 5.4.17-2136.328.3.el8uek.aarch64   __u32 attach_btf_id;
>     x86 OL8 UEK7 5.15.0-102.110.4.el8uek.x86_64     __u32 attach_btf_id;
>     arm OL8 UEK7 5.15.0-102.110.4.el8uek.aarch64    __u32 attach_btf_id;
>     x86 OL9 UEK7 5.15.0-203.146.5.1.el9uek.x86_64   __u32 attach_btf_id;
>     arm OL9 UEK7 5.15.0-203.146.5.1.el9uek.aarch64  __u32 attach_btf_id;
> 
> That is, the OL7 VMs do not seem to know about attach_bpf_id.

We do not use the host's bpf.h - we use the one included with the DTrace source
tree.

> Also...
> 
> On 4/3/24 11:26, Kris Van Hees via DTrace-devel wrote:
> > diff --git a/libdtrace/dt_bpf.c b/libdtrace/dt_bpf.c
> > index 56b342e8..14ef12fc 100644
> > --- a/libdtrace/dt_bpf.c
> > +++ b/libdtrace/dt_bpf.c
> > @@ -73,18 +73,22 @@ dt_bpf_lockmem_error(dtrace_hdl_t *dtp, const char *msg)
> >   }
> >   /*
> > - * Load a BPF program into the kernel.
> > + * Load a BPF program into the kernel (and attach it to an object by BTF id if
> > + * specified).
> >    */
> 
> Omit the parentheses and the "if specified."  For this function, the btf_id
> is specified.  How about,
> "Load a BPF program into the kernel, attaching it to an object by BTF id."

There are cases where a BPF program can be attached using an attach_type that
does not require a BTF id to be provided, i.e. it gets ignored in that case by
the kernel code.

> >   int
> > -dt_bpf_prog_load(enum bpf_prog_type prog_type, const dtrace_difo_t *dp,
> > -		     uint32_t log_level, char *log_buf, size_t log_buf_sz)
> > +dt_bpf_prog_attach(enum bpf_prog_type ptype, enum bpf_attach_type atype,
> > +		   uint32_t btf_id, const dtrace_difo_t *dp, uint32_t log_level,
> > +		   char *log_buf, size_t log_buf_sz)
> >   {
> >   	union bpf_attr	attr;
> >   	int		fd;
> >   	int		i = 0;
> >   	memset(&attr, 0, sizeof(attr));
> > -	attr.prog_type = prog_type;
> > +	attr.prog_type = ptype;
> > +	attr.expected_attach_type = atype;
> > +	attr.attach_btf_id = btf_id;
> >   	attr.insn_cnt = dp->dtdo_len;
> >   	attr.insns = (uint64_t)dp->dtdo_buf;
> >   	attr.license = (uint64_t)BPF_CG_LICENSE;
> > @@ -103,6 +107,17 @@ dt_bpf_prog_load(enum bpf_prog_type prog_type, const dtrace_difo_t *dp,
> >   	return fd;
> >   }
> > +/*
> > + * Load a BPF program into the kernel (and attach it to an object by BTF id if
> > + * specified).
> > + */
> 
> Omit the parenthetical remark.  This function does not allow btf id.

Oops, I did some code movement, and clearly forgot to fix the comment.

> > +int
> > +dt_bpf_prog_load(enum bpf_prog_type ptype, const dtrace_difo_t *dp,
> > +		 uint32_t log_lvl, char *log_buf, size_t log_bufsz)
> > +{
> > +	return dt_bpf_prog_attach(ptype, 0, 0, dp, log_lvl, log_buf, log_bufsz);
> > +}
> 
> _______________________________________________
> DTrace-devel mailing list
> DTrace-devel at oss.oracle.com
> https://oss.oracle.com/mailman/listinfo/dtrace-devel



More information about the DTrace-devel mailing list