diff options
author | Dan Williams <dan.j.williams@intel.com> | 2011-02-18 17:25:11 (GMT) |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2011-07-03 10:55:27 (GMT) |
commit | 92f4f0f544a6a75979bace0c43fee9c4fb95830c (patch) | |
tree | bf1c8d9e4fff6af6004b4e5bd1dc17b2f299911e /drivers/scsi/isci/host.c | |
parent | 77950f51f5299c1b4f4fa4a19974128da720d199 (diff) | |
download | linux-fsl-qoriq-92f4f0f544a6a75979bace0c43fee9c4fb95830c.tar.xz |
isci: implement error isr
Add basic support for handling/reporting error interrupts.
Signed-off-by: Dan Williams <dan.j.williams@intel.com>
Diffstat (limited to 'drivers/scsi/isci/host.c')
-rw-r--r-- | drivers/scsi/isci/host.c | 16 |
1 files changed, 16 insertions, 0 deletions
diff --git a/drivers/scsi/isci/host.c b/drivers/scsi/isci/host.c index 7f351a3..cb2e3f9 100644 --- a/drivers/scsi/isci/host.c +++ b/drivers/scsi/isci/host.c @@ -85,11 +85,27 @@ irqreturn_t isci_intx_isr(int vec, void *data) if (scic_sds_controller_isr(scic)) { tasklet_schedule(&ihost->completion_tasklet); ret = IRQ_HANDLED; + } else if (scic_sds_controller_error_isr(scic)) { + spin_lock(&ihost->scic_lock); + scic_sds_controller_error_handler(scic); + spin_unlock(&ihost->scic_lock); + ret = IRQ_HANDLED; } } + return ret; } +irqreturn_t isci_error_isr(int vec, void *data) +{ + struct isci_host *ihost = data; + struct scic_sds_controller *scic = ihost->core_controller; + + if (scic_sds_controller_error_isr(scic)) + scic_sds_controller_error_handler(scic); + + return IRQ_HANDLED; +} /** * isci_host_start_complete() - This function is called by the core library, |