diff options
| author | 2012-02-28 12:42:14 +0000 | |
|---|---|---|
| committer | 2012-02-28 12:42:21 +0000 | |
| commit | fb0b82b32ce17564bc64cede50bf4a3204eecc60 (patch) | |
| tree | 00b5e466074c6fb373d64c493b3341186024acc7 /drivers/scsi/scsi_pm.c | |
| parent | Merge branch 'kirkwood/board' into next/boards (diff) | |
| parent | ARM: pxa: add dummy clock for pxa25x and pxa27x (diff) | |
| download | wireguard-linux-fb0b82b32ce17564bc64cede50bf4a3204eecc60.tar.xz wireguard-linux-fb0b82b32ce17564bc64cede50bf4a3204eecc60.zip | |
Merge branch 'board-specific' of git://github.com/hzhuang1/linux into next/boards
* 'board-specific' of git://github.com/hzhuang1/linux: (5 commits)
  ARM: pxa: add dummy clock for pxa25x and pxa27x
  ARM: mmp: append irq name of gpio device
  pxa/hx4700: Fix PXA_GPIO_IRQ_BASE/IRQ_NUM values
  pxa/hx4700: Add ASIC3 LED support
  pxa/hx4700: Correct StrataFlash block size discovery
(update to v3.3-rc5)
Diffstat (limited to 'drivers/scsi/scsi_pm.c')
| -rw-r--r-- | drivers/scsi/scsi_pm.c | 16 | 
1 files changed, 16 insertions, 0 deletions
| diff --git a/drivers/scsi/scsi_pm.c b/drivers/scsi/scsi_pm.c index bf8bf79e6a1f..c4670642d023 100644 --- a/drivers/scsi/scsi_pm.c +++ b/drivers/scsi/scsi_pm.c @@ -7,6 +7,7 @@  #include <linux/pm_runtime.h>  #include <linux/export.h> +#include <linux/async.h>  #include <scsi/scsi.h>  #include <scsi/scsi_device.h> @@ -92,6 +93,19 @@ static int scsi_bus_resume_common(struct device *dev)  	return err;  } +static int scsi_bus_prepare(struct device *dev) +{ +	if (scsi_is_sdev_device(dev)) { +		/* sd probing uses async_schedule.  Wait until it finishes. */ +		async_synchronize_full(); + +	} else if (scsi_is_host_device(dev)) { +		/* Wait until async scanning is finished */ +		scsi_complete_async_scans(); +	} +	return 0; +} +  static int scsi_bus_suspend(struct device *dev)  {  	return scsi_bus_suspend_common(dev, PMSG_SUSPEND); @@ -110,6 +124,7 @@ static int scsi_bus_poweroff(struct device *dev)  #else /* CONFIG_PM_SLEEP */  #define scsi_bus_resume_common		NULL +#define scsi_bus_prepare		NULL  #define scsi_bus_suspend		NULL  #define scsi_bus_freeze			NULL  #define scsi_bus_poweroff		NULL @@ -218,6 +233,7 @@ void scsi_autopm_put_host(struct Scsi_Host *shost)  #endif /* CONFIG_PM_RUNTIME */  const struct dev_pm_ops scsi_bus_pm_ops = { +	.prepare =		scsi_bus_prepare,  	.suspend =		scsi_bus_suspend,  	.resume =		scsi_bus_resume_common,  	.freeze =		scsi_bus_freeze, | 
