On 26/11/18 09:18, Xiao Guangrong wrote: >> >>> +static uint64_t get_free_request_bitmap(Threads *threads, >>> ThreadLocal *thread) >>> +{ >>> + uint64_t request_fill_bitmap, request_done_bitmap, result_bitmap; >>> + >>> + request_fill_bitmap = >>> atomic_rcu_read(&thread->request_fill_bitmap); >>> + request_done_bitmap = >>> atomic_rcu_read(&thread->request_done_bitmap); >>> + bitmap_xor(&result_bitmap, &request_fill_bitmap, >>> &request_done_bitmap, >>> + threads->thread_requests_nr); >> >> This is not wrong, but it's a big ugly. Instead, I would: >> >> - Introduce bitmap_xor_atomic in a previous patch >> - Use bitmap_xor_atomic here, getting rid of the rcu reads > > Hmm, however, we do not need atomic xor operation here... that should be > slower than > just two READ_ONCE calls. Yeah, I'd just go with Guangrong's version. Alternatively, add find_{first,next}_{same,different}_bit functions (whatever subset of the 4 you need). Paolo