On Thu, Jul 11, 2024 at 08:48:03PM +0800, YangYang wrote: > On 2024/7/11 3:54, Bart Van Assche wrote: > > On 7/9/24 11:56 PM, Yang Yang wrote: > > > + /** > > > + * @swap_lock: Held while swapping word <-> cleared > > > + */ > > > + spinlock_t swap_lock; > > > > Why is only swapping 'word' with 'cleared' protected by the spinlock? > > If all 'cleared' changes would be protected by this spinlock then > > that would allow to eliminate the expensive xchg() call from > > sbitmap_deferred_clear(). > > The spinlock was initially introduced in ea86ea2cdced ("sbitmap: > ammortize cost of clearing bits"). > I think if all 'cleared' changes are protected by the spinlock, the > overhead of clearing tags would definitely increase. There are only two WRITE on 'cleared': - xchg(&map->cleared, 0) in sbitmap_deferred_clear() - set_bit() in sbitmap_deferred_clear_bit() xchg() supposes to provide such protection already. Thanks, Ming