Alexei Starovoitov wrote: > On Mon, Feb 26, 2024 at 3:21 PM John Fastabend <john.fastabend@xxxxxxxxx> wrote: > > > +__bpf_kfunc int *bpf_iter_bits_next(struct bpf_iter_bits *it) > > > +{ > > > + struct bpf_iter_bits_kern *kit = (void *)it; > > > + const unsigned long *bits = kit->bits; > > > + int bit; > > > + > > > + if (!bits) > > > + return NULL; > > > + > > > + bit = find_next_bit(bits, kit->nr_bits, kit->bit + 1); > > > > Seems like this should be ok over unsafe memory as long as find_next_bit > > is bounded? > > Are you proposing to add find_next_bit() as a kfunc instead? I was suggesting you could likely implement find_next_bit() in BPF directly no need for a kfunc. > > With the bpf_can_loop() proposal these two can be combined and > it will probably achieve the same result. > But imo this iterator is small enough to get in now and > delete later when there is a better way. Agree its fine to go in as is IMO. Mostly just curious if anyone tried to implement it in BPF. > Ideally we'd need to add new instructions to operate with bits efficiently. +1.