James/Linux-scsi, The following patch for megaraid_sas will clear state change interrupts. Signed-off-by: Adam Radford <aradford@xxxxxxxxx> diff -Naur scsi-misc-2.6/drivers/scsi/megaraid/megaraid_sas_fusion.c scsi-misc-2.6.new/drivers/scsi/megaraid/megaraid_sas_fusion.c --- scsi-misc-2.6/drivers/scsi/megaraid/megaraid_sas_fusion.c 2011-10-07 19:13:13.460237034 -0700 +++ scsi-misc-2.6.new/drivers/scsi/megaraid/megaraid_sas_fusion.c 2011-10-07 19:14:43.424174966 -0700 @@ -101,6 +101,10 @@ void megasas_enable_intr_fusion(struct megasas_register_set __iomem *regs) { + /* For Thunderbolt/Invader also clear intr on enable */ + writel(~0, ®s->outbound_intr_status); + readl(®s->outbound_intr_status); + writel(~MFI_FUSION_ENABLE_INTERRUPT_MASK, &(regs)->outbound_intr_mask); /* Dummy readl to force pci flush */ @@ -1806,10 +1810,13 @@ } /* 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;
Attachment:
megaraid_sas.patch5
Description: Binary data