hc_copy = readl(phba->HCregaddr);
        writel((hc_copy & ~HC_ERINT_ENA), phba->HCregaddr);
        readl(phba->HCregaddr); /* flush */
+       phba->fc_flag |= FC_IGNORE_ERATT;
 
        if (readl(phba->HAregaddr) & HA_ERATT) {
                /* Clear Chip error bit */
        }
 
 restore_hc:
+       phba->fc_flag &= ~FC_IGNORE_ERATT;
        writel(hc_copy, phba->HCregaddr);
        readl(phba->HCregaddr); /* flush */
 }
        status &= ~HC_ERINT_ENA;
        writel(status, phba->HCregaddr);
        readl(phba->HCregaddr); /* flush */
+       phba->fc_flag |= FC_IGNORE_ERATT;
        spin_unlock_irq(phba->host->host_lock);
 
        lpfc_kill_board(phba, pmb);
        if (retval != MBX_SUCCESS) {
                if (retval != MBX_BUSY)
                        mempool_free(pmb, phba->mbox_mem_pool);
+               spin_lock_irq(phba->host->host_lock);
+               phba->fc_flag &= ~FC_IGNORE_ERATT;
+               spin_unlock_irq(phba->host->host_lock);
                return 1;
        }
 
        }
        spin_lock_irq(phba->host->host_lock);
        psli->sli_flag &= ~LPFC_SLI_MBOX_ACTIVE;
+       phba->fc_flag &= ~FC_IGNORE_ERATT;
        spin_unlock_irq(phba->host->host_lock);
 
        psli->mbox_active = NULL;
         */
        spin_lock(phba->host->host_lock);
        ha_copy = readl(phba->HAregaddr);
+       /* If somebody is waiting to handle an eratt don't process it
+        * here.  The brdkill function will do this.
+        */
+       if (phba->fc_flag & FC_IGNORE_ERATT)
+               ha_copy &= ~HA_ERATT;
        writel((ha_copy & ~(HA_LATT | HA_ERATT)), phba->HAregaddr);
        readl(phba->HAregaddr); /* flush */
        spin_unlock(phba->host->host_lock);