Re: [PATCH bpf-next 0/3] API to access btf_dump emit queue and print single type

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



On Thu, 2024-05-16 at 17:02 -0700, Eduard Zingerman wrote:
> On Thu, 2024-05-16 at 16:04 -0700, Eduard Zingerman wrote:
> > This is a follow-up to the following discussion:
> > https://lore.kernel.org/bpf/20240503111836.25275-1-jose.marchesi@xxxxxxxxxx/
> > 
> > As suggested by Andrii, this series adds several API functions to
> > allow more flexibility with btf dump:
> > - a function to add a type and all its dependencies to the emit queue;
> > - functions to provide access to the emit queue owned by btf_dump object;
> > - a function to print a given type (skipping any dependencies).
> 
> The series fails on the CI despite passing local testing,
> I'll submit v2 when ready.
> 
> [...]

The bug was caused by a logical error in typedefs handling.
Do not mark typedef as ORDERED, always emit a forward declaration for
it instead. Otherwise the following situation would be troublesome:

  typedef struct foo foo_alias;

  struct foo {};

  struct root {
     foo_alias *a;    <-- foo->a leads to forward declaration for 'foo',
     foo_alias b;         if 'foo_alias' is marked ORDERED
  };                      foo->b will not traverse to generate
                          full declaration for 'foo'.

The patch below fixes error.
CI builds seem ok:
https://github.com/kernel-patches/bpf/pull/7052

---

diff --git a/tools/lib/bpf/btf_dump.c b/tools/lib/bpf/btf_dump.c
index cb233f891582..7e845ad9ca9e 100644
--- a/tools/lib/bpf/btf_dump.c
+++ b/tools/lib/bpf/btf_dump.c
@@ -653,12 +653,9 @@ static int btf_dump_order_type(struct btf_dump *d, __u32 id, __u32 cont_id, bool
                if (err < 0)
                        return err;
 
-               /* typedef is always a named definition */
-               err = btf_dump_add_emit_queue_id(d, id);
+               err = btf_dump_add_emit_queue_fwd(d, id);
                if (err)
                        return err;
-
-               d->type_states[id].order_state = ORDERED;
                return 0;
        }
        case BTF_KIND_VOLATILE:






[Index of Archives]     [Linux Samsung SoC]     [Linux Rockchip SoC]     [Linux Actions SoC]     [Linux for Synopsys ARC Processors]     [Linux NFS]     [Linux NILFS]     [Linux USB Devel]     [Video for Linux]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]


  Powered by Linux