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>
此提交包含在:
@@ -109,6 +109,8 @@ struct sci_port_configuration_agent;
|
||||
typedef void (*port_config_fn)(struct isci_host *,
|
||||
struct sci_port_configuration_agent *,
|
||||
struct isci_port *, struct isci_phy *);
|
||||
bool is_port_config_apc(struct isci_host *ihost);
|
||||
bool is_controller_start_complete(struct isci_host *ihost);
|
||||
|
||||
struct sci_port_configuration_agent {
|
||||
u16 phy_configured_mask;
|
||||
@@ -473,6 +475,7 @@ void isci_host_completion_routine(unsigned long data);
|
||||
void isci_host_deinit(struct isci_host *);
|
||||
void sci_controller_disable_interrupts(struct isci_host *ihost);
|
||||
bool sci_controller_has_remote_devices_stopping(struct isci_host *ihost);
|
||||
void sci_controller_transition_to_ready(struct isci_host *ihost, enum sci_status status);
|
||||
|
||||
enum sci_status sci_controller_start_io(
|
||||
struct isci_host *ihost,
|
||||
|
新增問題並參考
封鎖使用者