[PATCH v3 1/1] package/bpftool: revert bpf_cookie patch to allow building
Arnout Vandecappelle
arnout at mind.be
Tue Jun 14 10:14:21 PDT 2022
On 14/06/2022 11:31, Shahab Vahedi wrote:
> Building bpftool on Debian 11 (bullseye) with kernel v5.10 and clang-11
How do you build host-bpftool with clang in Buildroot context? HOSTCC is set
to gcc in the Makefile... Do you supply an explicit HOSTCC= on the Buildroot
command line? I'm not sure if we are really interested in carrying fixes for
such exotic and not-really-supported situations...
> fails:
>
> -----------------------------------8<-----------------------------------
> $ make
> .
> .
> .
> CLANG pid_iter.bpf.o
> skeleton/pid_iter.bpf.c:47:14: error: incomplete definition of type
> 'struct bpf_perf_link'
> perf_link = container_of(link, struct bpf_perf_link, link);
> .
> .
> .
> skeleton/pid_iter.bpf.c:49:30: error: no member named 'bpf_cookie' in
> 'struct perf_event'
> return BPF_CORE_READ(event, bpf_cookie);
> .
> .
> .
> 10 errors generated.
> make: *** [Makefile:176: pid_iter.bpf.o] Error 1
> ----------------------------------->8-----------------------------------
>
> There are changes in bpftool v6.8.0 that assumes the existence of
> particular data structures in generated vmlinux.h that is obtained
> from the host machine. See [1] for further details. This commit adds
> a patch to revert that additional change in v6.8.0.
>
> There's a patch series pending to be submitted upstream [2]. Hopefully,
> those will take care of the problem if they land in the next release.
>
> Changelog:
Patch changelog should be under the --- line, it's not meant to be part of the
git history. But of course that means you need to put the references [1][2]
above the --- line.
(No need to resend for this or any of my other comments, just FYI for future
submissions.)
> v1: Initial submission [3]
It's nice, but not really necessary to have a reference to the old versions.
They're easy enough to find back.
> v2: Use a full fledged git patch for bpftool [4]
> v3: Fix the snafu that resulted in malformed patch file
>
> [1]
> https://lore.kernel.org/bpf/c47f732d-dba8-2c13-7c72-3a651bf72353@synopsys.com/t/#u
>
> [2]
> https://lore.kernel.org/bpf/20220421003152.339542-1-alobakin@pm.me/
>
> [3]
> https://lists.buildroot.org/pipermail/buildroot/2022-June/644819.html
To refer to a buildroot patch, it's nicer to refer to patchwork, i.e.
https://patchwork.ozlabs.org/project/buildroot/patch/97ea44bb-58fe-d6cb-6c79-9be0b245f2c6@synopsys.com/
Regards,
Arnout
>
> [4]
> https://lists.buildroot.org/pipermail/buildroot/2022-June/644824.html
>
> Signed-off-by: Shahab Vahedi <shahab at synopsys.com>
> ---
> .../0002-revert-bpf_cookie-change.patch | 129 ++++++++++++++++++
> 1 file changed, 129 insertions(+)
> create mode 100644 package/bpftool/0002-revert-bpf_cookie-change.patch
>
> diff --git a/package/bpftool/0002-revert-bpf_cookie-change.patch b/package/bpftool/0002-revert-bpf_cookie-change.patch
> new file mode 100644
> index 0000000000..6f9579bd23
> --- /dev/null
> +++ b/package/bpftool/0002-revert-bpf_cookie-change.patch
> @@ -0,0 +1,129 @@
> +From d7c78d1e38cde73c85b491a833f0e6e3f0d62654 Mon Sep 17 00:00:00 2001
> +From: Shahab Vahedi <shahab at synopsys.com>
> +Date: Tue, 14 Jun 2022 10:12:21 +0200
> +Subject: [PATCH] Revert commit "bpftool: Add bpf_cookie to link output"
> +
> +Building bpftool on a Debian bullseye with clang-11 fails [1].
> +This patch reverts the offending commit [2]. If clang-11 is not
> +installed, then the "co-re" feature of bpf will not be enabled
> +and the issue remains dormant.
> +
> +[1] Building release 6.8.0 on Debian 11
> +https://lore.kernel.org/bpf/c47f732d-dba8-2c13-7c72-3a651bf72353@synopsys.com/t/#u
> +
> +[2] bpftool: Add bpf_cookie to link output
> +https://git.kernel.org/pub/scm/linux/kernel/git/bpf/bpf.git/commit/?id=cbdaf71f
> +
> +Signed-off-by: Shahab Vahedi <shahab at synopsys.com>
> +---
> + src/main.h | 2 --
> + src/pids.c | 8 --------
> + src/skeleton/pid_iter.bpf.c | 22 ----------------------
> + src/skeleton/pid_iter.h | 2 --
> + 4 files changed, 34 deletions(-)
> +
> +diff --git a/src/main.h b/src/main.h
> +index aa99ffa..2f2b638 100644
> +--- a/src/main.h
> ++++ b/src/main.h
> +@@ -111,9 +111,7 @@ struct obj_ref {
> +
> + struct obj_refs {
> + int ref_cnt;
> +- bool has_bpf_cookie;
> + struct obj_ref *refs;
> +- __u64 bpf_cookie;
> + };
> +
> + struct btf;
> +diff --git a/src/pids.c b/src/pids.c
> +index e2d00d3..57f0d1b 100644
> +--- a/src/pids.c
> ++++ b/src/pids.c
> +@@ -78,8 +78,6 @@ static void add_ref(struct hashmap *map, struct pid_iter_entry *e)
> + ref->pid = e->pid;
> + memcpy(ref->comm, e->comm, sizeof(ref->comm));
> + refs->ref_cnt = 1;
> +- refs->has_bpf_cookie = e->has_bpf_cookie;
> +- refs->bpf_cookie = e->bpf_cookie;
> +
> + err = hashmap__append(map, u32_as_hash_field(e->id), refs);
> + if (err)
> +@@ -206,9 +204,6 @@ void emit_obj_refs_json(struct hashmap *map, __u32 id,
> + if (refs->ref_cnt == 0)
> + break;
> +
> +- if (refs->has_bpf_cookie)
> +- jsonw_lluint_field(json_writer, "bpf_cookie", refs->bpf_cookie);
> +-
> + jsonw_name(json_writer, "pids");
> + jsonw_start_array(json_writer);
> + for (i = 0; i < refs->ref_cnt; i++) {
> +@@ -238,9 +233,6 @@ void emit_obj_refs_plain(struct hashmap *map, __u32 id, const char *prefix)
> + if (refs->ref_cnt == 0)
> + break;
> +
> +- if (refs->has_bpf_cookie)
> +- printf("\n\tbpf_cookie %llu", (unsigned long long) refs->bpf_cookie);
> +-
> + printf("%s", prefix);
> + for (i = 0; i < refs->ref_cnt; i++) {
> + struct obj_ref *ref = &refs->refs[i];
> +diff --git a/src/skeleton/pid_iter.bpf.c b/src/skeleton/pid_iter.bpf.c
> +index eb05ea5..f70702f 100644
> +--- a/src/skeleton/pid_iter.bpf.c
> ++++ b/src/skeleton/pid_iter.bpf.c
> +@@ -38,17 +38,6 @@ static __always_inline __u32 get_obj_id(void *ent, enum bpf_obj_type type)
> + }
> + }
> +
> +-/* could be used only with BPF_LINK_TYPE_PERF_EVENT links */
> +-static __u64 get_bpf_cookie(struct bpf_link *link)
> +-{
> +- struct bpf_perf_link *perf_link;
> +- struct perf_event *event;
> +-
> +- perf_link = container_of(link, struct bpf_perf_link, link);
> +- event = BPF_CORE_READ(perf_link, perf_file, private_data);
> +- return BPF_CORE_READ(event, bpf_cookie);
> +-}
> +-
> + SEC("iter/task_file")
> + int iter(struct bpf_iter__task_file *ctx)
> + {
> +@@ -80,19 +69,8 @@ int iter(struct bpf_iter__task_file *ctx)
> + if (file->f_op != fops)
> + return 0;
> +
> +- __builtin_memset(&e, 0, sizeof(e));
> + e.pid = task->tgid;
> + e.id = get_obj_id(file->private_data, obj_type);
> +-
> +- if (obj_type == BPF_OBJ_LINK) {
> +- struct bpf_link *link = (struct bpf_link *) file->private_data;
> +-
> +- if (BPF_CORE_READ(link, type) == BPF_LINK_TYPE_PERF_EVENT) {
> +- e.has_bpf_cookie = true;
> +- e.bpf_cookie = get_bpf_cookie(link);
> +- }
> +- }
> +-
> + bpf_probe_read_kernel_str(&e.comm, sizeof(e.comm),
> + task->group_leader->comm);
> + bpf_seq_write(ctx->meta->seq, &e, sizeof(e));
> +diff --git a/src/skeleton/pid_iter.h b/src/skeleton/pid_iter.h
> +index bbb570d..5692cf2 100644
> +--- a/src/skeleton/pid_iter.h
> ++++ b/src/skeleton/pid_iter.h
> +@@ -6,8 +6,6 @@
> + struct pid_iter_entry {
> + __u32 id;
> + int pid;
> +- __u64 bpf_cookie;
> +- bool has_bpf_cookie;
> + char comm[16];
> + };
> +
> +--
> +2.30.2
> +
More information about the linux-snps-arc
mailing list