Re: [PATCH bpf-next v3 2/3] selftests/bpf: support array presets in veristat

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

 



On Wed, Jun 11, 2025 at 5:21 AM Eduard Zingerman <eddyz87@xxxxxxxxx> wrote:
>
> What do you think about a more recursive representation for presets?
> E.g. as follows:
>
>   struct rvalue {
>     long long i; /* use find_enum_value() at parse time to avoid union */
>   };
>
>   struct lvalue {
>     enum { VAR, FIELD, ARRAY } type;
>     union {
>       struct {
>         char *name;
>       } var;
>       struct {
>         struct lvalue *base;
>         char *name;
>       } field;
>       struct {
>         struct lvalue *base;
>         struct rvalue index;
>       } array;
>     };
>   };
>
>   struct preset {
>     struct lvalue *lv;
>     struct rvalue rv;
>   };
>
> It can handle matrices ("a[2][3]") and offset/type computation would
> be a simple recursive function.
>

Why do we need recursion, though? All we should need is an array specs
of one of the following types:

  a) field access by name
    a.1) we might want to distinguish array field vs non-array field
to better catch unintended user errors
  b) indexing by immediate integer
  c) indexing by symbolic enum name (or we can combine b and c,
whatever works better).

And that's all. And it will support multi-dimensional arrays.

We then process this array one at a time. Each *step* itself might be
recursive: finding a field by name in C struct is necessarily
recursive due to anonymous embedded struct/union fields. But other
than that, it's a simple sequential operation.

So unless I'm missing something, let's not add data recursion if it's
not needed.





[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