mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux.git
synced 2024-11-01 00:48:50 +00:00
scsi: lpfc: Stop adapter if pci errors detected
In a couple of cases, the driver detected a pci error (via pci device state or via failed register reads) but didn't take any action to disable the device. Additionally, the driver is ignoring the status of pci configuration space reads. Having the driver take the adapter offline whenever the pci error is detected. Pay attention to pci_config_space_read status and return failure if an error is seen. Signed-off-by: Dick Kennedy <dick.kennedy@broadcom.com> Signed-off-by: James Smart <jsmart2021@gmail.com> Signed-off-by: Martin K. Petersen <martin.petersen@oracle.com>
This commit is contained in:
parent
731eedcb31
commit
32a9310076
2 changed files with 15 additions and 3 deletions
|
@ -1844,8 +1844,12 @@ lpfc_handle_eratt_s4(struct lpfc_hba *phba)
|
|||
/* If the pci channel is offline, ignore possible errors, since
|
||||
* we cannot communicate with the pci card anyway.
|
||||
*/
|
||||
if (pci_channel_offline(phba->pcidev))
|
||||
if (pci_channel_offline(phba->pcidev)) {
|
||||
lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
|
||||
"3166 pci channel is offline\n");
|
||||
lpfc_sli4_offline_eratt(phba);
|
||||
return;
|
||||
}
|
||||
|
||||
memset(&portsmphr_reg, 0, sizeof(portsmphr_reg));
|
||||
if_type = bf_get(lpfc_sli_intf_if_type, &phba->sli4_hba.sli_intf);
|
||||
|
@ -1922,6 +1926,7 @@ lpfc_handle_eratt_s4(struct lpfc_hba *phba)
|
|||
lpfc_printf_log(phba, KERN_ERR, LOG_INIT,
|
||||
"3151 PCI bus read access failure: x%x\n",
|
||||
readl(phba->sli4_hba.u.if_type2.STATUSregaddr));
|
||||
lpfc_sli4_offline_eratt(phba);
|
||||
return;
|
||||
}
|
||||
reg_err1 = readl(phba->sli4_hba.u.if_type2.ERR1regaddr);
|
||||
|
|
|
@ -4487,7 +4487,9 @@ lpfc_sli_brdreset(struct lpfc_hba *phba)
|
|||
}
|
||||
|
||||
/* Turn off parity checking and serr during the physical reset */
|
||||
pci_read_config_word(phba->pcidev, PCI_COMMAND, &cfg_value);
|
||||
if (pci_read_config_word(phba->pcidev, PCI_COMMAND, &cfg_value))
|
||||
return -EIO;
|
||||
|
||||
pci_write_config_word(phba->pcidev, PCI_COMMAND,
|
||||
(cfg_value &
|
||||
~(PCI_COMMAND_PARITY | PCI_COMMAND_SERR)));
|
||||
|
@ -4564,7 +4566,12 @@ lpfc_sli4_brdreset(struct lpfc_hba *phba)
|
|||
"0389 Performing PCI function reset!\n");
|
||||
|
||||
/* Turn off parity checking and serr during the physical reset */
|
||||
pci_read_config_word(phba->pcidev, PCI_COMMAND, &cfg_value);
|
||||
if (pci_read_config_word(phba->pcidev, PCI_COMMAND, &cfg_value)) {
|
||||
lpfc_printf_log(phba, KERN_INFO, LOG_INIT,
|
||||
"3205 PCI read Config failed\n");
|
||||
return -EIO;
|
||||
}
|
||||
|
||||
pci_write_config_word(phba->pcidev, PCI_COMMAND, (cfg_value &
|
||||
~(PCI_COMMAND_PARITY | PCI_COMMAND_SERR)));
|
||||
|
||||
|
|
Loading…
Reference in a new issue