diff options
author | Dan Williams <dan.j.williams@intel.com> | 2011-02-18 12:25:11 -0500 |
---|---|---|
committer | Dan Williams <dan.j.williams@intel.com> | 2011-07-03 06:55:27 -0400 |
commit | 92f4f0f544a6a75979bace0c43fee9c4fb95830c (patch) | |
tree | bf1c8d9e4fff6af6004b4e5bd1dc17b2f299911e /drivers/scsi/isci/host.c | |
parent | 77950f51f5299c1b4f4fa4a19974128da720d199 (diff) |
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 7f351a35e87b..cb2e3f9558e9 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) | |||
85 | if (scic_sds_controller_isr(scic)) { | 85 | if (scic_sds_controller_isr(scic)) { |
86 | tasklet_schedule(&ihost->completion_tasklet); | 86 | tasklet_schedule(&ihost->completion_tasklet); |
87 | ret = IRQ_HANDLED; | 87 | ret = IRQ_HANDLED; |
88 | } else if (scic_sds_controller_error_isr(scic)) { | ||
89 | spin_lock(&ihost->scic_lock); | ||
90 | scic_sds_controller_error_handler(scic); | ||
91 | spin_unlock(&ihost->scic_lock); | ||
92 | ret = IRQ_HANDLED; | ||
88 | } | 93 | } |
89 | } | 94 | } |
95 | |||
90 | return ret; | 96 | return ret; |
91 | } | 97 | } |
92 | 98 | ||
99 | irqreturn_t isci_error_isr(int vec, void *data) | ||
100 | { | ||
101 | struct isci_host *ihost = data; | ||
102 | struct scic_sds_controller *scic = ihost->core_controller; | ||
103 | |||
104 | if (scic_sds_controller_error_isr(scic)) | ||
105 | scic_sds_controller_error_handler(scic); | ||
106 | |||
107 | return IRQ_HANDLED; | ||
108 | } | ||
93 | 109 | ||
94 | /** | 110 | /** |
95 | * isci_host_start_complete() - This function is called by the core library, | 111 | * isci_host_start_complete() - This function is called by the core library, |