diff options
author | Dan Williams <dan.j.williams@intel.com> | 2012-06-22 02:41:46 -0400 |
---|---|---|
committer | James Bottomley <JBottomley@Parallels.com> | 2012-08-24 05:10:23 -0400 |
commit | 2fcbdcb4c802fe40d6827dbc365dac90cfe8c0a3 (patch) | |
tree | d4a583b2477afcf474a4ec226406748d9a327613 /include/linux/libata.h | |
parent | ca6d43b051b5a061b33c43303b6b4c93b46a34b5 (diff) |
[SCSI] libata: export ata_port suspend/resume infrastructure for sas
Reuse ata_port_{suspend|resume}_common for sas. This path is chosen
over adding coordination between ata-tranport and sas-transport because
libsas wants to revalidate the domain at resume-time at the host level.
It can not validate links have resumed properly until libata has had a
chance to perform its revalidation, and any sane placing of an ata_port
in the sas-transport model would delay it's resumption until after the
host.
Export the common portion of port suspend/resume (bypass pm_runtime),
and allow sas to perform these operations asynchronously (similar to the
libsas async-ata probe implmentation). Async operation is determined by
having an external, rather than stack based, location for storing the
result of the operation.
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Reviewed-by: Jacek Danecki <jacek.danecki@intel.com>
Acked-by: Jeff Garzik <jgarzik@redhat.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'include/linux/libata.h')
-rw-r--r-- | include/linux/libata.h | 11 |
1 files changed, 11 insertions, 0 deletions
diff --git a/include/linux/libata.h b/include/linux/libata.h index 31a2853e9530..cc834e1136b2 100644 --- a/include/linux/libata.h +++ b/include/linux/libata.h | |||
@@ -1013,6 +1013,17 @@ extern bool ata_link_offline(struct ata_link *link); | |||
1013 | #ifdef CONFIG_PM | 1013 | #ifdef CONFIG_PM |
1014 | extern int ata_host_suspend(struct ata_host *host, pm_message_t mesg); | 1014 | extern int ata_host_suspend(struct ata_host *host, pm_message_t mesg); |
1015 | extern void ata_host_resume(struct ata_host *host); | 1015 | extern void ata_host_resume(struct ata_host *host); |
1016 | extern int ata_sas_port_async_suspend(struct ata_port *ap, int *async); | ||
1017 | extern int ata_sas_port_async_resume(struct ata_port *ap, int *async); | ||
1018 | #else | ||
1019 | static inline int ata_sas_port_async_suspend(struct ata_port *ap, int *async) | ||
1020 | { | ||
1021 | return 0; | ||
1022 | } | ||
1023 | static inline int ata_sas_port_async_resume(struct ata_port *ap, int *async) | ||
1024 | { | ||
1025 | return 0; | ||
1026 | } | ||
1016 | #endif | 1027 | #endif |
1017 | extern int ata_ratelimit(void); | 1028 | extern int ata_ratelimit(void); |
1018 | extern void ata_msleep(struct ata_port *ap, unsigned int msecs); | 1029 | extern void ata_msleep(struct ata_port *ap, unsigned int msecs); |