AER及其Linux内核的支持.doc_第1页
AER及其Linux内核的支持.doc_第2页
AER及其Linux内核的支持.doc_第3页
AER及其Linux内核的支持.doc_第4页
AER及其Linux内核的支持.doc_第5页
已阅读5页,还剩12页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

AER及其Linux内核的支持开放系统世界为了提供Linux内核对AER的支持,本文实现了aerdriver,-系列的错误恢复机制.当任意类型的PCIExpress错误发生时,内核都可以捕获它,并根据需要对相应的设备自动进行恢复处理,使上层模块和应用不受影响.AER及其Linux内核的支持PCIExpressE为一种崭新的总线技术,正在得到广泛应用.PCIExpress架构提供了丰富的错误检测,报告和日志功能,有力地提高了计算机的可靠陛.作为PCIExpress独有技术,AER(高级错误报告)实现了一种灵活的错误报告机制.目前,笔者实现了aerdriver,MM(AndrewMortontree)已经接受所有提交到Linux社区的aerdnver补丁,预计将会加入到2.6.19内核中.PCIExpress错误报告机制1.兼窖PCI的错误报告机制传统的PCI设备提供了很简单的错误机制,即PERR#和SERR撑.PERR撑是数据奇偶校验错,SERR撑是严重系统错.所有的非PERR撑错误都被划人到SERR撑.PCI使用两根独立的信号线分别表示PERR撑和SER.这些信号线连接到具体的计算机平台,芯片,至于最后如何报告给软件内核,不同的计算机平台,芯片提供不同的方法.所有的PCIExpress设备必须支持现存的错误处理软件(一般嵌入在设备驱动程序里),即使这些软件意识不到PCIExpress.为了满足上述要求,PCIEx-press设备需要把PCIExpress错误类型映射到PCI的错误类型,即PERR#和SERR#.2.PCl基本错误报告机制定义了最低限度的错误报告机制.所有的PClExpress设备必须支持这些基本的错误报告机制.PCIExpress把错误分成两种类型,可校正的错误和不可校正的错误.可校正是指硬件可以自动校正,否则就是不可校正.可校正的错误会影响系统性能,同时可校正的错误频繁发生往往预示着以后会发生不可校正的错误.不可校正错误又细分为致命错误和非致命错误.致命错误会导致相关的PCIExpress链接和相关的硬件不可靠.一般隋况下,系统需要对相关的硬件重新设置.非致命错误不会导致PCIExpress链接不可靠,但会导致相关的事务出错.张衍民马雯一般系统不需要对相关的硬件重新设置.PCIExpress设备有一组基本的PCIExpress配置寄存器,其中设备控制寄存器和设备状态寄存器提供了基本错误报告机制.但对于计算机平台,芯片如何通知到内核软件,基本错误报告机制并未明确规定.PClExpress是基于消息和包交换的通信机制,所有的错误都是通过消息传递的.3.PCIExpressAER机制AER提供了更加可靠的错误报告机制.除了提供如同基本错误报告机制的错误分类外,AER又对错误进行了更加细致的区分.可校正错误细分为建议非致命错误,中继时钟超时错误,中继号超出错误,:bTLP错误,坏DLLP错误和接收方错误.PCIExpress的可校正错误状态配置寄存器记录了这些错误状态.此外,PCIExpress的可校正错误屏蔽配置寄存器可以屏蔽相应的错误状态位.屏蔽表示当该种错误发生时,设备不向根端口(rootport)发送错10OPENSOURCEWORLDMONTHLY452006.1O开源pens.urcec.mmunity.莓曼./.误报告消息,但仍对可校正错误状态配置寄存器的相应状态位进行设置.不可校正错误细分为不支持的请求错误,ECRC错误,有毒TLP错误,畸形TLP错误及流控制错误等.PCIExpress不可校正错误状态配置寄存器记录了这些错误状态.此外,PCIExpress不可校正错误屏蔽配置寄存器可以屏蔽相应的错误状态位.不可校正错误严重级别配置寄存器可对某种错误是否为致命错误进行设置.头日志寄存器保存了TLP数据报的头部信息.如果发生的错误与TLP相关,则软件可以查看设备的头日志寄存器,取得相关的数据包头.AER一个重要功能就是提供利用中断向软件报告的机制.根端口设备可以提供根错误命令和状态寄存器,内核可以对其进行设置和察看.所有PCIExpress设备都通过一定的路径链接到相应的根端口.当一个PCIExpress发生错误时,会向上游的根端口发送错误报告消息,根端口收到后设置相应的根错误状态寄存器标志位,把出错设备的设备号记录在错误源标识寄存器,然后向CPU发送中断,以便内核实时处理错误.为什么实现PCIExpressAER当错误发生时,AER根端口46开放系统傲2006.10设备可以发送中断通知内核,所以内核应该提供驱动程序响应中断,处理出错的设备.;iLinux2.6.18内核以前,内核没有根端口AER服务驱动程序.一般BIoS提供基本的错误处理机制,但不能协调相关设备,以得到更详细的错误信息,更不能自动重新设置设备以恢复操作.PCIExpressAER驱动程序可以提供相应的机制,使内核和应用程序判断所发生的错误是否为致命错误,协调并通知所有相关设备的驱动程序,执行动态错误恢复操作,保证系统的正常运行.在内核中实现AER1.PCIExpresstill口服务程序内核提供了端口服务程序.当系统启动时,如果一个PCIExPress根端口设备支持AER,内核会创建相应的PCIExpress虚拟设备.aerdriver就是AER根端口服务驱动程序,会自动绑定所有的PCIExpressAER虚拟设备.2.注册IRQ处理程序系统会给根端口配置一个(或通过MSI提供多个)中断号.aerdriver的probe函数会向内核申请注册IF处理函数.每当根端口收到来自其下游的PCIExpress设备的错误报告时,都会向CPU发送中断,内核就会调用AERIF处理函数.3.创建WorkerWorker是内核提供的一种中断处理机制,以便在进程上下文中处理中断.aerdriver为每一个AER虚拟设备注册一个Worker.当AER中断到达时,相应的Worker就会被调度执行.因为aerdriver行错误恢复时有可能睡眠,所以必须借助Worker到进程上下文中处理中断.4.关闭SERR撑报告功能SERR撑是为了与PCI的错误处理机制兼容,并与AER并行.如果打开AER,就应关闭SERR撑.根端口的根控制寄存器的起始三位控制这一功能,直接将其清零即可.5.检查并获取错误设备及其状态根端口的错误源标识寄存器纪录最初报告错误设备的设备号及错误的类型.aerdriver根据错误设备号找出该设备.如果是可校正错误,aerdriver只是简单清掉出错设备的可校正错误状态配置寄存器相应的错误标识位,并打印输出错误信息.6.设备恢复处理如果是设备报告不可校正错误,需要作设备恢复处理.如果报错设备是桥接设备(BRIDGE),恢复操作涉及所有的链接在BRIDGE之下的设备.比如,如果报错设备是一个Switch的upstream端口,则所有的链接在该Switch上的设备都要做恢复处理.如果报错设备是终点设备(Endpoint),恢复操作仅涉及其自身.恢复处理的过程,需要相关的各个设备驱动程序参与.在实现上,设备驱动程序需要提供错误回调函数.具体定义如下:structpal_error_handlers.,.PCibuserrordetectedonthisdevice|Pci,ersresult_t(.error_detected)(structpci_dev.dev,enumpci_channel_stateerror);P1MM10hasbeenre.enabled.butnotDMA|pciers_result_t(.mmio_enebled)(structpci_dev日t一|,.pa畦hasbeenrssetpcl.ersresuIt_t(*slbt_reset)(stmctpcLdevdev):rDeviceddvermayre-surllenormaloperations,void(.resume)I(structjii_deVdev).在数据结构pci_driver中增加一个指针err_handler,指向相对应的pa_error_handlers错误回调函数.structpci_error_handlers的定义在2.6.14内核中已经添加,目的是支持PCI设备的错误恢复处理.为了与PCI设备的错误恢复处理保持兼容,PCIExpress设备的错误恢复处理也使用这些回调函数.其中,mmio_enabled暂时不用.error_detected是第一个被调用的回调函数.PCIEx-press恢复处理程序依次调用所有相关设备的驱动程序提供的error_detected回调函数,通知其设备出错.在er-ror_detected中,驱动程序不能对设备进行任何操作.驱动程序可以取消未完成的设备操作请求.如果错误是致命的,并且所有的error_detected都返回PCI_ERS_RESULTCANRECoVER,PCIExpress恢复处理程序会重新设置链接.如果报错设备是BRIDGE,重新设置BRIDGE的下方链接l如果报错设备是终点设备,重新设置该设备的上方链接.对于根端口和downstream端口,PCIExpress规范定义了重新设置其下方链接的方法.但没有定义如何重新设置upstream端口下方链接的方法,因为不同Switch可以实现不同的重新设置链接方法.为了统一处理,aerdriVer在数据结构pcie_po_service_driver中增加了一个函数指针reset_link.如果一个端口使用厂商自定义重新设置链接方法,其端口AER服务驱动程序必须实现resetIink.如果根端口和downstream端口AER服务驱动程序没有实现resetIink,aerdriVer实现缺省的开放系统世界reseLlink将会被调用.如果upstream端口的AER服务驱动程序没有实现reset_link,则整个错误恢复过程将失败.如果错误是非致命的,并且所有的error_detected都返回PCIERSRESULTCANRECOVER,PCIExpress恢复处理程序依次调用所有相关设备的驱动程序提供的resume回调函数,并结束恢复过程.如果某一errordetected返回PCIERS_RESULT_NEED_RESET,PCIExpress恢复处理程序依次调用所有相关设备的驱动程序提供的slot_reset回调函数.如果所有slot_reset调用成功,则再依次调用所有相关设备的驱动程序提供的resume回调函数,并结束恢复过程.目前已经有一些设备驱动程序实现了err_handler回调错误函数,包括Intel的E1000网卡驱动程序和E100网卡驱动程序,IBM的PowerRAID驱动程序.7.输出错误信息所有的错误信息都被格式化,并输出到系统监视窗口,可校正错误都以KERN_WARN-lNG级别输出不可校正错误都以KERN-_ERR级别输出.系统管理员可以屏蔽掉可校正错误的输出.以下是个实际输出例子:+.PCI-ExpressDeviceEr-for-+ErrorSevy:Uncorrected,OPENSOURCEWORLDMONTHL_Y472006.1Ot,开源penSourceCommunity.责编/陈杰美编/庆琨(Fata1)PClEBusErrortype:Tmnsac-tionLayerUnsuRequest:FirstRequesterIc,;O5OOVendOr卜D=8086h.DevtceID=0329h,BUS=05h.Device=00h,Fuction=00hTLBHeader:o4O0o1O0200a0305010oo0OOO5O1oo其中,RequesterID表示发送错误消息的PCIExpress设备的设备号.操作员可以根据这些信息做进一步的分析处理.为了方便编写设备驱动程序,aerdriver提供了一些辅助函数,比如检查设备是否支持AER,有无开启AER和清除错误状态等.设备驱动处理辅助函数为了方便编写设备驱动程序,aerdriver提供了以下几个辅助函数:intPCifindaercapability(structpci_devdev)=pci.findaercapability查找该PCI设备配置空间里AER寄存器的起始位置.如果该设备不支持AER,函数返回0.intpcienablepcieerror_reporting(structpci_devdev):PCienabIepcie_error_reporting打开该设备的AER开关,使该设备当检测到PCIExpress错误时48开放系统雌群自动向根端口发送错误报告消息.缺省状态下,PCIExpress设备的AER开关是关闭的.所以作为设备初始化的一个步骤,设备驱动程序需要调用此函数.intpci_disable_pcie_error_reporting(structpci_devdeV):pci_disable_pcieerror_reporting关闭该设备的AER开关.intpci_cleanup_aer_uncorrect_erro,二ISfatus(structpci_devdev):该函数清除设备的不可校正错误状态寄存器.对于可校正错误状态寄存器,由根端口驱动程序负责清除.对于不可校正错误状态寄存器,我们选择留给具体的PCIExpress设备驱动程序处理,因为具体的?PCIExpress设备驱动程序可以根据错误类型做不同的自己定制的处理.在内核中加入aerdriveraerdriver提供一个新的编译选项CONFIG_PCIEAER=y/n.CONFIG_PCIEAER依赖于CoNFIGPCIEPoRTBU

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论