diff options
author | James Smart <James.Smart@Emulex.Com> | 2009-10-02 15:17:02 -0400 |
---|---|---|
committer | James Bottomley <James.Bottomley@suse.de> | 2009-12-04 13:01:42 -0500 |
commit | 45ed119035b27f240345b06e090d559874e3677a (patch) | |
tree | 14466c52a644d73ea90f30b885cfe4e3fc88d12e /drivers/scsi/lpfc/lpfc_init.c | |
parent | 0d87841997125971b7a39d21d1435054f91884c3 (diff) |
[SCSI] lpfc 8.3.5: fix fcp command polling, add FIP mode, performance optimisations and devloss timout fixes
This patch includes the following changes:
- Fixed Panic/Hang when using polling mode for fcp commands
- Added support for Read_rev mbox bits indicating FIP mode of HBA
- Optimize performance of slow-path handling of els responses
- Add code to cleanup orphaned unsolicited receive sequences
- Fixed Devloss timeout when multiple initiators are in same zone
Signed-off-by: James Smart <james.smart@emulex.com>
Signed-off-by: James Bottomley <James.Bottomley@suse.de>
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_init.c')
-rw-r--r-- | drivers/scsi/lpfc/lpfc_init.c | 11 |
1 files changed, 9 insertions, 2 deletions
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c index 61925836a09e..d7385d258f78 100644 --- a/drivers/scsi/lpfc/lpfc_init.c +++ b/drivers/scsi/lpfc/lpfc_init.c | |||
@@ -853,12 +853,19 @@ lpfc_hb_mbox_cmpl(struct lpfc_hba * phba, LPFC_MBOXQ_t * pmboxq) | |||
853 | void | 853 | void |
854 | lpfc_hb_timeout_handler(struct lpfc_hba *phba) | 854 | lpfc_hb_timeout_handler(struct lpfc_hba *phba) |
855 | { | 855 | { |
856 | struct lpfc_vport **vports; | ||
856 | LPFC_MBOXQ_t *pmboxq; | 857 | LPFC_MBOXQ_t *pmboxq; |
857 | struct lpfc_dmabuf *buf_ptr; | 858 | struct lpfc_dmabuf *buf_ptr; |
858 | int retval; | 859 | int retval, i; |
859 | struct lpfc_sli *psli = &phba->sli; | 860 | struct lpfc_sli *psli = &phba->sli; |
860 | LIST_HEAD(completions); | 861 | LIST_HEAD(completions); |
861 | 862 | ||
863 | vports = lpfc_create_vport_work_array(phba); | ||
864 | if (vports != NULL) | ||
865 | for (i = 0; i <= phba->max_vports && vports[i] != NULL; i++) | ||
866 | lpfc_rcv_seq_check_edtov(vports[i]); | ||
867 | lpfc_destroy_vport_work_array(phba, vports); | ||
868 | |||
862 | if ((phba->link_state == LPFC_HBA_ERROR) || | 869 | if ((phba->link_state == LPFC_HBA_ERROR) || |
863 | (phba->pport->load_flag & FC_UNLOADING) || | 870 | (phba->pport->load_flag & FC_UNLOADING) || |
864 | (phba->pport->fc_flag & FC_OFFLINE_MODE)) | 871 | (phba->pport->fc_flag & FC_OFFLINE_MODE)) |
@@ -3519,7 +3526,7 @@ lpfc_sli4_driver_resource_setup(struct lpfc_hba *phba) | |||
3519 | /* Driver internel slow-path CQ Event pool */ | 3526 | /* Driver internel slow-path CQ Event pool */ |
3520 | INIT_LIST_HEAD(&phba->sli4_hba.sp_cqe_event_pool); | 3527 | INIT_LIST_HEAD(&phba->sli4_hba.sp_cqe_event_pool); |
3521 | /* Response IOCB work queue list */ | 3528 | /* Response IOCB work queue list */ |
3522 | INIT_LIST_HEAD(&phba->sli4_hba.sp_rspiocb_work_queue); | 3529 | INIT_LIST_HEAD(&phba->sli4_hba.sp_queue_event); |
3523 | /* Asynchronous event CQ Event work queue list */ | 3530 | /* Asynchronous event CQ Event work queue list */ |
3524 | INIT_LIST_HEAD(&phba->sli4_hba.sp_asynce_work_queue); | 3531 | INIT_LIST_HEAD(&phba->sli4_hba.sp_asynce_work_queue); |
3525 | /* Fast-path XRI aborted CQ Event work queue list */ | 3532 | /* Fast-path XRI aborted CQ Event work queue list */ |