mirror of
https://github.com/BobTheBlinker/android_kernel_motorola_sm6375.git
synced 2026-10-30 11:41:38 -04:00
Merge branch 'upstream-linus' of git://github.com/jgarzik/libata-dev
* 'upstream-linus' of git://github.com/jgarzik/libata-dev:
ahci: support the STA2X11 I/O Hub
pata_bf54x: fix BMIDE status register emulation
ata: add ata port hibernate callbacks
ata: update ata port's runtime status during system resume
[SCSI] runtime resume parent for child's system-resume
ahci: platform support for suspend/resume
libata-core: kill duplicate statement in ata_do_set_mode()
pata_of_platform: remove direct dependency on OF_IRQ
SATA/PATA: convert drivers/ata/* to use module_platform_driver()
pata_cs5536: forward port changes from cs5536
libata-sff: use ATAPI_{COD|IO}
ata: add ata port runtime PM callbacks
ata: add ata port system PM callbacks
[SCSI] sd: check runtime PM status in sd_shutdown
[SCSI] check runtime PM status in system PM
[SCSI] add flag to skip the runtime PM calls on the host
ata: make ata port as parent device of scsi host
ahci: start engine only during soft/hard resets
This commit is contained in:
commit
abce00f962
28 changed files with 326 additions and 323 deletions
|
|
@ -1812,7 +1812,7 @@ int scsi_error_handler(void *data)
|
|||
* what we need to do to get it up and online again (if we can).
|
||||
* If we fail, we end up taking the thing offline.
|
||||
*/
|
||||
if (scsi_autopm_get_host(shost) != 0) {
|
||||
if (!shost->eh_noresume && scsi_autopm_get_host(shost) != 0) {
|
||||
SCSI_LOG_ERROR_RECOVERY(1,
|
||||
printk(KERN_ERR "Error handler scsi_eh_%d "
|
||||
"unable to autoresume\n",
|
||||
|
|
@ -1833,7 +1833,8 @@ int scsi_error_handler(void *data)
|
|||
* which are still online.
|
||||
*/
|
||||
scsi_restart_operations(shost);
|
||||
scsi_autopm_put_host(shost);
|
||||
if (!shost->eh_noresume)
|
||||
scsi_autopm_put_host(shost);
|
||||
set_current_state(TASK_INTERRUPTIBLE);
|
||||
}
|
||||
__set_current_state(TASK_RUNNING);
|
||||
|
|
|
|||
|
|
@ -49,8 +49,22 @@ static int scsi_bus_suspend_common(struct device *dev, pm_message_t msg)
|
|||
{
|
||||
int err = 0;
|
||||
|
||||
if (scsi_is_sdev_device(dev))
|
||||
if (scsi_is_sdev_device(dev)) {
|
||||
/*
|
||||
* sd is the only high-level SCSI driver to implement runtime
|
||||
* PM, and sd treats runtime suspend, system suspend, and
|
||||
* system hibernate identically (but not system freeze).
|
||||
*/
|
||||
if (pm_runtime_suspended(dev)) {
|
||||
if (msg.event == PM_EVENT_SUSPEND ||
|
||||
msg.event == PM_EVENT_HIBERNATE)
|
||||
return 0; /* already suspended */
|
||||
|
||||
/* wake up device so that FREEZE will succeed */
|
||||
pm_runtime_resume(dev);
|
||||
}
|
||||
err = scsi_dev_type_suspend(dev, msg);
|
||||
}
|
||||
return err;
|
||||
}
|
||||
|
||||
|
|
@ -58,8 +72,17 @@ static int scsi_bus_resume_common(struct device *dev)
|
|||
{
|
||||
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);
|
||||
pm_runtime_put_sync(dev->parent);
|
||||
}
|
||||
|
||||
if (err == 0) {
|
||||
pm_runtime_disable(dev);
|
||||
|
|
|
|||
|
|
@ -50,6 +50,7 @@
|
|||
#include <linux/string_helpers.h>
|
||||
#include <linux/async.h>
|
||||
#include <linux/slab.h>
|
||||
#include <linux/pm_runtime.h>
|
||||
#include <asm/uaccess.h>
|
||||
#include <asm/unaligned.h>
|
||||
|
||||
|
|
@ -2741,6 +2742,9 @@ static void sd_shutdown(struct device *dev)
|
|||
if (!sdkp)
|
||||
return; /* this can happen */
|
||||
|
||||
if (pm_runtime_suspended(dev))
|
||||
goto exit;
|
||||
|
||||
if (sdkp->WCE) {
|
||||
sd_printk(KERN_NOTICE, sdkp, "Synchronizing SCSI cache\n");
|
||||
sd_sync_cache(sdkp);
|
||||
|
|
@ -2751,6 +2755,7 @@ static void sd_shutdown(struct device *dev)
|
|||
sd_start_stop_device(sdkp, 0);
|
||||
}
|
||||
|
||||
exit:
|
||||
scsi_disk_put(sdkp);
|
||||
}
|
||||
|
||||
|
|
|
|||
Loading…
Reference in a new issue