Skip to contentSkip to conversation

aic94xx: plumb in I_T_nexus_reset task management function

PATCH In review James Bottomley 2 participants 3 messages Feb 24, 2008 SCSI

lore
Share & tools
lore

James Bottomley

author maintainer
#0 lore raw

PATCH 2/5 aic94xx: plumb in I_T_nexus_reset task management function

Currently aic94xx has no exported I_T_nexus_reset function. This is a bit of a huge problem, since sas_ata relies on this function to perform an ATA phy reset and also it means that if abort fails, we really have no bigger hammer to hit everything with.

Plumb in the I_T_nexus_reset by quiescing the sequencer, sending the correct phy reset (link for ATA and hard for SAS) and then carefully resuming the sequencer again.

---
 drivers/scsi/aic94xx/aic94xx.h      |    1 +
 drivers/scsi/aic94xx/aic94xx_init.c |    2 +-
 drivers/scsi/aic94xx/aic94xx_tmf.c  |   58 ++++++++++++++++++++++++++++++++--
 3 files changed, 56 insertions(+), 5 deletions(-)
drivers/scsi/aic94xx/aic94xx.h +1 -0
index 32f513b..eb8efdc 100644
@@ -102,6 +102,7 @@ int  asd_abort_task_set(struct domain_device *, u8 *lun);
 int  asd_clear_aca(struct domain_device *, u8 *lun);
 int  asd_clear_task_set(struct domain_device *, u8 *lun);
 int  asd_lu_reset(struct domain_device *, u8 *lun);
+int  asd_I_T_nexus_reset(struct domain_device *dev);
 int  asd_query_task(struct sas_task *);
 
 /* ---------- Adapter and Port management ---------- */
drivers/scsi/aic94xx/aic94xx_init.c +1 -1
index 5d761eb..88d1e73 100644
@@ -1003,7 +1003,7 @@ static struct sas_domain_function_template aic94xx_transport_functions = {
 	.lldd_abort_task_set	= asd_abort_task_set,
 	.lldd_clear_aca		= asd_clear_aca,
 	.lldd_clear_task_set	= asd_clear_task_set,
-	.lldd_I_T_nexus_reset	= NULL,
+	.lldd_I_T_nexus_reset	= asd_I_T_nexus_reset,
 	.lldd_lu_reset		= asd_lu_reset,
 	.lldd_query_task	= asd_query_task,
 
drivers/scsi/aic94xx/aic94xx_tmf.c +54 -4

74 lines not on this page · raw message

Signature · 1 line
1.5.4.1
#1 lore raw
Quoted 9 lines · James Bottomley

Currently aic94xx has no exported I_T_nexus_reset function. This is a bit of a huge problem, since sas_ata relies on this function to perform an ATA phy reset and also it means that if abort fails, we really have no bigger hammer to hit everything with.

Plumb in the I_T_nexus_reset by quiescing the sequencer, sending the correct phy reset (link for ATA and hard for SAS) and then carefully resuming the sequencer again.

Quoted 6 lines
---
 drivers/scsi/aic94xx/aic94xx.h      |    1 +
 drivers/scsi/aic94xx/aic94xx_init.c |    2 +-
 drivers/scsi/aic94xx/aic94xx_tmf.c  |   58 ++++++++++++++++++++++++++++++++--
 3 files changed, 56 insertions(+), 5 deletions(-)

Tangent:

Now that patches for ipr and sata_sx4 exist, libsas is the last holdout using libata's old error handling paths.

I think Darrick was either scoping that work, or had preliminary patches?

Anyway, that's holding back removal of a lot of libata code, so I wanted to make sure the issue remained in people's minds...

Jeff

author maintainer
#2 lore raw
Quoted 9 lines · Jeff Garzik

Tangent:

Now that patches for ipr and sata_sx4 exist, libsas is the last holdout using libata's old error handling paths.

I think Darrick was either scoping that work, or had preliminary patches?

Anyway, that's holding back removal of a lot of libata code, so I wanted to make sure the issue remained in people's minds...

I've not really been following what the issue actually is, so hopefully Darrick has.

At the moment, we don't use any of libata for error handling in libsas. (In fact, there's a big issue with ATA error handling in libsas in general, since the sequencer abort task doesn't know what to do with a task that's at an ATA drive ... we need to detect that condition and then apply the SATL abort function, which depends on whether we're NCQ or not...SATA error handling was next on my list of things to look at).

James