On Tue, Nov 30, 2021 at 11:56 AM Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> wrote: > > On Tue, Nov 30, 2021 at 05:16:46AM IST, Andrii Nakryiko wrote: > > On Mon, Nov 22, 2021 at 6:47 AM Kumar Kartikeya Dwivedi > > <memxor@xxxxxxxxx> wrote: > > > > > > resolve_btfids prints a warning when it finds an unresolved symbol, > > > (id == 0) in id_patch. This can be the case for BTF sets that are empty > > > (due to disabled config options), hence printing warnings for certain > > > builds, most recently seen in [0]. > > > > > > The reason behind this is because id->cnt aliases id->id in btf_id > > > > do we need to alias this, btw? We are trying to save 4 bytes on 800+ > > struct (addr[ADDR_CNT] is big) and instead are getting more confusion > > in the code. > > > > I can do that, but going to wait for Jiri's response before respinning. > Alright, I've applied the patch set to bpf tree. Please follow up with the discussed improvements separately. Thanks. > > > struct, leading to empty set showing up as ID 0 when we get to id_patch, > > > which triggers the warning. Since sets are an exception here, accomodate > > > by reusing hole in btf_id for bool is_set member, setting it to true for > > > BTF set when setting id->cnt, and use that to skip extraneous warning. > > > > > > [0]: https://lore.kernel.org/all/1b99ae14-abb4-d18f-cc6a-d7e523b25542@xxxxxxxxx > > > > > > Before: > > > > > > ; ./tools/bpf/resolve_btfids/resolve_btfids -v -b vmlinux net/ipv4/tcp_cubic.ko > > > adding symbol tcp_cubic_kfunc_ids > > > WARN: resolve_btfids: unresolved symbol tcp_cubic_kfunc_ids > > > patching addr 0: ID 0 [tcp_cubic_kfunc_ids] > > > sorting addr 4: cnt 0 [tcp_cubic_kfunc_ids] > > > update ok for net/ipv4/tcp_cubic.ko > > > > > > After: > > > > > > ; ./tools/bpf/resolve_btfids/resolve_btfids -v -b vmlinux net/ipv4/tcp_cubic.ko > > > adding symbol tcp_cubic_kfunc_ids > > > patching addr 0: ID 0 [tcp_cubic_kfunc_ids] > > > sorting addr 4: cnt 0 [tcp_cubic_kfunc_ids] > > > update ok for net/ipv4/tcp_cubic.ko > > > > > > Cc: Jiri Olsa <jolsa@xxxxxxxxxx> > > > > Jiri, can you please take a look as well? > > > > > Fixes: 0e32dfc80bae ("bpf: Enable TCP congestion control kfunc from modules") > > > Reported-by: Pavel Skripkin <paskripkin@xxxxxxxxx> > > > Signed-off-by: Kumar Kartikeya Dwivedi <memxor@xxxxxxxxx> > > > --- > > > tools/bpf/resolve_btfids/main.c | 8 +++++--- > > > 1 file changed, 5 insertions(+), 3 deletions(-) > > > > > > diff --git a/tools/bpf/resolve_btfids/main.c b/tools/bpf/resolve_btfids/main.c > > > index a59cb0ee609c..73409e27be01 100644 > > > --- a/tools/bpf/resolve_btfids/main.c > > > +++ b/tools/bpf/resolve_btfids/main.c > > > @@ -83,6 +83,7 @@ struct btf_id { > > > int cnt; > > > }; > > > int addr_cnt; > > > + bool is_set; > > > Elf64_Addr addr[ADDR_CNT]; > > > }; > > > > > > @@ -451,8 +452,10 @@ static int symbols_collect(struct object *obj) > > > * in symbol's size, together with 'cnt' field hence > > > * that - 1. > > > */ > > > - if (id) > > > + if (id) { > > > id->cnt = sym.st_size / sizeof(int) - 1; > > > + id->is_set = true; > > > + } > > > } else { > > > pr_err("FAILED unsupported prefix %s\n", prefix); > > > return -1; > > > @@ -568,9 +571,8 @@ static int id_patch(struct object *obj, struct btf_id *id) > > > int *ptr = data->d_buf; > > > int i; > > > > > > - if (!id->id) { > > > + if (!id->id && !id->is_set) > > > pr_err("WARN: resolve_btfids: unresolved symbol %s\n", id->name); > > > - } > > > > > > for (i = 0; i < id->addr_cnt; i++) { > > > unsigned long addr = id->addr[i]; > > > -- > > > 2.34.0 > > > > > -- > Kartikeya