[SCSI] megaraid_sas: Clear state change interrupts
authoradam radford <aradford@gmail.com>
Sun, 9 Oct 2011 01:14:50 +0000 (18:14 -0700)
committerJames Bottomley <JBottomley@Parallels.com>
Sun, 16 Oct 2011 16:20:05 +0000 (11:20 -0500)
Signed-off-by: Adam Radford <aradford@gmail.com>
Signed-off-by: James Bottomley <JBottomley@Parallels.com>
drivers/scsi/megaraid/megaraid_sas_fusion.c

index 52f6a158477a966b69cbdfc350fa7798eae41d9a..ec2e097f773750f97b716c014c8fe2fd6a7b845b 100644 (file)
@@ -101,6 +101,10 @@ extern u32 megasas_dbg_lvl;
 void
 megasas_enable_intr_fusion(struct megasas_register_set __iomem *regs)
 {
+       /* For Thunderbolt/Invader also clear intr on enable */
+       writel(~0, &regs->outbound_intr_status);
+       readl(&regs->outbound_intr_status);
+
        writel(~MFI_FUSION_ENABLE_INTERRUPT_MASK, &(regs)->outbound_intr_mask);
 
        /* Dummy readl to force pci flush */
@@ -1806,10 +1810,13 @@ irqreturn_t megasas_isr_fusion(int irq, void *devp)
        }
 
        /* If we are resetting, bail */
-       if (test_bit(MEGASAS_FUSION_IN_RESET, &instance->reset_flags))
+       if (test_bit(MEGASAS_FUSION_IN_RESET, &instance->reset_flags)) {
+               instance->instancet->clear_intr(instance->reg_set);
                return IRQ_HANDLED;
+       }
 
        if (!complete_cmd_fusion(instance)) {
+               instance->instancet->clear_intr(instance->reg_set);
                /* If we didn't complete any commands, check for FW fault */
                fw_state = instance->instancet->read_fw_status_reg(
                        instance->reg_set) & MFI_STATE_MASK;