Message ID | 20240401054914.721093-2-chenxiang66@hisilicon.com |
---|---|
State | New |
Headers | show |
Series | Some small fixes for hisi_sas | expand |
Hi Damien, 在 2024/4/1 星期一 15:10, Damien Le Moal 写道: > On 4/1/24 14:49, chenxiang wrote: >> From: Xingui Yang <yangxingui@huawei.com> >> >> We find that some disks use D2H frame instead of SDB frame to return NCQ >> error. Currently, only the I/O corresponding to the D2H frame is processed >> in this scenario, which does not meet the processing requirements of the >> NCQ error scenario. >> So we set dev_status to HISI_SAS_DEV_NCQ_ERR and abort all I/Os of the disk >> in this scenario. >> >> Signed-off-by: Xingui Yang <yangxingui@huawei.com> >> Signed-off-by: Xiang Chen <chenxiang66@hisilicon.com> >> --- >> drivers/scsi/hisi_sas/hisi_sas_v3_hw.c | 9 ++++++++- >> 1 file changed, 8 insertions(+), 1 deletion(-) >> >> diff --git a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c >> index 7d2a33514538..3935fa6bc72b 100644 >> --- a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c >> +++ b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c >> @@ -2244,7 +2244,14 @@ slot_err_v3_hw(struct hisi_hba *hisi_hba, struct sas_task *task, >> case SAS_PROTOCOL_SATA | SAS_PROTOCOL_STP: >> if ((dw0 & CMPLT_HDR_RSPNS_XFRD_MSK) && >> (sipc_rx_err_type & RX_FIS_STATUS_ERR_MSK)) { >> - ts->stat = SAS_PROTO_RESPONSE; >> + if (task->ata_task.use_ncq) { >> + struct domain_device *device = task->dev;> + struct hisi_sas_device *sas_dev = >> + device->lldd_dev; > Missing blank line after the declaration. And why the line split for the above > declaration ? That fits in 80 chars line... Will change it in next version. > >> + sas_dev->dev_status = HISI_SAS_DEV_NCQ_ERR; >> + slot->abort = 1; >> + } else >> + ts->stat = SAS_PROTO_RESPONSE; > Missing the curly brackets here. Will change it in next version. > >> } else if (dma_rx_err_type & RX_DATA_LEN_UNDERFLOW_MSK) { >> ts->residual = trans_tx_fail_type; >> ts->stat = SAS_DATA_UNDERRUN;
diff --git a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c index 7d2a33514538..3935fa6bc72b 100644 --- a/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c +++ b/drivers/scsi/hisi_sas/hisi_sas_v3_hw.c @@ -2244,7 +2244,14 @@ slot_err_v3_hw(struct hisi_hba *hisi_hba, struct sas_task *task, case SAS_PROTOCOL_SATA | SAS_PROTOCOL_STP: if ((dw0 & CMPLT_HDR_RSPNS_XFRD_MSK) && (sipc_rx_err_type & RX_FIS_STATUS_ERR_MSK)) { - ts->stat = SAS_PROTO_RESPONSE; + if (task->ata_task.use_ncq) { + struct domain_device *device = task->dev; + struct hisi_sas_device *sas_dev = + device->lldd_dev; + sas_dev->dev_status = HISI_SAS_DEV_NCQ_ERR; + slot->abort = 1; + } else + ts->stat = SAS_PROTO_RESPONSE; } else if (dma_rx_err_type & RX_DATA_LEN_UNDERFLOW_MSK) { ts->residual = trans_tx_fail_type; ts->stat = SAS_DATA_UNDERRUN;