Re: [PATCH 4/4] samples: bpf: add mthp_ext
From: Vernon Yang
Date: Wed May 06 2026 - 09:30:37 EST
On Mon, May 4, 2026 at 1:35 AM <bot+bpf-ci@xxxxxxxxxx> wrote:
>
> > diff --git a/samples/bpf/.gitignore b/samples/bpf/.gitignore
> > index 0002cd359fb1..2a73581876b4 100644
> > --- a/samples/bpf/.gitignore
> > +++ b/samples/bpf/.gitignore
>
> [ ... ]
>
> > diff --git a/samples/bpf/Makefile b/samples/bpf/Makefile
> > index 95a4fa1f1e44..357c7d1c45ef 100644
> > --- a/samples/bpf/Makefile
> > +++ b/samples/bpf/Makefile
>
> [ ... ]
>
> > diff --git a/samples/bpf/mthp_ext.bpf.c b/samples/bpf/mthp_ext.bpf.c
> > new file mode 100644
> > index 000000000000..bbee3e9f679c
>
> [ ... ]
>
> > diff --git a/samples/bpf/mthp_ext.c b/samples/bpf/mthp_ext.c
> > new file mode 100644
> > index 000000000000..0e064bad136f
> > --- /dev/null
> > +++ b/samples/bpf/mthp_ext.c
> > @@ -0,0 +1,340 @@
> > +// SPDX-License-Identifier: GPL-2.0
>
> [ ... ]
>
> > +int main(int argc, char **argv)
> > +{
> > + const char *root_path = DEFAULT_ROOT;
> > + unsigned long threshold = DEFAULT_THRESHOLD_MS;
> > + unsigned long interval = DEFAULT_INTERVAL_MS;
> > + unsigned int init_order = DEFAULT_ORDER;
> > + unsigned int min_mem = DEFAULT_MIN_MEM;
> > + bool fixed = false;
> > + bool debug = false;
> > + struct mthp_ext *skel;
> > + struct bpf_link *iter_link;
> > + struct bpf_link *ops_link;
> > + struct ring_buffer *rb;
> > + int root_fd;
> > + int psi_fd;
> > + int err = 0;
> > + int opt;
>
> [ ... ]
>
> > + /* Attach struct_ops to root cgroup for mthp_choose */
> > + DECLARE_LIBBPF_OPTS(bpf_struct_ops_opts, opts);
> > + opts.flags = BPF_F_CGROUP_FD;
> > + opts.target_fd = root_fd;
> > + ops_link = bpf_map__attach_struct_ops_opts(skel->maps.mthp_ops, &opts);
> ^^^^^^^^^^^^^^^^^^^^^^^^^^
> Will mthp_ext compile with these symbols? A tree-wide grep shows that
> bpf_struct_ops_opts, BPF_F_CGROUP_FD, and bpf_map__attach_struct_ops_opts()
> do not exist anywhere in the kernel source tree:
>
> $ git grep -n "struct bpf_struct_ops_opts"
> samples/bpf/mthp_ext.c:260: DECLARE_LIBBPF_OPTS(bpf_struct_ops_opts, opts);
>
> $ git grep -n "BPF_F_CGROUP_FD"
> samples/bpf/mthp_ext.c:261: opts.flags = BPF_F_CGROUP_FD;
>
> $ git grep -n "bpf_map__attach_struct_ops_opts"
> samples/bpf/mthp_ext.c:263: ops_link = bpf_map__attach_struct_ops_opts(skel->maps.mthp_ops, &opts);
>
> The struct bpf_struct_ops_opts type is not defined in tools/lib/bpf/libbpf.h.
> The BPF_F_CGROUP_FD flag does not appear in include/uapi/linux/bpf.h or any
> other header. The bpf_map__attach_struct_ops_opts() function is not declared
> in libbpf.h or exported in tools/lib/bpf/libbpf.map.
>
> The only existing libbpf API for struct_ops attachment is:
>
> tools/lib/bpf/libbpf.h:
> LIBBPF_API struct bpf_link *
> bpf_map__attach_struct_ops(const struct bpf_map *map);
>
> which takes no opts parameter and cannot attach to a specific cgroup fd.
>
> Samples/bpf/Makefile was modified earlier in this commit to add mthp_ext to
> tprogs-y, meaning the build system will attempt to compile mthp_ext.c during
> make samples/bpf/. That compilation will fail with undefined type, undefined
> identifier, and implicit declaration errors.
>
> This looks like it depends on an out-of-tree libbpf extension that adds a
> per-cgroup struct_ops attachment API. Is that libbpf patch supposed to be
> included earlier in this series, or should the sample use a different attach
> mechanism?
This series is based on linux v7.1-rc1 (26fd6bff2c05) + "mm: BPF OOM"[3]
first four patches.
All of the above definitions are in "mm: BPF OOM" PATCH#2.
https://lore.kernel.org/linux-mm/20260127024421.494929-3-roman.gushchin@xxxxxxxxx/
> > + err = libbpf_get_error(ops_link);
> > + if (err) {
> > + fprintf(stderr, "ERROR: attach struct_ops failed: %d\n", err);
> > + ops_link = NULL;
> > + goto attach_opts_fail;
> > + }
>
> [ ... ]
>
> > diff --git a/samples/bpf/mthp_ext.h b/samples/bpf/mthp_ext.h
> > new file mode 100644
> > index 000000000000..33dc01bcebd3
>
> [ ... ]
>
>
> ---
> AI reviewed your patch. Please fix the bug or email reply why it's not a bug.
> See: https://github.com/kernel-patches/vmtest/blob/master/ci/claude/README.md
>
> CI run summary: https://github.com/kernel-patches/bpf/actions/runs/25285279315