Hi Guys, Runtime PM is usually enabled for SCSI devices, and we are switching to SCSI_MQ recently, but runtime PM isn't supported yet by blk-mq, and people may complain that. This patch tries to support runtime PM for blk-mq. And one chanllenge is that it can be quite expensive to account the active in-flight IOs for figuring out when to mark the last busy. This patch simply marks busy after each non-PM IO is done, and this way is workable because: 1) pm_runtime_mark_last_busy() is very cheap 2) in-flight non-PM IO is checked in blk_pre_runtime_suspend(), so if there is any IO queued, the device will be prevented from being suspened. 3) Generally speaking, autosuspend_delay_ms is often big, and should be in unit of second, so it shouldn't be a big deal to check if queue is idle in blk_pre_runtime_suspend(). V2: - re-organize code as suggested by Christoph - use seqlock to sync runtime PM and IO path Ming Lei (3): block: put runtime PM code into common helpers blk-mq: prepare for supporting runtime PM scsi_mq: enable runtime PM block/blk-core.c | 176 +++++++++++++++++++++++++++++++++++++++--------- block/blk-mq.c | 71 +++++++++++++++++++ block/blk-mq.h | 10 +++ drivers/scsi/scsi_lib.c | 3 +- include/linux/blk-mq.h | 1 + include/linux/blkdev.h | 1 + 6 files changed, 228 insertions(+), 34 deletions(-) Cc: "Rafael J. Wysocki" <rjw@xxxxxxxxxxxxx> Cc: Alan Stern <stern@xxxxxxxxxxxxxxxxxxx> Cc: linux-pm@xxxxxxxxxxxxxxx Cc: Greg Kroah-Hartman <gregkh@xxxxxxxxxxxxxxxxxxx> Cc: Christoph Hellwig <hch@xxxxxx> Cc: Bart Van Assche <bart.vanassche@xxxxxxx> Cc: Hannes Reinecke <hare@xxxxxxx> Cc: Johannes Thumshirn <jthumshirn@xxxxxxx> Cc: Adrian Hunter <adrian.hunter@xxxxxxxxx> Cc: "James E.J. Bottomley" <jejb@xxxxxxxxxxxxxxxxxx> Cc: "Martin K. Petersen" <martin.petersen@xxxxxxxxxx> Cc: linux-scsi@xxxxxxxxxxxxxxx -- 2.9.5