diff options
Diffstat (limited to 'drivers/scsi/qla2xxx/qla_isr.c')
-rw-r--r-- | drivers/scsi/qla2xxx/qla_isr.c | 15 |
1 files changed, 9 insertions, 6 deletions
diff --git a/drivers/scsi/qla2xxx/qla_isr.c b/drivers/scsi/qla2xxx/qla_isr.c index c8d0a176fea4..245e7afb4c4d 100644 --- a/drivers/scsi/qla2xxx/qla_isr.c +++ b/drivers/scsi/qla2xxx/qla_isr.c | |||
@@ -37,6 +37,7 @@ qla2100_intr_handler(int irq, void *dev_id) | |||
37 | uint16_t hccr; | 37 | uint16_t hccr; |
38 | uint16_t mb[4]; | 38 | uint16_t mb[4]; |
39 | struct rsp_que *rsp; | 39 | struct rsp_que *rsp; |
40 | unsigned long flags; | ||
40 | 41 | ||
41 | rsp = (struct rsp_que *) dev_id; | 42 | rsp = (struct rsp_que *) dev_id; |
42 | if (!rsp) { | 43 | if (!rsp) { |
@@ -49,7 +50,7 @@ qla2100_intr_handler(int irq, void *dev_id) | |||
49 | reg = &ha->iobase->isp; | 50 | reg = &ha->iobase->isp; |
50 | status = 0; | 51 | status = 0; |
51 | 52 | ||
52 | spin_lock(&ha->hardware_lock); | 53 | spin_lock_irqsave(&ha->hardware_lock, flags); |
53 | vha = pci_get_drvdata(ha->pdev); | 54 | vha = pci_get_drvdata(ha->pdev); |
54 | for (iter = 50; iter--; ) { | 55 | for (iter = 50; iter--; ) { |
55 | hccr = RD_REG_WORD(®->hccr); | 56 | hccr = RD_REG_WORD(®->hccr); |
@@ -101,7 +102,7 @@ qla2100_intr_handler(int irq, void *dev_id) | |||
101 | RD_REG_WORD(®->hccr); | 102 | RD_REG_WORD(®->hccr); |
102 | } | 103 | } |
103 | } | 104 | } |
104 | spin_unlock(&ha->hardware_lock); | 105 | spin_unlock_irqrestore(&ha->hardware_lock, flags); |
105 | 106 | ||
106 | if (test_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags) && | 107 | if (test_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags) && |
107 | (status & MBX_INTERRUPT) && ha->flags.mbox_int) { | 108 | (status & MBX_INTERRUPT) && ha->flags.mbox_int) { |
@@ -133,6 +134,7 @@ qla2300_intr_handler(int irq, void *dev_id) | |||
133 | uint16_t mb[4]; | 134 | uint16_t mb[4]; |
134 | struct rsp_que *rsp; | 135 | struct rsp_que *rsp; |
135 | struct qla_hw_data *ha; | 136 | struct qla_hw_data *ha; |
137 | unsigned long flags; | ||
136 | 138 | ||
137 | rsp = (struct rsp_que *) dev_id; | 139 | rsp = (struct rsp_que *) dev_id; |
138 | if (!rsp) { | 140 | if (!rsp) { |
@@ -145,7 +147,7 @@ qla2300_intr_handler(int irq, void *dev_id) | |||
145 | reg = &ha->iobase->isp; | 147 | reg = &ha->iobase->isp; |
146 | status = 0; | 148 | status = 0; |
147 | 149 | ||
148 | spin_lock(&ha->hardware_lock); | 150 | spin_lock_irqsave(&ha->hardware_lock, flags); |
149 | vha = pci_get_drvdata(ha->pdev); | 151 | vha = pci_get_drvdata(ha->pdev); |
150 | for (iter = 50; iter--; ) { | 152 | for (iter = 50; iter--; ) { |
151 | stat = RD_REG_DWORD(®->u.isp2300.host_status); | 153 | stat = RD_REG_DWORD(®->u.isp2300.host_status); |
@@ -216,7 +218,7 @@ qla2300_intr_handler(int irq, void *dev_id) | |||
216 | WRT_REG_WORD(®->hccr, HCCR_CLR_RISC_INT); | 218 | WRT_REG_WORD(®->hccr, HCCR_CLR_RISC_INT); |
217 | RD_REG_WORD_RELAXED(®->hccr); | 219 | RD_REG_WORD_RELAXED(®->hccr); |
218 | } | 220 | } |
219 | spin_unlock(&ha->hardware_lock); | 221 | spin_unlock_irqrestore(&ha->hardware_lock, flags); |
220 | 222 | ||
221 | if (test_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags) && | 223 | if (test_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags) && |
222 | (status & MBX_INTERRUPT) && ha->flags.mbox_int) { | 224 | (status & MBX_INTERRUPT) && ha->flags.mbox_int) { |
@@ -1626,6 +1628,7 @@ qla24xx_intr_handler(int irq, void *dev_id) | |||
1626 | uint32_t hccr; | 1628 | uint32_t hccr; |
1627 | uint16_t mb[4]; | 1629 | uint16_t mb[4]; |
1628 | struct rsp_que *rsp; | 1630 | struct rsp_que *rsp; |
1631 | unsigned long flags; | ||
1629 | 1632 | ||
1630 | rsp = (struct rsp_que *) dev_id; | 1633 | rsp = (struct rsp_que *) dev_id; |
1631 | if (!rsp) { | 1634 | if (!rsp) { |
@@ -1638,7 +1641,7 @@ qla24xx_intr_handler(int irq, void *dev_id) | |||
1638 | reg = &ha->iobase->isp24; | 1641 | reg = &ha->iobase->isp24; |
1639 | status = 0; | 1642 | status = 0; |
1640 | 1643 | ||
1641 | spin_lock(&ha->hardware_lock); | 1644 | spin_lock_irqsave(&ha->hardware_lock, flags); |
1642 | vha = pci_get_drvdata(ha->pdev); | 1645 | vha = pci_get_drvdata(ha->pdev); |
1643 | for (iter = 50; iter--; ) { | 1646 | for (iter = 50; iter--; ) { |
1644 | stat = RD_REG_DWORD(®->host_status); | 1647 | stat = RD_REG_DWORD(®->host_status); |
@@ -1688,7 +1691,7 @@ qla24xx_intr_handler(int irq, void *dev_id) | |||
1688 | WRT_REG_DWORD(®->hccr, HCCRX_CLR_RISC_INT); | 1691 | WRT_REG_DWORD(®->hccr, HCCRX_CLR_RISC_INT); |
1689 | RD_REG_DWORD_RELAXED(®->hccr); | 1692 | RD_REG_DWORD_RELAXED(®->hccr); |
1690 | } | 1693 | } |
1691 | spin_unlock(&ha->hardware_lock); | 1694 | spin_unlock_irqrestore(&ha->hardware_lock, flags); |
1692 | 1695 | ||
1693 | if (test_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags) && | 1696 | if (test_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags) && |
1694 | (status & MBX_INTERRUPT) && ha->flags.mbox_int) { | 1697 | (status & MBX_INTERRUPT) && ha->flags.mbox_int) { |