PCIE那些事之AER高级信息上报

2023-12-26 21:40
文章标签 高级 信息 上报 pcie aer

本文主要是介绍PCIE那些事之AER高级信息上报,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

本文总结了AER错误处理流程
在这里插入图片描述

什么是AER

AER 英文简称 Advanced Error Reporting 翻译中文是高级错误报告,是PCIE异常信息处理机制,用于报告PCIe 错误信息
错误信息主要分为两种 Correctable Errors 和Uncorrectable errors
其中 Correctable Errors包含非致命的错误和致命的错误
a.ERR_FATAL:致命错误,此错误类型影响了PCIe link链路。
b.ERR_NONFATAL:指影响了设备功能,但是PCIe link还是稳定的
Correctable Errors:可纠正错误是指错误发生后,硬件可以自动恢复。
Uncorrectable errors:错误发生后,影响设备功能,硬件不能自动恢复。

AER信息类型

如下列表所述,注意如果是链路出现了错误需要需要Upstream设备向Root来报告错误进行重新训练

在这里插入图片描述
AER错误需要EP和RC端同时打开才能使用
这些错误信息可以通过设备控制器进行使能或者禁止
在这里插入图片描述

设备可以通过设备状态寄存器查询AER探测状态
在这里插入图片描述
RC寄存器中可以控制是否enable AER功能
在这里插入图片描述

AER机制原理

ERROR Message通过port端口上报给Root Complex 最后通过中断方式通知CPU进行处理
在这里插入图片描述
PCIe Correctable Errors处理流程
AER Driver同时获取RC和EP的错误状态信息, 此时Errors已经被物理层或者数据链路层给修复,AER仅仅获取错误的状态
在这里插入图片描述

PCIE Uncorrectable errors处理流程
AER可以同时获取RC和EP的状态,并行recovery强制热复位修复,复位会重新训练链路,影响系统数据的传输
在这里插入图片描述

linux AER处理流程

在这里插入图片描述

linux内核通过aerdrv.c进行驱动管理,分为驱动层drv.c和核心层core.c
在这里插入图片描述

系统运行的时候会注册aerdriver设备驱动驱动,AER注册成功需要支持以下2个条件
1.kernel中需要开启AER功能配置
2.需要支持MSI中断

static int __init aer_service_init(void)
{if (!pci_aer_available() || aer_acpi_firmware_first())return -ENXIO;return pcie_port_service_register(&aerdriver);
}
device_initcall(aer_service_init);

aerdriver是设备驱动结构体

static struct pcie_port_service_driver aerdriver = {.name		= "aer",.port_type	= PCI_EXP_TYPE_ROOT_PORT,.service	= PCIE_PORT_SERVICE_AER,.probe		= aer_probe,.remove		= aer_remove,.error_resume	= aer_error_resume,.reset_link	= aer_root_reset,
};

调用aer_probe 填充pcie_dev资源,注册中断进行aer错误收集与处理,使能root aer功能

static int aer_probe(struct pcie_device *dev)
{int status;struct aer_rpc *rpc;struct device *device = &dev->port->dev;/* Alloc rpc data structure */rpc = aer_alloc_rpc(dev);if (!rpc) 

这篇关于PCIE那些事之AER高级信息上报的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/540868

相关文章

一文详解如何使用Java获取PDF页面信息

《一文详解如何使用Java获取PDF页面信息》了解PDF页面属性是我们在处理文档、内容提取、打印设置或页面重组等任务时不可或缺的一环,下面我们就来看看如何使用Java语言获取这些信息吧... 目录引言一、安装和引入PDF处理库引入依赖二、获取 PDF 页数三、获取页面尺寸(宽高)四、获取页面旋转角度五、判断

Java中读取YAML文件配置信息常见问题及解决方法

《Java中读取YAML文件配置信息常见问题及解决方法》:本文主要介绍Java中读取YAML文件配置信息常见问题及解决方法,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要... 目录1 使用Spring Boot的@ConfigurationProperties2. 使用@Valu

Python中你不知道的gzip高级用法分享

《Python中你不知道的gzip高级用法分享》在当今大数据时代,数据存储和传输成本已成为每个开发者必须考虑的问题,Python内置的gzip模块提供了一种简单高效的解决方案,下面小编就来和大家详细讲... 目录前言:为什么数据压缩如此重要1. gzip 模块基础介绍2. 基本压缩与解压缩操作2.1 压缩文

Java中的for循环高级用法

《Java中的for循环高级用法》本文系统解析Java中传统、增强型for循环、StreamAPI及并行流的实现原理与性能差异,并通过大量代码示例展示实际开发中的最佳实践,感兴趣的朋友一起看看吧... 目录前言一、基础篇:传统for循环1.1 标准语法结构1.2 典型应用场景二、进阶篇:增强型for循环2.

使用Python进行GRPC和Dubbo协议的高级测试

《使用Python进行GRPC和Dubbo协议的高级测试》GRPC(GoogleRemoteProcedureCall)是一种高性能、开源的远程过程调用(RPC)框架,Dubbo是一种高性能的分布式服... 目录01 GRPC测试安装gRPC编写.proto文件实现服务02 Dubbo测试1. 安装Dubb

Apache 高级配置实战之从连接保持到日志分析的完整指南

《Apache高级配置实战之从连接保持到日志分析的完整指南》本文带你从连接保持优化开始,一路走到访问控制和日志管理,最后用AWStats来分析网站数据,对Apache配置日志分析相关知识感兴趣的朋友... 目录Apache 高级配置实战:从连接保持到日志分析的完整指南前言 一、Apache 连接保持 - 性

Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法

《Linux查看系统盘和SSD盘的容量、型号及挂载信息的方法》在Linux系统中,管理磁盘设备和分区是日常运维工作的重要部分,而lsblk命令是一个强大的工具,它用于列出系统中的块设备(blockde... 目录1. 查看所有磁盘的物理信息方法 1:使用 lsblk(推荐)方法 2:使用 fdisk -l(

SpringBoot如何对密码等敏感信息进行脱敏处理

《SpringBoot如何对密码等敏感信息进行脱敏处理》这篇文章主要为大家详细介绍了SpringBoot对密码等敏感信息进行脱敏处理的几个常用方法,文中的示例代码讲解详细,感兴趣的小伙伴可以了解下... 目录​1. 配置文件敏感信息脱敏​​2. 日志脱敏​​3. API响应脱敏​​4. 其他注意事项​​总结

mysql中的group by高级用法详解

《mysql中的groupby高级用法详解》MySQL中的GROUPBY是数据聚合分析的核心功能,主要用于将结果集按指定列分组,并结合聚合函数进行统计计算,本文给大家介绍mysql中的groupby... 目录一、基本语法与核心功能二、基础用法示例1. 单列分组统计2. 多列组合分组3. 与WHERE结合使

PyTorch高级特性与性能优化方式

《PyTorch高级特性与性能优化方式》:本文主要介绍PyTorch高级特性与性能优化方式,具有很好的参考价值,希望对大家有所帮助,如有错误或未考虑完全的地方,望不吝赐教... 目录一、自动化机制1.自动微分机制2.动态计算图二、性能优化1.内存管理2.GPU加速3.多GPU训练三、分布式训练1.分布式数据