Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit a9afa094 authored by Subhash Jadavani's avatar Subhash Jadavani
Browse files

scsi: pm: keep request queue and scsi device runtime status in sync



If scsi device is not runtime suspended while system resumes then
scsi device's runtime PM status gets changed to RPM_ACTIVE (if its
parent status is already set to RPM_ACTIVE) by the scsi system resume
callback. But if the scsi device's runtime PM is managed by block layer
then runtime status of scsi device's request queue might still remain
in RPM_SUSPENDED hence all the new block requests submitted to the
request queue will have to wait until the queue runtime status gets
changed to RPM_ACTIVE which never happens as scsi device status is
already marked RPM_ACTIVE.

Fix this problem by changing the request queue runtime status to
RPM_ACTIVE when scsi device runtime status changes to RPM_ACTIVE.

Change-Id: I310cf8f1d7f13008b0ab9d87564fc0ac4d2e2314
Signed-off-by: default avatarSubhash Jadavani <subhashj@codeaurora.org>
parent 84bfeac2
Loading
Loading
Loading
Loading
+13 −1
Original line number Diff line number Diff line
@@ -84,8 +84,20 @@ static int scsi_dev_type_resume(struct device *dev,

	if (err == 0 && (cb != do_scsi_runtime_resume)) {
		pm_runtime_disable(dev);
		pm_runtime_set_active(dev);
		err = pm_runtime_set_active(dev);
		pm_runtime_enable(dev);

		if (!err && scsi_is_sdev_device(dev)) {
			struct scsi_device *sdev = to_scsi_device(dev);

			/*
			 * If scsi device runtime PM is managed by block layer
			 * then we should update request queue's runtime status
			 * as well.
			 */
			if (sdev->request_queue->dev)
				blk_post_runtime_resume(sdev->request_queue, 0);
		}
	}

	return err;