资源描述:
《aer及其linux内核的支持》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、AER及其Linux内核的支持开放系统世界为了提供Linux内核对AER的支持,本文实现了aerdriver~,--系列的错误恢复机制.当任意类型的PCIExpress错误发生时,内核都可以捕获它,并根据需要对相应的设备自动进行恢复处理,使上层模块和应用不受影响.AER及其Linux内核的支持PCIExpress~E为一种崭新的总线技术,正在得到广泛应用.PCIExpress架构提供了丰富的错误检测,报告和日志功能,有力地提高了计算机的可靠陛.作为PCIExpress独有技术,AER(高级错误报告)实现了一种灵活的错误报告机制.目前,笔者实现了aerdriver,MM(Andre
2、wMortontree)已经接受所有提交到Linux社区的aerdnver补丁,预计将会加入到2.6.19内核中.PCIExpress错误报告机制1.兼窖PCI的错误报告机制传统的PCI设备提供了很简单的错误机制,即PERR#和SERR撑.PERR撑是数据奇偶校验错,SERR撑是严重系统错.所有的非PERR撑错误都被划人到SERR撑.PCI使用两根独立的信号线分别表示PERR撑和SER.这些信号线连接到具体的计算机平台,芯片,至于最后如何报告给软件内核,不同的计算机平台,芯片提供不同的方法.所有的PCIExpress设备必须支持现存的错误处理软件(一般嵌入在设备驱动程序里),即使
3、这些软件意识不到PCIExpress.为了满足上述要求,PCIEx-press设备需要把PCIExpress错误类型映射到PCI的错误类型,即PERR#和SERR#.2.PCl基本错误报告机制定义了最低限度的错误报告机制.所有的PClExpress设备必须支持这些基本的错误报告机制.PCIExpress把错误分成两种类型,可校正的错误和不可校正的错误.可校正是指硬件可以自动校正,否则就是不可校正.可校正的错误会影响系统性能,同时可校正的错误频繁发生往往预示着以后会发生不可校正的错误.不可校正错误又细分为致命错误和非致命错误.致命错误会导致相关的PCIExpress链接和相关的硬件
4、不可靠.一般隋况下,系统需要对相关的硬件重新设置.非致命错误不会导致PCIExpress链接不可靠,但会导致相关的事务出错.■张衍民马雯一般系统不需要对相关的硬件重新设置.PCIExpress设备有一组基本的PCIExpress配置寄存器,其中设备控制寄存器和设备状态寄存器提供了基本错误报告机制.但对于计算机平台,芯片如何通知到内核软件,基本错误报告机制并未明确规定.PClExpress是基于消息和包交换的通信机制,所有的错误都是通过消息传递的.3.PCIExpressAER机制AER提供了更加可靠的错误报告机制.除了提供如同基本错误报告机制的错误分类外,AER又对错误进行了更加
5、细致的区分.可校正错误细分为建议非致命错误,中继时钟超时错误,中继号超出错误,:b~TLP错误,坏DLLP错误和接收方错误.PCIExpress的可校正错误状态配置寄存器记录了这些错误状态.此外,PCIExpress的可校正错误屏蔽配置寄存器可以屏蔽相应的错误状态位.屏蔽表示当该种错误发生时,设备不向根端口(rootport)发送错10OPENSOURCEWORLDMONTHLY452006.1O开源pens.urcec.mmunity.莓曼……./.…..误报告消息,但仍对可校正错误状态配置寄存器的相应状态位进行设置.不可校正错误细分为不支持的请求错误,ECRC错误,有毒TLP
6、错误,畸形TLP错误及流控制错误等.PCIExpress不可校正错误状态配置寄存器记录了这些错误状态.此外,PCIExpress不可校正错误屏蔽配置寄存器可以屏蔽相应的错误状态位.不可校正错误严重级别配置寄存器可对某种错误是否为致命错误进行设置.头日志寄存器保存了TLP数据报的头部信息.如果发生的错误与TLP相关,则软件可以查看设备的头日志寄存器,取得相关的数据包头.AER一个重要功能就是提供利用中断向软件报告的机制.根端口设备可以提供根错误命令和状态寄存器,内核可以对其进行设置和察看.所有PCIExpress设备都通过一定的路径链接到相应的根端口.当一个PCIExpress发生
7、错误时,会向上游的根端口发送错误报告消息,根端口收到后设置相应的根错误状态寄存器标志位,把出错设备的设备号记录在错误源标识寄存器,然后向CPU发送中断,以便内核实时处理错误.为什么实现PCIExpressAER当错误发生时,AER根端口46开放系统傲2006.10设备可以发送中断通知内核,所以内核应该提供驱动程序响应中断,处理出错的设备.;i~Linux2.6.18内核以前,内核没有根端口AER服务驱动程序.一般BIoS提供基本的错误处理机制,但不能协调相关设备,以得到更详细的错