aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/isci/host.h
diff options
context:
space:
mode:
authorDan Williams <dan.j.williams@intel.com>2012-02-29 04:07:56 -0500
committerDan Williams <dan.j.williams@intel.com>2012-05-17 15:27:12 -0400
commit50a92d93148ec073efd2456b007e04ecae452086 (patch)
tree1a81ac87e301bdb7bd809daea52bd7be0b3b21b4 /drivers/scsi/isci/host.h
parenteb608c3cb3f0a6b99252ea6a69fc0d2bbecf1f4f (diff)
isci: fix 'link-up' events occur after 'start-complete'
The call to wait_for_start() is meant to ensure that all links have been given a chance to come up before letting the kernel proceed with probing. However, the implementation is not correctly syncing with the port configuration agent. In the MPC case the ports are hard-coded, in the APC case we need to wait for the port-configuration to form ports from the started phys. Towards that end increase the timeout for the APC agent to form ports, and delay start complete until all phys are out of link-training. Cc: <stable@vger.kernel.org> Cc: Richard Boyd <richard.g.boyd@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers/scsi/isci/host.h')
-rw-r--r--drivers/scsi/isci/host.h3
1 files changed, 3 insertions, 0 deletions
diff --git a/drivers/scsi/isci/host.h b/drivers/scsi/isci/host.h
index a89c0e3c5a14..9dc910b9d921 100644
--- a/drivers/scsi/isci/host.h
+++ b/drivers/scsi/isci/host.h
@@ -109,6 +109,8 @@ struct sci_port_configuration_agent;
109typedef void (*port_config_fn)(struct isci_host *, 109typedef void (*port_config_fn)(struct isci_host *,
110 struct sci_port_configuration_agent *, 110 struct sci_port_configuration_agent *,
111 struct isci_port *, struct isci_phy *); 111 struct isci_port *, struct isci_phy *);
112bool is_port_config_apc(struct isci_host *ihost);
113bool is_controller_start_complete(struct isci_host *ihost);
112 114
113struct sci_port_configuration_agent { 115struct sci_port_configuration_agent {
114 u16 phy_configured_mask; 116 u16 phy_configured_mask;
@@ -473,6 +475,7 @@ void isci_host_completion_routine(unsigned long data);
473void isci_host_deinit(struct isci_host *); 475void isci_host_deinit(struct isci_host *);
474void sci_controller_disable_interrupts(struct isci_host *ihost); 476void sci_controller_disable_interrupts(struct isci_host *ihost);
475bool sci_controller_has_remote_devices_stopping(struct isci_host *ihost); 477bool sci_controller_has_remote_devices_stopping(struct isci_host *ihost);
478void sci_controller_transition_to_ready(struct isci_host *ihost, enum sci_status status);
476 479
477enum sci_status sci_controller_start_io( 480enum sci_status sci_controller_start_io(
478 struct isci_host *ihost, 481 struct isci_host *ihost,