On 2024/2/28 23:24, Matthew Wilcox wrote: > On Wed, Feb 28, 2024 at 03:18:32PM +0000, Chengming Zhou wrote: >> Now the release of zswap pool is controlled by percpu_ref, its release >> callback (__zswap_pool_empty()) will be called when percpu_ref hit 0. >> But this release callback may potentially be called from RCU callback >> context by percpu_ref_kill(), which maybe in the interrupt context. >> >> So we need to use spin_lock_irqsave() and spin_unlock_irqrestore() >> in the release callback: __zswap_pool_empty(). In other task context >> places, spin_lock_irq() and spin_unlock_irq() are enough to avoid >> potential deadlock. > > RCU callback context is BH, not IRQ, so it's enough to use > spin_lock_bh(), no? You're right, it's the softirq context, so spin_lock_bh() is enough. Thanks!