On Thu, Jun 2, 2022 at 9:17 PM Ian Rogers <irogers@xxxxxxxxxx> wrote: > > From: Yuze Chi <chiyuze@xxxxxxxxxx> > > There is a missing not. Consider a power of 2 number like 4096: > > x && (x & (x - 1)) > 4096 && (4096 & (4096 - 1)) > 4096 && (4096 & 4095) > 4096 && 0 > 0 > > with the not this is: > x && !(x & (x - 1)) > 4096 && !(4096 & (4096 - 1)) > 4096 && !(4096 & 4095) > 4096 && !0 > 4096 && 1 > 1 > > Reported-by: Yuze Chi <chiyuze@xxxxxxxxxx> > Signed-off-by: Yuze Chi <chiyuze@xxxxxxxxxx> > Signed-off-by: Ian Rogers <irogers@xxxxxxxxxx> > --- > tools/lib/bpf/libbpf.c | 2 +- > 1 file changed, 1 insertion(+), 1 deletion(-) > > diff --git a/tools/lib/bpf/libbpf.c b/tools/lib/bpf/libbpf.c > index 3f4f18684bd3..fd0414ea00df 100644 > --- a/tools/lib/bpf/libbpf.c > +++ b/tools/lib/bpf/libbpf.c > @@ -4956,7 +4956,7 @@ static void bpf_map__destroy(struct bpf_map *map); > > static bool is_pow_of_2(size_t x) > { > - return x && (x & (x - 1)); > + return x && !(x & (x - 1)); No idea if anyone cares about the consistency, but in linker.c (same directory) the same static function is defined using == 0 at the end instead of using the not operator. Aside from the consistency issue, personally I find the == 0 version a little bit easier to read and understand because it's a bit less dense (and a "!" next to a "(" is an easy character to overlook). > } > > static size_t adjust_ringbuf_sz(size_t sz) > -- > 2.36.1.255.ge46751e96f-goog >