mirror of https://gitee.com/openkylin/linux.git
2193b1b16c
isci is needlessly tying libata's hands by returning SAM_STAT_CHECK_CONDITION to some ata errors. Instead, prefer SAS_PROTO_RESPONSE to let libata (via sas_ata_task_done()) disposition the device-to-host fis. For example isci is triggering an HSM Violation where AHCI is showing a simple media error for the same bus condition: isci: ata7.00: failed command: READ VERIFY SECTOR(S) ata7.00: cmd 40/00:01:00:00:00/00:00:00:00:00/e0 tag 0 res 01/04:00:00:00:00/00:00:00:00:00/e0 Emask 0x3 (HSM violation) ahci: ata6.00: failed command: READ VERIFY SECTOR(S) ata6.00: cmd 40/00:01:00:00:00/00:00:00:00:00/e0 tag 0 res 51/40:01:00:00:00/00:00:00:00:00/e0 Emask 0x9 (media error) Note that the isci response matches this from sas_ata_task_done(): /* We saw a SAS error. Send a vague error. */ [..] dev->sata_dev.fis[3] = 0x04; /* status err */ dev->sata_dev.fis[2] = ATA_ERR; The end effect is that isci is needlessly triggering hard resets when they are not necessary. Reported-by: Xun Ni <xun.ni@intel.com> Tested-by: Nelson Cheng <nelson.cheng@intel.com> Acked-by: Lukasz Dorau <lukasz.dorau@intel.com> Signed-off-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: James Bottomley <JBottomley@Parallels.com> |
||
---|---|---|
.. | ||
Makefile | ||
host.c | ||
host.h | ||
init.c | ||
isci.h | ||
phy.c | ||
phy.h | ||
port.c | ||
port.h | ||
port_config.c | ||
probe_roms.c | ||
probe_roms.h | ||
registers.h | ||
remote_device.c | ||
remote_device.h | ||
remote_node_context.c | ||
remote_node_context.h | ||
remote_node_table.c | ||
remote_node_table.h | ||
request.c | ||
request.h | ||
sas.h | ||
scu_completion_codes.h | ||
scu_event_codes.h | ||
scu_remote_node_context.h | ||
scu_task_context.h | ||
task.c | ||
task.h | ||
unsolicited_frame_control.c | ||
unsolicited_frame_control.h |