Hi I think spin_lock_irqsave/spin_unlock_irqrestore instead of spin_lock_irq/spin_unlock_irq should be used in IRQ handler. Following is the patch that fixes this issue. Thanks. Signed-off-by :Hisashi Hifumi <hifumi.hisashi@xxxxxxxxxxxxx> diff -Nrup linux-2.6.30-rc1.org/drivers/scsi/qla2xxx/qla_isr.c linux-2.6.30-rc1.qla/drivers/scsi/qla2xxx/qla_isr.c --- linux-2.6.30-rc1.org/drivers/scsi/qla2xxx/qla_isr.c 2009-04-09 17:18:06.000000000 +0900 +++ linux-2.6.30-rc1.qla/drivers/scsi/qla2xxx/qla_isr.c 2009-04-13 18:21:02.000000000 +0900 @@ -1692,6 +1692,7 @@ qla24xx_msix_rsp_q(int irq, void *dev_id struct qla_hw_data *ha; struct rsp_que *rsp; struct device_reg_24xx __iomem *reg; + unsigned long flags; rsp = (struct rsp_que *) dev_id; if (!rsp) { @@ -1702,12 +1703,12 @@ qla24xx_msix_rsp_q(int irq, void *dev_id ha = rsp->hw; reg = &ha->iobase->isp24; - spin_lock_irq(&ha->hardware_lock); + spin_lock_irqsave(&ha->hardware_lock, flags); qla24xx_process_response_queue(rsp); WRT_REG_DWORD(®->hccr, HCCRX_CLR_RISC_INT); - spin_unlock_irq(&ha->hardware_lock); + spin_unlock_irqrestore(&ha->hardware_lock, flags); return IRQ_HANDLED; } @@ -1718,6 +1719,7 @@ qla25xx_msix_rsp_q(int irq, void *dev_id struct qla_hw_data *ha; struct rsp_que *rsp; struct device_reg_24xx __iomem *reg; + unsigned long flags; rsp = (struct rsp_que *) dev_id; if (!rsp) { @@ -1728,11 +1730,11 @@ qla25xx_msix_rsp_q(int irq, void *dev_id ha = rsp->hw; reg = &ha->iobase->isp24; - spin_lock_irq(&ha->hardware_lock); + spin_lock_irqsave(&ha->hardware_lock, flags); qla24xx_process_response_queue(rsp); - spin_unlock_irq(&ha->hardware_lock); + spin_unlock_irqrestore(&ha->hardware_lock, flags); return IRQ_HANDLED; } @@ -1748,6 +1750,7 @@ qla24xx_msix_default(int irq, void *dev_ uint32_t stat; uint32_t hccr; uint16_t mb[4]; + unsigned long flags; rsp = (struct rsp_que *) dev_id; if (!rsp) { @@ -1759,7 +1762,7 @@ qla24xx_msix_default(int irq, void *dev_ reg = &ha->iobase->isp24; status = 0; - spin_lock_irq(&ha->hardware_lock); + spin_lock_irqsave(&ha->hardware_lock, flags); vha = qla2x00_get_rsp_host(rsp); do { stat = RD_REG_DWORD(®->host_status); @@ -1808,7 +1811,7 @@ qla24xx_msix_default(int irq, void *dev_ } WRT_REG_DWORD(®->hccr, HCCRX_CLR_RISC_INT); } while (0); - spin_unlock_irq(&ha->hardware_lock); + spin_unlock_irqrestore(&ha->hardware_lock, flags); if (test_bit(MBX_INTR_WAIT, &ha->mbx_cmd_flags) && (status & MBX_INTERRUPT) && ha->flags.mbox_int) { -- To unsubscribe from this list: send the line "unsubscribe linux-scsi" in the body of a message to majordomo@xxxxxxxxxxxxxxx More majordomo info at http://vger.kernel.org/majordomo-info.html