|
@@ -72,8 +72,17 @@ static int scsi_bus_resume_common(struct device *dev)
|
|
{
|
|
{
|
|
int err = 0;
|
|
int err = 0;
|
|
|
|
|
|
- if (scsi_is_sdev_device(dev))
|
|
|
|
|
|
+ if (scsi_is_sdev_device(dev)) {
|
|
|
|
+ /*
|
|
|
|
+ * Parent device may have runtime suspended as soon as
|
|
|
|
+ * it is woken up during the system resume.
|
|
|
|
+ *
|
|
|
|
+ * Resume it on behalf of child.
|
|
|
|
+ */
|
|
|
|
+ pm_runtime_get_sync(dev->parent);
|
|
err = scsi_dev_type_resume(dev);
|
|
err = scsi_dev_type_resume(dev);
|
|
|
|
+ pm_runtime_put_sync(dev->parent);
|
|
|
|
+ }
|
|
|
|
|
|
if (err == 0) {
|
|
if (err == 0) {
|
|
pm_runtime_disable(dev);
|
|
pm_runtime_disable(dev);
|