| From foo@baz Mon Apr 9 17:09:24 CEST 2018 |
| From: chenxiang <chenxiang66@hisilicon.com> |
| Date: Thu, 4 Jan 2018 21:04:33 +0800 |
| Subject: scsi: libsas: initialize sas_phy status according to response of DISCOVER |
| |
| From: chenxiang <chenxiang66@hisilicon.com> |
| |
| |
| [ Upstream commit affc67788fe5dfffad5cda3d461db5cf2b2ff2b0 ] |
| |
| The status of SAS PHY is in sas_phy->enabled. There is an issue that the |
| status of a remote SAS PHY may be initialized incorrectly: if disable |
| remote SAS PHY through sysfs interface (such as echo 0 > |
| /sys/class/sas_phy/phy-1:0:0/enable), then reboot the system, and we |
| will find the status of remote SAS PHY which is disabled before is |
| 1 (cat /sys/class/sas_phy/phy-1:0:0/enable). But actually the status of |
| remote SAS PHY is disabled and the device attached is not found. |
| |
| In SAS protocol, NEGOTIATED LOGICAL LINK RATE field of DISCOVER response |
| is 0x1 when remote SAS PHY is disabled. So initialize sas_phy->enabled |
| according to the value of NEGOTIATED LOGICAL LINK RATE field. |
| |
| Signed-off-by: chenxiang <chenxiang66@hisilicon.com> |
| Reviewed-by: John Garry <john.garry@huawei.com> |
| Signed-off-by: Jason Yan <yanaijie@huawei.com> |
| Reviewed-by: Christoph Hellwig <hch@lst.de> |
| Reviewed-by: Hannes Reinecke <hare@suse.com> |
| Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com> |
| Signed-off-by: Sasha Levin <alexander.levin@microsoft.com> |
| Signed-off-by: Greg Kroah-Hartman <gregkh@linuxfoundation.org> |
| --- |
| drivers/scsi/libsas/sas_expander.c | 1 + |
| 1 file changed, 1 insertion(+) |
| |
| --- a/drivers/scsi/libsas/sas_expander.c |
| +++ b/drivers/scsi/libsas/sas_expander.c |
| @@ -282,6 +282,7 @@ static void sas_set_ex_phy(struct domain |
| phy->phy->minimum_linkrate = dr->pmin_linkrate; |
| phy->phy->maximum_linkrate = dr->pmax_linkrate; |
| phy->phy->negotiated_linkrate = phy->linkrate; |
| + phy->phy->enabled = (phy->linkrate != SAS_PHY_DISABLED); |
| |
| skip: |
| if (new_phy) |