aboutsummaryrefslogtreecommitdiffstats
path: root/include/linux/libata.h
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2012-06-22 02:41:46 -0400
committerJames Bottomley <JBottomley@Parallels.com>2012-08-24 05:10:23 -0400
commit2fcbdcb4c802fe40d6827dbc365dac90cfe8c0a3 (patch)
treed4a583b2477afcf474a4ec226406748d9a327613 /include/linux/libata.h
parentca6d43b051b5a061b33c43303b6b4c93b46a34b5 (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.h11
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
1014extern int ata_host_suspend(struct ata_host *host, pm_message_t mesg); 1014extern int ata_host_suspend(struct ata_host *host, pm_message_t mesg);
1015extern void ata_host_resume(struct ata_host *host); 1015extern void ata_host_resume(struct ata_host *host);
1016extern int ata_sas_port_async_suspend(struct ata_port *ap, int *async);
1017extern int ata_sas_port_async_resume(struct ata_port *ap, int *async);
1018#else
1019static inline int ata_sas_port_async_suspend(struct ata_port *ap, int *async)
1020{
1021 return 0;
1022}
1023static inline int ata_sas_port_async_resume(struct ata_port *ap, int *async)
1024{
1025 return 0;
1026}
1016#endif 1027#endif
1017extern int ata_ratelimit(void); 1028extern int ata_ratelimit(void);
1018extern void ata_msleep(struct ata_port *ap, unsigned int msecs); 1029extern void ata_msleep(struct ata_port *ap, unsigned int msecs);