Message ID | 1605437195-2175-1-git-send-email-alan.maguire@oracle.com |
---|---|
State | Superseded |
Headers | show |
Series | [bpf-next] libbpf: bpf__find_by_name[_kind] should use btf__get_nr_types() | expand |
Hello: This patch was applied to bpf/bpf-next.git (refs/heads/master): On Sun, 15 Nov 2020 10:46:35 +0000 you wrote: > When operating on split BTF, btf__find_by_name[_kind] will not > iterate over all types since they use btf->nr_types to show > the number of types to iterate over. For split BTF this is > the number of types _on top of base BTF_, so it will > underestimate the number of types to iterate over, especially > for vmlinux + module BTF, where the latter is much smaller. > > [...] Here is the summary with links: - [bpf-next] libbpf: bpf__find_by_name[_kind] should use btf__get_nr_types() https://git.kernel.org/bpf/bpf-next/c/de91e631bdc7 You are awesome, thank you! -- Deet-doot-dot, I am a bot. https://korg.docs.kernel.org/patchwork/pwbot.html
diff --git a/tools/lib/bpf/btf.c b/tools/lib/bpf/btf.c index 2d0d064..8ff46cd 100644 --- a/tools/lib/bpf/btf.c +++ b/tools/lib/bpf/btf.c @@ -674,12 +674,12 @@ int btf__resolve_type(const struct btf *btf, __u32 type_id) __s32 btf__find_by_name(const struct btf *btf, const char *type_name) { - __u32 i; + __u32 i, nr_types = btf__get_nr_types(btf); if (!strcmp(type_name, "void")) return 0; - for (i = 1; i <= btf->nr_types; i++) { + for (i = 1; i <= nr_types; i++) { const struct btf_type *t = btf__type_by_id(btf, i); const char *name = btf__name_by_offset(btf, t->name_off); @@ -693,12 +693,12 @@ __s32 btf__find_by_name(const struct btf *btf, const char *type_name) __s32 btf__find_by_name_kind(const struct btf *btf, const char *type_name, __u32 kind) { - __u32 i; + __u32 i, nr_types = btf__get_nr_types(btf); if (kind == BTF_KIND_UNKN || !strcmp(type_name, "void")) return 0; - for (i = 1; i <= btf->nr_types; i++) { + for (i = 1; i <= nr_types; i++) { const struct btf_type *t = btf__type_by_id(btf, i); const char *name;
When operating on split BTF, btf__find_by_name[_kind] will not iterate over all types since they use btf->nr_types to show the number of types to iterate over. For split BTF this is the number of types _on top of base BTF_, so it will underestimate the number of types to iterate over, especially for vmlinux + module BTF, where the latter is much smaller. Use btf__get_nr_types() instead. Fixes: ba451366bf44 ("libbpf: Implement basic split BTF support") Signed-off-by: Alan Maguire <alan.maguire@oracle.com> --- tools/lib/bpf/btf.c | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-)