On Mon 18-09-23 15:34:46, Mirsad Todorovac wrote: > On 9/18/23 15:18, Jan Kara wrote: > > On Mon 18-09-23 14:46:02, Mirsad Todorovac wrote: > > > Hi, > > > > > > I tried this patch and the > > > > > > > > 95 _find_first_and_bit (lib/find_bit.c:114 (discriminator 10)) > > > > > 31 _find_first_zero_bit (lib/find_bit.c:125 (discriminator 10)) > > > > > 173 _find_next_and_bit (lib/find_bit.c:171 (discriminator 2)) > > > > > 655 _find_next_bit (lib/find_bit.c:133 (discriminator 2)) > > > > > 5 _find_next_zero_bit > > > > > > data-races do not seem to appear any longer. > > > > Yup. You've just missed one case in _find_last_bit() and then all the > > functions in include/linux/find.h need a similar treatment... > > I seem to have this: > > ----------------------------------------------------------------------------------- > #ifndef find_last_bit > unsigned long _find_last_bit(const unsigned long *addr, unsigned long size) > { > if (size) { > unsigned long val = BITMAP_LAST_WORD_MASK(size); > unsigned long idx = (size-1) / BITS_PER_LONG; > > do { > val &= READ_ONCE(addr[idx]); > if (val) > return idx * BITS_PER_LONG + __fls(val); > > val = ~0ul; > } while (idx--); > } > return size; > } > EXPORT_SYMBOL(_find_last_bit); > #endif > ----------------------------------------------------------------------------------- > > Is there something I did not notice? No, this looks correct. I just somehow didn't see this hunk in the diff you've posted. Honza -- Jan Kara <jack@xxxxxxxx> SUSE Labs, CR