Hi Bart On 08/11/2018 12:17 AM, Bart Van Assche wrote: > void blk_pm_runtime_exit(struct request_queue *q) > { > if (!q->dev) > return; > > pm_runtime_get_sync(q->dev); > blk_freeze_queue(q); > q->dev = NULL; > blk_unfreeze_queue(q); > } I'm afraid this will not work. In following patch: @@ -972,6 +972,8 @@ int blk_queue_enter(struct request_queue *q, blk_mq_req_flags_t flags) if (success) return 0; + blk_pm_request_resume(q); + if (flags & BLK_MQ_REQ_NOWAIT) return -EBUSY; We could still invoke blk_pm_request_resume even if the queue is frozen. And we have blk_pm_request_resume later as following: +static inline void blk_pm_request_resume(struct request_queue *q) +{ + if (q->dev && (q->rpm_status == RPM_SUSPENDED || + q->rpm_status == RPM_SUSPENDING)) + pm_request_resume(q->dev); +} Thanks Jianchao