Hi Bart On 07/26/2018 06:26 AM, Bart Van Assche wrote: > + > +void blk_pm_runtime_lock(struct request_queue *q) > +{ > + spin_lock(&q->rpm_lock); > + wait_event_interruptible_locked(q->rpm_wq, > + q->rpm_owner == NULL || q->rpm_owner == current); > + if (q->rpm_owner == NULL) > + q->rpm_owner = current; > + q->rpm_nesting_level++; > + spin_unlock(&q->rpm_lock); > +} The lock which wait_event_interruptible_locked want to hold is the wq.lock. Please refer to comment of wait_event_interruptible_locked * It must be called with wq.lock being held. This spinlock is * unlocked while sleeping but @condition testing is done while lock * is held and when this macro exits the lock is held. Thanks Jianchao