From 2e3eed19ed6233de4451cf68f7232a33d38dcec2 Mon Sep 17 00:00:00 2001 From: Piotr Sawicki Date: Fri, 25 Feb 2011 13:07:38 -0800 Subject: [PATCH] --- yaml --- r: 254346 b: refs/heads/master c: 3ff0121a704172aa4bca9c4026b419ddfe1921c8 h: refs/heads/master v: v3 --- [refs] | 2 +- .../isci/core/scic_sds_stp_remote_device.c | 25 ++++++++++++++++--- 2 files changed, 22 insertions(+), 5 deletions(-) diff --git a/[refs] b/[refs] index 332c7b3ffa9a..51635b083c98 100644 --- a/[refs] +++ b/[refs] @@ -1,2 +1,2 @@ --- -refs/heads/master: a8d4b9fe911c7d48f7a75c37eb1bfa3273547d97 +refs/heads/master: 3ff0121a704172aa4bca9c4026b419ddfe1921c8 diff --git a/trunk/drivers/scsi/isci/core/scic_sds_stp_remote_device.c b/trunk/drivers/scsi/isci/core/scic_sds_stp_remote_device.c index 1d8d9013068f..9a615f07cefe 100644 --- a/trunk/drivers/scsi/isci/core/scic_sds_stp_remote_device.c +++ b/trunk/drivers/scsi/isci/core/scic_sds_stp_remote_device.c @@ -367,10 +367,27 @@ static enum sci_status scic_sds_stp_remote_device_ready_ncq_substate_frame_handl ); if (status == SCI_SUCCESS) { - if ( - (frame_header->fis_type == SATA_FIS_TYPE_SETDEVBITS) - && (frame_header->status & ATA_STATUS_REG_ERROR_BIT) - ) { + if (frame_header->fis_type == SATA_FIS_TYPE_SETDEVBITS && + (frame_header->status & ATA_STATUS_REG_ERROR_BIT)) { + this_device->not_ready_reason = + SCIC_REMOTE_DEVICE_NOT_READY_SATA_SDB_ERROR_FIS_RECEIVED; + + /* + * / @todo Check sactive and complete associated IO + * if any. + */ + + sci_base_state_machine_change_state( + &this_device->ready_substate_machine, + SCIC_SDS_STP_REMOTE_DEVICE_READY_SUBSTATE_NCQ_ERROR + ); + } else if (frame_header->fis_type == SATA_FIS_TYPE_REGD2H && + (frame_header->status & ATA_STATUS_REG_ERROR_BIT)) { + + /* + * Some devices return D2H FIS when an NCQ error is detected. + * Treat this like an SDB error FIS ready reason. + */ this_device->not_ready_reason = SCIC_REMOTE_DEVICE_NOT_READY_SATA_SDB_ERROR_FIS_RECEIVED;