aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi
diff options
context:
space:
mode:
authorMarcin Tomczak <marcin.tomczak@intel.com>2012-01-04 04:33:15 -0500
committerJames Bottomley <JBottomley@Parallels.com>2012-01-16 02:45:19 -0500
commitd4ec1cf61fb081a9dde0c0e0b2d0201f4005f937 (patch)
treeb93baa50731ef128b13a01b0319f9b0bc7e76112 /drivers/scsi
parentd3fd2e2bc29b1f0979352994f9035359003461c3 (diff)
[SCSI] isci: Fix IO fails when pull cable from phy in x4 wideport in MPC mode.
Failure seen pulling a cable from a x4 port configured in manual port configuration (MPC) mode (MPC mode is set by the the OEM paramaters provided by the platform or isci_firmware.bin). While IO running to devices behind and expander, plugging out the cable from phy is causing IO failures and IO drops on disks and never recover. It happens because during link up/down the phy were being taken out of the port. Fix: during link down the phy is kept in the same logical port. Signed-off-by: Marcin Tomczak <marcin.tomczak@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com>
Diffstat (limited to 'drivers/scsi')
-rw-r--r--drivers/scsi/isci/port.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/drivers/scsi/isci/port.c b/drivers/scsi/isci/port.c
index ac7f27749f97..4cb071d825bb 100644
--- a/drivers/scsi/isci/port.c
+++ b/drivers/scsi/isci/port.c
@@ -674,9 +674,13 @@ void sci_port_deactivate_phy(struct isci_port *iport, struct isci_phy *iphy,
674 674
675 iphy->max_negotiated_speed = SAS_LINK_RATE_UNKNOWN; 675 iphy->max_negotiated_speed = SAS_LINK_RATE_UNKNOWN;
676 676
677 /* Re-assign the phy back to the LP as if it were a narrow port */ 677 /* Re-assign the phy back to the LP as if it were a narrow port for APC
678 writel(iphy->phy_index, 678 * mode. For MPC mode, the phy will remain in the port.
679 &iport->port_pe_configuration_register[iphy->phy_index]); 679 */
680 if (iport->owning_controller->oem_parameters.controller.mode_type ==
681 SCIC_PORT_AUTOMATIC_CONFIGURATION_MODE)
682 writel(iphy->phy_index,
683 &iport->port_pe_configuration_register[iphy->phy_index]);
680 684
681 if (do_notify_user == true) 685 if (do_notify_user == true)
682 isci_port_link_down(ihost, iphy, iport); 686 isci_port_link_down(ihost, iphy, iport);