1. 21 3月, 2019 1 次提交
  2. 07 3月, 2019 6 次提交
    • X
      scsi: hisi_sas: Change SERDES_CFG init value to increase reliability of HiLink · cf9efd5d
      Xiang Chen 提交于
      With default value of register SERDES_CFG, the link is not stable for some
      special disks when running IO. According to HW guys' suggestion, need to
      make the bit10~19 value of register SERDES_CFG the max value to increase
      the reliability of the HiLink.
      Signed-off-by: NXiang Chen <chenxiang66@hisilicon.com>
      Reviewed-by: NYupeng Zhou <zhouyupeng1@huawei.com>
      Signed-off-by: NJohn Garry <john.garry@huawei.com>
      Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
      cf9efd5d
    • X
      scsi: hisi_sas: Send HARD RESET to clear the previous affiliation of STP target port · 57dbb2b2
      Xiang Chen 提交于
      If we exchange SAS expander from one SAS controller to other SAS controller
      without powering it down, the STP target port will maintain previous
      affiliation and reject all subsequent connection requests from other STP
      initiator ports with OPEN_REJECT (STP RESOURCES BUSY).
      
      To solve this issue, send HARD RESET to clear the previous affiliation of
      STP target port according to SPL (chapter 6.19.4).
      
      We (re-)introduce dev status flag to know if to sleep in NEXUS reset code
      or not for remote PHYs. The idea is that if the device is being
      initialised, we don't require the delay, and caller would wait for link to
      be established, cf. sas_ata_hard_reset().
      Co-developed-by: NLuo Jiaxing <luojiaxing@huawei.com>
      Signed-off-by: NXiang Chen <chenxiang66@hisilicon.com>
      Signed-off-by: NJohn Garry <john.garry@huawei.com>
      Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
      57dbb2b2
    • J
      scsi: hisi_sas: Set PHY linkrate when disconnected · efdcad62
      John Garry 提交于
      When the PHY comes down, we currently do not set the negotiated linkrate:
      
      root@(none)$ pwd
      /sys/class/sas_phy/phy-0:0
      root@(none)$ more enable
      1
      root@(none)$ more negotiated_linkrate
      12.0 Gbit
      root@(none)$ echo 0 > enable
      root@(none)$ more negotiated_linkrate
      12.0 Gbit
      root@(none)$
      
      This patch fixes the driver code to set it properly when the PHY comes
      down.
      
      If the PHY had been enabled, then set unknown; otherwise, flag as disabled.
      
      The logical place to set the negotiated linkrate for this scenario is PHY
      down routine, which is called from the PHY down ISR.
      
      However, it is not possible to know if the PHY comes down due to PHY
      disable or loss of link, as sas_phy.enabled member is not set until after
      the transport disable routine is complete, which races with the PHY down
      ISR.
      
      As an imperfect solution, use sas_phy_data.enable as the flag to know if
      the PHY is down due to disable. It's imperfect, as sas_phy_data is internal
      to libsas.
      
      I can't see another way without adding a new field to hisi_sas_phy and
      managing it, or changing SCSI SAS transport.
      Signed-off-by: NJohn Garry <john.garry@huawei.com>
      Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
      efdcad62
    • X
      scsi: hisi_sas: print PHY RX errors count for later revision of v3 hw · aaeb8232
      Xiaofei Tan 提交于
      The later revision of v3 hw has added an function of interrupt coalesce
      according to time for PHY RX errors. We set the coalesce time to 1s.  Then
      we print PHY RX errors count when PHY RX errors happen, and don't need to
      worry that there may be too much log prints.
      
      Besides, we use hisi_sas_phy.lock to protect error count value. Because we
      update them by calling phy_get_events_v3_hw(), which is also used by core
      driver (for get PHY events function).
      
      We relocate phy_get_events_v3_hw() to avoid a further declaration.
      Signed-off-by: NXiaofei Tan <tanxiaofei@huawei.com>
      Signed-off-by: NJohn Garry <john.garry@huawei.com>
      Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
      aaeb8232
    • X
      scsi: hisi_sas: Fix a timeout race of driver internal and SMP IO · 47905957
      Xiang Chen 提交于
      For internal IO and SMP IO, there is a time-out timer for them. In the
      timer handler, it checks whether IO is done according to the flag
      task->task_state_lock.
      
      There is an issue which may cause system suspended: internal IO or SMP IO
      is sent, but at that time because of hardware exception (such as inject
      2Bit ECC error), so IO is not completed and also not timeout. But, at that
      time, the SAS controller reset occurs to recover system. It will release
      the resource and set the status of IO to be SAS_TASK_STATE_DONE, so when IO
      timeout, it will never complete the completion of IO and wait for ever.
      
      [  729.123632] Call trace:
      [  729.126791] [<ffff00000808655c>] __switch_to+0x94/0xa8
      [  729.133106] [<ffff000008d96e98>] __schedule+0x1e8/0x7fc
      [  729.138975] [<ffff000008d974e0>] schedule+0x34/0x8c
      [  729.144401] [<ffff000008d9b000>] schedule_timeout+0x1d8/0x3cc
      [  729.150690] [<ffff000008d98218>] wait_for_common+0xdc/0x1a0
      [  729.157101] [<ffff000008d98304>] wait_for_completion+0x28/0x34
      [  729.165973] [<ffff000000dcefb4>] hisi_sas_internal_task_abort+0x2a0/0x424 [hisi_sas_test_main]
      [  729.176447] [<ffff000000dd18f4>] hisi_sas_abort_task+0x244/0x2d8 [hisi_sas_test_main]
      [  729.185258] [<ffff000008971714>] sas_eh_handle_sas_errors+0x1c8/0x7b8
      [  729.192391] [<ffff000008972774>] sas_scsi_recover_host+0x130/0x398
      [  729.199237] [<ffff00000894d8a8>] scsi_error_handler+0x148/0x5c0
      [  729.206009] [<ffff0000080f4118>] kthread+0x10c/0x138
      [  729.211563] [<ffff0000080855dc>] ret_from_fork+0x10/0x18
      
      To solve the issue, callback function task_done of those IOs need to be
      called when on SAS controller reset.
      Signed-off-by: NXiang Chen <chenxiang66@hisilicon.com>
      Signed-off-by: NJohn Garry <john.garry@huawei.com>
      Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
      47905957
    • X
      scsi: hisi_sas: Change return variable type in phy_up_v3_hw() · fba770c6
      Xiang Chen 提交于
      According to the tool fortify, phy_up_v3_hw() returns signed value, while
      it should return an unsigned value.
      
      So change variable "res" from int to irq_return_t.
      Signed-off-by: NXiang Chen <chenxiang66@hisilicon.com>
      Signed-off-by: NJohn Garry <john.garry@huawei.com>
      Signed-off-by: NMartin K. Petersen <martin.petersen@oracle.com>
      fba770c6
  3. 26 2月, 2019 1 次提交
  4. 09 2月, 2019 6 次提交
  5. 29 1月, 2019 13 次提交
  6. 12 1月, 2019 1 次提交
  7. 09 1月, 2019 8 次提交
  8. 19 12月, 2018 2 次提交
  9. 13 12月, 2018 2 次提交