PCI/AER: Rationalize error status register clearing

commit 894020fdd8 upstream.

Conflicts:
  - Minor refractor due to code differences, Thanks to Katrin
  - Introduce an compact helper in include/linux/aer
    Too many 3rd part modules depend on this symbol, it can break
    easily later if we drop in some other modules, so use a
    function as alias. We may make is a GPL_SYMBOL later.

The AER interfaces to clear error status registers were a confusing mess:

	- pci_cleanup_aer_uncorrect_error_status() cleared non-fatal errors
	from the Uncorrectable Error Status register.

	- pci_aer_clear_fatal_status() cleared fatal errors from the
	Uncorrectable Error Status register.

	- pci_cleanup_aer_error_status_regs() cleared the Root Error Status
	register (for Root Ports), the Uncorrectable Error Status register,
	and the Correctable Error Status register.

Rename them to make them consistent:

	From                                     To
	---------------------------------------- -------------------------------
	pci_cleanup_aer_uncorrect_error_status() pci_aer_clear_nonfatal_status()
	pci_aer_clear_fatal_status()             pci_aer_clear_fatal_status()
	pci_cleanup_aer_error_status_regs()      pci_aer_clear_status()

Since pci_cleanup_aer_error_status_regs() (renamed to
pci_aer_clear_status()) is only used within drivers/pci/, move the
declaration from <linux/aer.h> to drivers/pci/pci.h.

[bhelgaas: commit log, add renames]
Link: https://lore.kernel.org/r/d1310a75dc3d28f7e8da4e99c45fbd3e60fe238e.1585000084.git.sathyanarayanan.kuppuswamy@linux.intel.com
Signed-off-by: Kuppuswamy Sathyanarayanan <sathyanarayanan.kuppuswamy@linux.intel.com>
Signed-off-by: Bjorn Helgaas <bhelgaas@google.com>
Signed-off-by: Kairui Song <kasong@tencent.com>
Signed-off-by: Xinghui Li <korantli@tencent.com>
This commit is contained in:
Kairui Song 2020-03-23 17:26:08 -07:00 committed by Jianping Liu
parent f56e7268ba
commit 49b91dfd06
10 changed files with 29 additions and 24 deletions

View File

@ -232,9 +232,9 @@ messages to root port when an error is detected.
::
int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev);`
int pci_aer_clear_nonfatal_status(struct pci_dev *dev);`
pci_cleanup_aer_uncorrect_error_status cleanups the uncorrectable
pci_aer_clear_nonfatal_status clears non-fatal errors in the uncorrectable
error status register.
Frequent Asked Questions

View File

@ -6601,7 +6601,7 @@ static pci_ers_result_t ice_pci_err_slot_reset(struct pci_dev *pdev)
err = pci_aer_clear_nonfatal_status(pdev);
if (err)
dev_dbg(&pdev->dev, "pci_aer_clear_nonfatal_status failed, error %d\n",
dev_dbg(&pdev->dev, "pci_aer_clear_nonfatal_status() failed, error %d\n",
err);
/* non-fatal, continue */

View File

@ -2674,8 +2674,8 @@ static int idt_init_pci(struct idt_ntb_dev *ndev)
ret = pci_enable_pcie_error_reporting(pdev);
if (ret != 0)
dev_warn(&pdev->dev, "PCIe AER capability disabled\n");
else /* Cleanup uncorrectable error status before getting to init */
pci_cleanup_aer_uncorrect_error_status(pdev);
else /* Cleanup nonfatal error status before getting to init */
pci_aer_clear_nonfatal_status(pdev);
/* First enable the PCI device */
ret = pcim_enable_device(pdev);

View File

@ -1472,7 +1472,7 @@ void pci_restore_state(struct pci_dev *dev)
pci_restore_rebar_state(dev);
pci_restore_dpc_state(dev);
pci_cleanup_aer_error_status_regs(dev);
pci_aer_clear_status(dev);
pci_restore_aer_state(dev);
pci_restore_config_space(dev);

View File

@ -670,12 +670,14 @@ void pci_aer_exit(struct pci_dev *dev);
extern const struct attribute_group aer_stats_attr_group;
void pci_aer_clear_fatal_status(struct pci_dev *dev);
void pci_aer_clear_device_status(struct pci_dev *dev);
int pci_aer_clear_status(struct pci_dev *dev);
#else
static inline void pci_no_aer(void) { }
static inline void pci_aer_init(struct pci_dev *d) { }
static inline void pci_aer_exit(struct pci_dev *d) { }
static inline void pci_aer_clear_fatal_status(struct pci_dev *dev) { }
static inline void pci_aer_clear_device_status(struct pci_dev *dev) { }
static inline int pci_aer_clear_status(struct pci_dev *dev) { return -EINVAL; }
#endif
#ifdef CONFIG_ACPI

View File

@ -377,7 +377,7 @@ void pci_aer_clear_device_status(struct pci_dev *dev)
pcie_capability_write_word(dev, PCI_EXP_DEVSTA, sta);
}
int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev)
int pci_aer_clear_nonfatal_status(struct pci_dev *dev)
{
int pos;
u32 status, sev;
@ -398,7 +398,7 @@ int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev)
return 0;
}
EXPORT_SYMBOL_GPL(pci_cleanup_aer_uncorrect_error_status);
EXPORT_SYMBOL_GPL(pci_aer_clear_nonfatal_status);
void pci_aer_clear_fatal_status(struct pci_dev *dev)
{
@ -420,7 +420,7 @@ void pci_aer_clear_fatal_status(struct pci_dev *dev)
pci_write_config_dword(dev, pos + PCI_ERR_UNCOR_STATUS, status);
}
int pci_cleanup_aer_error_status_regs(struct pci_dev *dev)
int pci_aer_clear_status(struct pci_dev *dev)
{
int pos;
u32 status;
@ -516,7 +516,7 @@ void pci_aer_init(struct pci_dev *dev)
n = pcie_cap_has_rtctl(dev) ? 5 : 4;
pci_add_ext_cap_save_buffer(dev, PCI_EXT_CAP_ID_ERR, sizeof(u32) * n);
pci_cleanup_aer_error_status_regs(dev);
pci_aer_clear_status(dev);
}
void pci_aer_exit(struct pci_dev *dev)

View File

@ -221,7 +221,7 @@ void dpc_process_error(struct pci_dev *pdev)
dpc_get_aer_uncorrect_severity(pdev, &info) &&
aer_get_device_error_info(pdev, &info)) {
aer_print_error(pdev, &info);
pci_cleanup_aer_uncorrect_error_status(pdev);
pci_aer_clear_nonfatal_status(pdev);
pci_aer_clear_fatal_status(pdev);
}
}

View File

@ -197,7 +197,7 @@ void pcie_do_recovery(struct pci_dev *dev,
pci_walk_bus(bus, report_resume, &status);
pci_aer_clear_device_status(dev);
pci_cleanup_aer_uncorrect_error_status(dev);
pci_aer_clear_nonfatal_status(dev);
pci_info(dev, "AER: Device recovery successful\n");
return;

View File

@ -5028,7 +5028,7 @@ static DEVICE_ATTR(lpfc_aer_support, S_IRUGO | S_IWUSR,
* Description:
* If the @buf contains 1 and the device currently has the AER support
* enabled, then invokes the kernel AER helper routine
* pci_aer_clear_nonfatal_status to clean up the uncorrectable error
* pci_aer_clear_nonfatal_status() to clean up the uncorrectable
* status register.
*
* Notes:
@ -5054,11 +5054,7 @@ lpfc_aer_cleanup_state(struct device *dev, struct device_attribute *attr,
return -EINVAL;
if (phba->hba_flag & HBA_AER_ENABLED)
#if defined(BUILD_SLES15SP2) || defined(BUILD_RHEL83)
rc = pci_aer_clear_nonfatal_status(phba->pcidev);
#else
rc = pci_cleanup_aer_uncorrect_error_status(phba->pcidev);
#endif
if (rc == 0)
return strlen(buf);

View File

@ -44,8 +44,7 @@ struct aer_capability_regs {
/* PCIe port driver needs this function to enable AER */
int pci_enable_pcie_error_reporting(struct pci_dev *dev);
int pci_disable_pcie_error_reporting(struct pci_dev *dev);
int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev);
int pci_cleanup_aer_error_status_regs(struct pci_dev *dev);
int pci_aer_clear_nonfatal_status(struct pci_dev *dev);
void pci_save_aer_state(struct pci_dev *dev);
void pci_restore_aer_state(struct pci_dev *dev);
#else
@ -57,11 +56,7 @@ static inline int pci_disable_pcie_error_reporting(struct pci_dev *dev)
{
return -EINVAL;
}
static inline int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev)
{
return -EINVAL;
}
static inline int pci_cleanup_aer_error_status_regs(struct pci_dev *dev)
static inline int pci_aer_clear_nonfatal_status(struct pci_dev *dev)
{
return -EINVAL;
}
@ -74,5 +69,17 @@ void cper_print_aer(struct pci_dev *dev, int aer_severity,
int cper_severity_to_aer(int cper_severity);
void aer_recover_queue(int domain, unsigned int bus, unsigned int devfn,
int severity, struct aer_capability_regs *aer_regs);
/*
* TK4: For compact reason, an alias for pci_cleanup_aer_uncorrect_error_status
* to pci_aer_clear_nonfatal_status is added here. Since many modules really
* expects an 5.4 kernel to have pci_cleanup_aer_uncorrect_error_status, this
* is useful as a compact layer.
*/
static inline int pci_cleanup_aer_uncorrect_error_status(struct pci_dev *dev)
{
return pci_aer_clear_nonfatal_status(dev);
}
#endif //_AER_H_