mirror of
https://git.kernel.org/pub/scm/linux/kernel/git/herbert/cryptodev-2.6.git
synced 2026-04-18 03:23:53 -04:00
PCI/AER: Report CXL or PCIe bus type in AER trace logging
The AER service driver and aer_event tracing currently log 'PCIe Bus Type' for all errors. Update the driver and aer_event tracing to log 'CXL Bus Type' for CXL device errors. This requires that AER can identify and distinguish between PCIe errors and CXL errors. Introduce boolean 'is_cxl' to 'struct aer_err_info'. Add assignment in aer_get_device_error_info() and pci_print_aer(). Update the aer_event trace routine to accept a bus type string parameter. Signed-off-by: Terry Bowman <terry.bowman@amd.com> Co-developed-by: Dan Williams <dan.j.williams@intel.com> Acked-by: Bjorn Helgaas <bhelgaas@google.com> Reviewed-by: Dave Jiang <dave.jiang@intel.com> Reviewed-by: Jonathan Cameron <jonathan.cameron@huawei.com> Link: https://patch.msgid.link/20260114182055.46029-15-terry.bowman@amd.com Signed-off-by: Dan Williams <dan.j.williams@intel.com> Signed-off-by: Dave Jiang <dave.jiang@intel.com>
This commit is contained in:
@@ -870,6 +870,7 @@ void aer_print_error(struct aer_err_info *info, int i)
|
||||
struct pci_dev *dev;
|
||||
int layer, agent, id;
|
||||
const char *level = info->level;
|
||||
const char *bus_type = aer_err_bus(info);
|
||||
|
||||
if (WARN_ON_ONCE(i >= AER_MAX_MULTI_ERR_DEVICES))
|
||||
return;
|
||||
@@ -879,22 +880,22 @@ void aer_print_error(struct aer_err_info *info, int i)
|
||||
|
||||
pci_dev_aer_stats_incr(dev, info);
|
||||
trace_aer_event(pci_name(dev), (info->status & ~info->mask),
|
||||
info->severity, info->tlp_header_valid, &info->tlp);
|
||||
info->severity, info->tlp_header_valid, &info->tlp, bus_type);
|
||||
|
||||
if (!info->ratelimit_print[i])
|
||||
return;
|
||||
|
||||
if (!info->status) {
|
||||
pci_err(dev, "PCIe Bus Error: severity=%s, type=Inaccessible, (Unregistered Agent ID)\n",
|
||||
aer_error_severity_string[info->severity]);
|
||||
pci_err(dev, "%s Bus Error: severity=%s, type=Inaccessible, (Unregistered Agent ID)\n",
|
||||
bus_type, aer_error_severity_string[info->severity]);
|
||||
goto out;
|
||||
}
|
||||
|
||||
layer = AER_GET_LAYER_ERROR(info->severity, info->status);
|
||||
agent = AER_GET_AGENT(info->severity, info->status);
|
||||
|
||||
aer_printk(level, dev, "PCIe Bus Error: severity=%s, type=%s, (%s)\n",
|
||||
aer_error_severity_string[info->severity],
|
||||
aer_printk(level, dev, "%s Bus Error: severity=%s, type=%s, (%s)\n",
|
||||
bus_type, aer_error_severity_string[info->severity],
|
||||
aer_error_layer[layer], aer_agent_string[agent]);
|
||||
|
||||
aer_printk(level, dev, " device [%04x:%04x] error status/mask=%08x/%08x\n",
|
||||
@@ -928,6 +929,7 @@ EXPORT_SYMBOL_GPL(cper_severity_to_aer);
|
||||
void pci_print_aer(struct pci_dev *dev, int aer_severity,
|
||||
struct aer_capability_regs *aer)
|
||||
{
|
||||
const char *bus_type;
|
||||
int layer, agent, tlp_header_valid = 0;
|
||||
u32 status, mask;
|
||||
struct aer_err_info info = {
|
||||
@@ -948,10 +950,13 @@ void pci_print_aer(struct pci_dev *dev, int aer_severity,
|
||||
|
||||
info.status = status;
|
||||
info.mask = mask;
|
||||
info.is_cxl = pcie_is_cxl(dev);
|
||||
|
||||
bus_type = aer_err_bus(&info);
|
||||
|
||||
pci_dev_aer_stats_incr(dev, &info);
|
||||
trace_aer_event(pci_name(dev), (status & ~mask),
|
||||
aer_severity, tlp_header_valid, &aer->header_log);
|
||||
trace_aer_event(pci_name(dev), (status & ~mask), aer_severity,
|
||||
tlp_header_valid, &aer->header_log, bus_type);
|
||||
|
||||
if (!aer_ratelimit(dev, info.severity))
|
||||
return;
|
||||
@@ -1306,6 +1311,7 @@ int aer_get_device_error_info(struct aer_err_info *info, int i)
|
||||
/* Must reset in this function */
|
||||
info->status = 0;
|
||||
info->tlp_header_valid = 0;
|
||||
info->is_cxl = pcie_is_cxl(dev);
|
||||
|
||||
/* The device might not support AER */
|
||||
if (!aer)
|
||||
|
||||
Reference in New Issue
Block a user