From: Vaios Papadimitriou Date: Tue, 8 May 2012 22:01:27 +0000 (-0500) Subject: Fixed SLI4 driver module load and unload test in a loop crashes the system (CR 126397) X-Git-Tag: v2.6.39-400.9.0~423^2~123^2~6 X-Git-Url: https://www.infradead.org/git/?a=commitdiff_plain;h=1d2e58a0b08f95e37f82e1415f399483b4f768da;p=users%2Fjedix%2Flinux-maple.git Fixed SLI4 driver module load and unload test in a loop crashes the system (CR 126397) Loading/unloading the lpfc driver overnight when an LPe16000 sees multiple targets can result in a kernel panic. This is because the board was not correctly being reset, now correctly clear the Status register so the proper reset is done. commit id: 8fcb8acd6cb1529c596c274a6d375cbe9a134dcb Signed-off-by: Maxim Uvarov --- diff --git a/drivers/scsi/lpfc/lpfc_init.c b/drivers/scsi/lpfc/lpfc_init.c index aa79d00b4567..602d3e610f7d 100644 --- a/drivers/scsi/lpfc/lpfc_init.c +++ b/drivers/scsi/lpfc/lpfc_init.c @@ -5793,10 +5793,9 @@ lpfc_sli4_post_status_check(struct lpfc_hba *phba) readl(phba->sli4_hba.u.if_type2. ERR2regaddr); lpfc_printf_log(phba, KERN_ERR, LOG_INIT, - "2888 Port Error Detected " - "during POST: " - "port status reg 0x%x, " - "port_smphr reg 0x%x, " + "2888 Unrecoverable port error " + "following POST: port status reg " + "0x%x, port_smphr reg 0x%x, " "error 1=0x%x, error 2=0x%x\n", reg_data.word0, portsmphr_reg.word0, @@ -7251,7 +7250,8 @@ lpfc_pci_function_reset(struct lpfc_hba *phba) LPFC_SLIPORT_INIT_PORT); writel(reg_data.word0, phba->sli4_hba.u.if_type2. CTRLregaddr); - + /* flush */ + readl(phba->sli4_hba.u.if_type2.STATUSregaddr); /* * Poll the Port Status Register and wait for RDY for * up to 10 seconds. If the port doesn't respond, treat @@ -7289,11 +7289,10 @@ lpfc_pci_function_reset(struct lpfc_hba *phba) phba->work_status[1] = readl( phba->sli4_hba.u.if_type2.ERR2regaddr); lpfc_printf_log(phba, KERN_ERR, LOG_INIT, - "2890 Port Error Detected " - "during Port Reset: " - "port status reg 0x%x, " + "2890 Port error detected during port " + "reset(%d): port status reg 0x%x, " "error 1=0x%x, error 2=0x%x\n", - reg_data.word0, + num_resets, reg_data.word0, phba->work_status[0], phba->work_status[1]); rc = -ENODEV;