diff mbox

[07/11] Fix crash after firmware flash when IO is running.

Message ID 20170616055651.9674-8-jsmart2021@gmail.com (mailing list archive)
State Accepted
Headers show

Commit Message

James Smart June 16, 2017, 5:56 a.m. UTC
OS crashes after the completion of firmware download.

Failure in posting SCSI SGL buffers because number of SGL buffers
is less than total count. Some of the pending IOs are not completed
by driver. SGL buffers for these IOs are not added back to the list.
Pending IOs are not completed because lpfc_wq_list list is
initialized before completion of pending IOs.

Postpone lpfc_wq_list reinitialization by moving
lpfc_sli4_queue_destroy() after lpfc_hba_down_post().

Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
Signed-off-by: James Smart <james.smart@broadcom.com>
---
 drivers/scsi/lpfc/lpfc_sli.c | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

Comments

Hannes Reinecke June 16, 2017, 8:01 a.m. UTC | #1
On 06/16/2017 07:56 AM, James Smart wrote:
> OS crashes after the completion of firmware download.
> 
> Failure in posting SCSI SGL buffers because number of SGL buffers
> is less than total count. Some of the pending IOs are not completed
> by driver. SGL buffers for these IOs are not added back to the list.
> Pending IOs are not completed because lpfc_wq_list list is
> initialized before completion of pending IOs.
> 
> Postpone lpfc_wq_list reinitialization by moving
> lpfc_sli4_queue_destroy() after lpfc_hba_down_post().
> 
> Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com>
> Signed-off-by: James Smart <james.smart@broadcom.com>
> ---
>  drivers/scsi/lpfc/lpfc_sli.c | 2 +-
>  1 file changed, 1 insertion(+), 1 deletion(-)
> 
> diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
> index 4f2cc395597e..8de70b9d79dd 100644
> --- a/drivers/scsi/lpfc/lpfc_sli.c
> +++ b/drivers/scsi/lpfc/lpfc_sli.c
> @@ -4303,7 +4303,6 @@ lpfc_sli4_brdreset(struct lpfc_hba *phba)
>  
>  	/* Perform FCoE PCI function reset before freeing queue memory */
>  	rc = lpfc_pci_function_reset(phba);
> -	lpfc_sli4_queue_destroy(phba);
>  
>  	/* Restore PCI cmd register */
>  	pci_write_config_word(phba->pcidev, PCI_COMMAND, cfg_value);
> @@ -4428,6 +4427,7 @@ lpfc_sli_brdrestart_s4(struct lpfc_hba *phba)
>  		pci_disable_pcie_error_reporting(phba->pcidev);
>  
>  	lpfc_hba_down_post(phba);
> +	lpfc_sli4_queue_destroy(phba);
>  
>  	return rc;
>  }
> 
Reviewed-by: Hannes Reinecke <hare@suse.com>

Cheers,

Hannes
diff mbox

Patch

diff --git a/drivers/scsi/lpfc/lpfc_sli.c b/drivers/scsi/lpfc/lpfc_sli.c
index 4f2cc395597e..8de70b9d79dd 100644
--- a/drivers/scsi/lpfc/lpfc_sli.c
+++ b/drivers/scsi/lpfc/lpfc_sli.c
@@ -4303,7 +4303,6 @@  lpfc_sli4_brdreset(struct lpfc_hba *phba)
 
 	/* Perform FCoE PCI function reset before freeing queue memory */
 	rc = lpfc_pci_function_reset(phba);
-	lpfc_sli4_queue_destroy(phba);
 
 	/* Restore PCI cmd register */
 	pci_write_config_word(phba->pcidev, PCI_COMMAND, cfg_value);
@@ -4428,6 +4427,7 @@  lpfc_sli_brdrestart_s4(struct lpfc_hba *phba)
 		pci_disable_pcie_error_reporting(phba->pcidev);
 
 	lpfc_hba_down_post(phba);
+	lpfc_sli4_queue_destroy(phba);
 
 	return rc;
 }