Re: [PATCH v2 35/35] sh: mach-x3proto: rework ilsel_enable()
Geert Uytterhoeven <[email protected]>
| Newsgroups | gmane.linux.ports.sh.devel,gmane.linux.kernel |
|---|---|
| Message-ID | <CAMuHMdWHxesM-EOOMtrrw3Caz+5Wux35QiKOjvwA=vwQpRe26Q@mail.gmail.com> |
On Sun, Dec 3, 2023 at 8:34 PM Yury Norov <[email protected]> wrote: > Fix opencoded find_and_set_bit(), which also suppresses potential > KCSAN warning. > > CC: John Paul Adrian Glaubitz <[email protected]> > Signed-off-by: Yury Norov <[email protected]> Reviewed-by: Geert Uytterhoeven <[email protected]> > --- a/arch/sh/boards/mach-x3proto/ilsel.c > +++ b/arch/sh/boards/mach-x3proto/ilsel.c > @@ -99,8 +99,8 @@ int ilsel_enable(ilsel_source_t set) > } > > do { > - bit = find_first_zero_bit(&ilsel_level_map, ILSEL_LEVELS); > - } while (test_and_set_bit(bit, &ilsel_level_map)); > + bit = find_and_set_bit(&ilsel_level_map, ILSEL_LEVELS); > + } while (bit >= ILSEL_LEVELS); > > __ilsel_enable(set, bit); BTW, I don't think the old code worked as intended: the first time no free bit is found, bit would have been ILSEL_LEVELS, and test_and_set_bit() would have returned false, thus terminating the loop, and continuing with an out-of-range bit value? Hence to work correctly, bit ILSEL_LEVELS of ilsel_level_map should have been initialized to one? Or am I missing something? The new code does not have that issue. Anyway, this should probably never happen in real life. Gr{oetje,eeting}s, Geert -- Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- [email protected] In personal conversations with technical people, I call myself a hacker. But when I'm talking to journalists I just say "programmer" or something like that. -- Linus Torvalds