aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/scsi/lpfc/lpfc_init.c
diff options
context:
space:
mode:
authorJames Smart <James.Smart@Emulex.Com>2006-03-07 15:04:13 -0500
committerJames Bottomley <jejb@mulgrave.il.steeleye.com>2006-03-12 09:56:58 -0500
commit9290831f00879d4a66d3bffb609949d5ea5576fb (patch)
treef66748c875962518f9d4784fd684e189feb50d84 /drivers/scsi/lpfc/lpfc_init.c
parent1a169689c2152ea599c94d622204f7bf5b7dc09f (diff)
[SCSI] lpfc 8.1.4 : Introduce lpfc_reset_barrier() function for resets on dual channel adapters
Introduce lpfc_reset_barrier() function for resets on dual channel adapters Workaround for a hardware errata on dual channel asics. There is a potential for the chip to lock up on a reset if a shared dma engine is in use. The (ugly) work around requires a reset process which uses a mailbox command to synchronize the independent channels prior to the reset to avoid the issue. Unfortunately, the timing windows required to ensure this workaround succeeds are very specific, meaning we can't release the cpu during the barrier. Signed-off-by: James Smart <James.Smart@emulex.com> Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_init.c')
-rw-r--r--drivers/scsi/lpfc/lpfc_init.c4
1 files changed, 2 insertions, 2 deletions
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c
index a2e15436730e..66d5d003555d 100644
--- a/drivers/scsi/lpfc/lpfc_init.c
+++ b/drivers/scsi/lpfc/lpfc_init.c
@@ -464,8 +464,6 @@ lpfc_hba_down_prep(struct lpfc_hba * phba)
464 lpfc_els_flush_cmd(phba); 464 lpfc_els_flush_cmd(phba);
465 lpfc_disc_flush_list(phba); 465 lpfc_disc_flush_list(phba);
466 466
467 /* Disable SLI2 since we disabled interrupts */
468 phba->sli.sli_flag &= ~LPFC_SLI2_ACTIVE;
469 return (0); 467 return (0);
470} 468}
471 469
@@ -526,6 +524,7 @@ lpfc_handle_eratt(struct lpfc_hba * phba)
526 phba->work_status[0], phba->work_status[1]); 524 phba->work_status[0], phba->work_status[1]);
527 spin_lock_irq(phba->host->host_lock); 525 spin_lock_irq(phba->host->host_lock);
528 phba->fc_flag |= FC_ESTABLISH_LINK; 526 phba->fc_flag |= FC_ESTABLISH_LINK;
527 psli->sli_flag &= ~LPFC_SLI2_ACTIVE;
529 spin_unlock_irq(phba->host->host_lock); 528 spin_unlock_irq(phba->host->host_lock);
530 529
531 /* 530 /*
@@ -559,6 +558,7 @@ lpfc_handle_eratt(struct lpfc_hba * phba)
559 phba->brd_no, phba->work_hs, 558 phba->brd_no, phba->work_hs,
560 phba->work_status[0], phba->work_status[1]); 559 phba->work_status[0], phba->work_status[1]);
561 560
561 psli->sli_flag &= ~LPFC_SLI2_ACTIVE;
562 lpfc_offline(phba); 562 lpfc_offline(phba);
563 phba->hba_state = LPFC_HBA_ERROR; 563 phba->hba_state = LPFC_HBA_ERROR;
564 lpfc_hba_down_post(phba); 564 lpfc_hba_down_post(phba);