diff options
Diffstat (limited to 'drivers/scsi/lpfc/lpfc_init.c')
| -rw-r--r-- | drivers/scsi/lpfc/lpfc_init.c | 14 |
1 files changed, 11 insertions, 3 deletions
diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c index d4da6bdd0e73..b8eb1b6e5e77 100644 --- a/drivers/scsi/lpfc/lpfc_init.c +++ b/drivers/scsi/lpfc/lpfc_init.c | |||
| @@ -3006,6 +3006,7 @@ lpfc_sli4_async_fcoe_evt(struct lpfc_hba *phba, | |||
| 3006 | struct lpfc_vport *vport; | 3006 | struct lpfc_vport *vport; |
| 3007 | struct lpfc_nodelist *ndlp; | 3007 | struct lpfc_nodelist *ndlp; |
| 3008 | struct Scsi_Host *shost; | 3008 | struct Scsi_Host *shost; |
| 3009 | uint32_t link_state; | ||
| 3009 | 3010 | ||
| 3010 | phba->fc_eventTag = acqe_fcoe->event_tag; | 3011 | phba->fc_eventTag = acqe_fcoe->event_tag; |
| 3011 | phba->fcoe_eventtag = acqe_fcoe->event_tag; | 3012 | phba->fcoe_eventtag = acqe_fcoe->event_tag; |
| @@ -3052,9 +3053,12 @@ lpfc_sli4_async_fcoe_evt(struct lpfc_hba *phba, | |||
| 3052 | break; | 3053 | break; |
| 3053 | /* | 3054 | /* |
| 3054 | * Currently, driver support only one FCF - so treat this as | 3055 | * Currently, driver support only one FCF - so treat this as |
| 3055 | * a link down. | 3056 | * a link down, but save the link state because we don't want |
| 3057 | * it to be changed to Link Down unless it is already down. | ||
| 3056 | */ | 3058 | */ |
| 3059 | link_state = phba->link_state; | ||
| 3057 | lpfc_linkdown(phba); | 3060 | lpfc_linkdown(phba); |
| 3061 | phba->link_state = link_state; | ||
| 3058 | /* Unregister FCF if no devices connected to it */ | 3062 | /* Unregister FCF if no devices connected to it */ |
| 3059 | lpfc_unregister_unused_fcf(phba); | 3063 | lpfc_unregister_unused_fcf(phba); |
| 3060 | break; | 3064 | break; |
| @@ -7226,8 +7230,6 @@ lpfc_prep_dev_for_perm_failure(struct lpfc_hba *phba) | |||
| 7226 | { | 7230 | { |
| 7227 | lpfc_printf_log(phba, KERN_ERR, LOG_INIT, | 7231 | lpfc_printf_log(phba, KERN_ERR, LOG_INIT, |
| 7228 | "2711 PCI channel permanent disable for failure\n"); | 7232 | "2711 PCI channel permanent disable for failure\n"); |
| 7229 | /* Block all SCSI devices' I/Os on the host */ | ||
| 7230 | lpfc_scsi_dev_block(phba); | ||
| 7231 | /* Clean up all driver's outstanding SCSI I/Os */ | 7233 | /* Clean up all driver's outstanding SCSI I/Os */ |
| 7232 | lpfc_sli_flush_fcp_rings(phba); | 7234 | lpfc_sli_flush_fcp_rings(phba); |
| 7233 | } | 7235 | } |
| @@ -7256,6 +7258,9 @@ lpfc_io_error_detected_s3(struct pci_dev *pdev, pci_channel_state_t state) | |||
| 7256 | struct Scsi_Host *shost = pci_get_drvdata(pdev); | 7258 | struct Scsi_Host *shost = pci_get_drvdata(pdev); |
| 7257 | struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba; | 7259 | struct lpfc_hba *phba = ((struct lpfc_vport *)shost->hostdata)->phba; |
| 7258 | 7260 | ||
| 7261 | /* Block all SCSI devices' I/Os on the host */ | ||
| 7262 | lpfc_scsi_dev_block(phba); | ||
| 7263 | |||
| 7259 | switch (state) { | 7264 | switch (state) { |
| 7260 | case pci_channel_io_normal: | 7265 | case pci_channel_io_normal: |
| 7261 | /* Non-fatal error, prepare for recovery */ | 7266 | /* Non-fatal error, prepare for recovery */ |
| @@ -7507,6 +7512,9 @@ lpfc_pci_probe_one_s4(struct pci_dev *pdev, const struct pci_device_id *pid) | |||
| 7507 | error = -ENODEV; | 7512 | error = -ENODEV; |
| 7508 | goto out_free_sysfs_attr; | 7513 | goto out_free_sysfs_attr; |
| 7509 | } | 7514 | } |
| 7515 | /* Default to single FCP EQ for non-MSI-X */ | ||
| 7516 | if (phba->intr_type != MSIX) | ||
| 7517 | phba->cfg_fcp_eq_count = 1; | ||
| 7510 | /* Set up SLI-4 HBA */ | 7518 | /* Set up SLI-4 HBA */ |
| 7511 | if (lpfc_sli4_hba_setup(phba)) { | 7519 | if (lpfc_sli4_hba_setup(phba)) { |
| 7512 | lpfc_printf_log(phba, KERN_ERR, LOG_INIT, | 7520 | lpfc_printf_log(phba, KERN_ERR, LOG_INIT, |
