提交 87f27015 编写于 作者: A Andrew Vasquez 提交者: James Bottomley

[SCSI] qla2xxx: Rework MSI-X handlers.

Since MSI-X vectors do not require a clearing "handshake" from
the system perspective, and the registered handler will not be
called more than once for one occurrence of receipt of a vector,
there is no requirement to flush the risc register write clearing
the interrupt condition in the risc. Also, since the msi-x
registered handlers are optimised for a particular vector, it is
preferable to handle the one vector received per invocation of
the handler.
Signed-off-by: NAndrew Vasquez <andrew.vasquez@qlogic.com>
Signed-off-by: NJames Bottomley <James.Bottomley@SteelEye.com>
上级 8b3253d1
...@@ -1679,7 +1679,6 @@ qla24xx_msix_rsp_q(int irq, void *dev_id) ...@@ -1679,7 +1679,6 @@ qla24xx_msix_rsp_q(int irq, void *dev_id)
qla24xx_process_response_queue(ha); qla24xx_process_response_queue(ha);
WRT_REG_DWORD(&reg->hccr, HCCRX_CLR_RISC_INT); WRT_REG_DWORD(&reg->hccr, HCCRX_CLR_RISC_INT);
RD_REG_DWORD_RELAXED(&reg->hccr);
spin_unlock_irqrestore(&ha->hardware_lock, flags); spin_unlock_irqrestore(&ha->hardware_lock, flags);
...@@ -1693,7 +1692,6 @@ qla24xx_msix_default(int irq, void *dev_id) ...@@ -1693,7 +1692,6 @@ qla24xx_msix_default(int irq, void *dev_id)
struct device_reg_24xx __iomem *reg; struct device_reg_24xx __iomem *reg;
int status; int status;
unsigned long flags; unsigned long flags;
unsigned long iter;
uint32_t stat; uint32_t stat;
uint32_t hccr; uint32_t hccr;
uint16_t mb[4]; uint16_t mb[4];
...@@ -1703,7 +1701,7 @@ qla24xx_msix_default(int irq, void *dev_id) ...@@ -1703,7 +1701,7 @@ qla24xx_msix_default(int irq, void *dev_id)
status = 0; status = 0;
spin_lock_irqsave(&ha->hardware_lock, flags); spin_lock_irqsave(&ha->hardware_lock, flags);
for (iter = 50; iter--; ) { do {
stat = RD_REG_DWORD(&reg->host_status); stat = RD_REG_DWORD(&reg->host_status);
if (stat & HSRX_RISC_PAUSED) { if (stat & HSRX_RISC_PAUSED) {
if (pci_channel_offline(ha->pdev)) if (pci_channel_offline(ha->pdev))
...@@ -1748,8 +1746,7 @@ qla24xx_msix_default(int irq, void *dev_id) ...@@ -1748,8 +1746,7 @@ qla24xx_msix_default(int irq, void *dev_id)
break; break;
} }
WRT_REG_DWORD(&reg->hccr, HCCRX_CLR_RISC_INT); WRT_REG_DWORD(&reg->hccr, HCCRX_CLR_RISC_INT);
RD_REG_DWORD_RELAXED(&reg->hccr); } while (0);
}
spin_unlock_irqrestore(&ha->hardware_lock, flags); spin_unlock_irqrestore(&ha->hardware_lock, flags);
if (test_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags) && if (test_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags) &&
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册