[PATCH RFC V2 0/3] blk-mq: support runtime PM

Ming Lei
2018-07-13T08:05:59Z

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@rjwysocki.net>
Cc: Alan Stern <stern@rowland.harvard.edu>
Cc: linux-pm@vger.kernel.org
Cc: Greg Kroah-Hartman <gregkh@linuxfoundation.org>
Cc: Christoph Hellwig <hch@lst.de>
Cc: Bart Van Assche <bart.vanassche@wdc.com>
Cc: Hannes Reinecke <hare@suse.de>
Cc: Johannes Thumshirn <jthumshirn@suse.de>
Cc: Adrian Hunter <adrian.hunter@intel.com>
Cc: "James E.J. Bottomley" <jejb@linux.vnet.ibm.com>
Cc: "Martin K. Petersen" <martin.petersen@oracle.com>
Cc: linux-scsi@vger.kernel.org

--
2.9.5