一种基于PCIE子卡热插拔的方法及装置与流程

文档序号:12597206阅读:444来源:国知局
一种基于PCIE子卡热插拔的方法及装置与流程

本发明涉及PCIE总线技术领域,特别涉及一种基于PCIE(Peripheral Component Interconnect Express,高速外部设备互连总线)子卡热插拔的方法及装置。



背景技术:

PCIE总线是一种高速外部设备互连总线,它最早由英特尔Intel所提倡和推广,它最终的设计目的是为了取代现有计算机系统内部的总线传输接口,这不只包括显示接口,还囊括了CPU(Central Processing Unit,中央处理器)、PCI、HDD(Hard Disk Drive,硬盘驱动器)、网络Network等多种应用接口。

目前PCIE总线应用已非常广泛,接口子卡技术已广泛应用于核心路由器上,接口卡的EPLD(Erasable Programmable Logic Device,可擦除可编辑逻辑器件)与母板CPU采用PCIE总线连接时,需要软硬件支持热插拔技术,硬件方面热插拔技术已很成熟,但从软件角度看,PCIE接口的子卡需要母板对其进行扫描后,才能正常访问,且在子卡热插拔的时候,会产生大量错误TLP(Transmission Line Pulse,传输线脉冲发生器),由于TLP污染等问题,可能使CPU产生误操作处理,导致异常。



技术实现要素:

本发明的目的在于提供一种基于PCIE子卡热插拔的方法及装置,解决了现有技术中热插拔扫描和异常处理的问题。

根据本发明的一个方面,提供了一种基于PCIE子卡热插拔的方法,包括以下步骤:

PCIE子卡热插拔造成中断触发后,中断处理函数检查中断是由PCIE子卡插入导致的插入中断,还是由PCIE子卡拔出导致的拔出中断;

若检查结果为插入中断,则由所述中断处理函数和轮询线程处理所述插入中 断,以便所述PCIE子卡初始化后,将插入事件信息上报给上层软件;

若检查结果为拔出中断,则由所述中断处理函数和轮询线程处理所述拔出中断,以便删除所述PCIE子卡对应的端口信息;

其中,所述PCIE是高速外部设备互连总线。

优选地,所述中断处理函数和所述轮询线程运行在母板或CPU中。

优选地,所述的中断处理函数和轮询线程处理所述插入中断包括:

所述中断处理函数使所述PCIE子卡进入等待队列,并开始对所述等待队列进行唤醒处理;

在中断处理函数开始对所述等待队列进行唤醒处理期间,所述轮询线程执行所述PCIE子卡的在线上电流程,以便所述PCIE子卡完成初始化。

优选地,所述的中断处理函数和轮询线程处理所述插入中断还包括:

在所述PCIE子卡完成初始化以及所述等待队列被唤醒后,所述轮询线程对所述PCIE子卡在线上电流程的结果进行清除;

所述轮询线程对所述PCIE子卡进行复位及链接处理,再将所述PCIE子卡插入事件信息上报给上层软件。

优选地,所述轮询线程对所述PCIE子卡进行在线上电流程包括:

当检测到上电命令下发以及所述PCIE子卡链路完成链接后,将所述PCIE子卡信息上报给上层软件;

所述上层软件根据所述PCIE子卡信息,对所述PCIE子卡进行初始化处理。

优选地,所述中断处理函数和轮询线程处理所述拔出中断包括:

所述中断处理函数向上层软件上报所述PCIE子卡拔出事件,并唤醒所述PCIE子卡的等待队列;

在所述中断处理函数唤醒所述PCIE子卡的等待队列后,所述轮询线程执行所述PCIE子卡在线下电流程,以删除所述PCIE子卡对应的端口信息。

优选地,所述的轮询线程执行所述PCIE子卡在线下电流程包括:

当检测到下电命令下发后,删除所述PCIE子卡对应的端口信息。

优选地,还包括当检测到所述PCIE子卡的热插拔端口出现异常时,由所述中断处理函数或轮询线程处理所述PCIE子卡的异常热插拔端口,其具体包括以下步骤:

当由所述中断处理函数处理所述PCIE子卡的异常热插拔端口时,在不能修复桥片错误信息的情况下,关闭所述出现异常的PCIE子卡的热插拔端口;

当由所述轮询线程处理所述PCIE子卡的异常热插拔端口时,通过模拟一次热拔出动作,将所述PCIE子卡模拟的拨出事件信息上报给上层软件。

优选地,还包括:

所述中断处理函数通过记录所述PCIE子卡的端口信息及热插拔过程中的flag信息,对所述PCIE子卡进行定位处理。

根据本发明的另一方面,提供了一种基于PCIE子卡热插拔的装置,包括:

检查模块,用于PCIE子卡热插拔造成中断触发后,中断处理函数检查中断是由PCIE子卡插入导致的插入中断,还是由PCIE子卡拔出导致的拔出中断;

插入中断处理模块,用于当检查结果为插入中断,则由所述中断处理函数和轮询线程处理所述插入中断,以便所述PCIE子卡初始化后,将插入事件信息上报给上层软件;

拔出中断处理模块,用于当检查结果为拔出中断,则由所述中断处理函数和轮询线程处理所述拔出中断,以便删除所述PCIE子卡对应的端口信息。

与现有技术相比较,本发明的有益效果在于:

本发明实现了PCIE子卡热插拔功能,兼容在线上下电功能,且对于插拔过程中产生的异常进行及时有效处理,同时加入了热插拔问题定位手段,有助于快速排查PCIE子卡热插拔故障。

附图说明

图1是本发明实施例提供的一种基于PCIE子卡热插拔的方法流程图;

图2是本发明实施例提供的一种基于PCIE子卡热插拔的装置示意图;

图3是本发明实施例提供的PCIE子卡热插拔中断处理流程图;

图4是本发明实施例提供的PCIE子卡热插拔线程处理流程图;

图5是本发明实施例提供的PCIE热插拔端口异常处理流程图。

具体实施方式

以下结合附图对本发明的优选实施例进行详细说明,应当理解,以下所说明 的优选实施例仅用于说明和解释本发明,并不用于限定本发明。

图1显示了本发明实施例提供的一种基于PCIE子卡热插拔的方法流程图,如图1所示,包括以下步骤:

步骤S101:PCIE子卡热插拔造成中断触发后,中断处理函数检查中断是由PCIE子卡插入导致的插入中断,还是由PCIE子卡拔出导致的拔出中断;

步骤S102:若检查结果为插入中断,则由所述中断处理函数和轮询线程处理所述插入中断,以便所述PCIE子卡初始化后,将插入事件信息上报给上层软件;

步骤S103:若检查结果为拔出中断,则由所述中断处理函数和轮询线程处理所述拔出中断,以便删除所述PCIE子卡对应的端口信息;

其中,所述PCIE是高速外部设备互连总线。

其中,所述中断处理函数和所述轮询线程运行在母板或CPU中。

其中,所述的中断处理函数和轮询线程处理所述插入中断包括:所述中断处理函数使所述PCIE子卡进入等待队列,并开始对所述等待队列进行唤醒处理;在中断处理函数开始对所述等待队列进行唤醒处理期间,所述轮询线程执行所述PCIE子卡的在线上电流程,以便所述PCIE子卡完成初始化。具体地说,所述轮询线程对所述PCIE子卡进行在线上电流程包括:当检测到上电命令下发以及所述PCIE子卡链路完成链接后,将所述PCIE子卡信息上报给上层软件;所述上层软件根据所述PCIE子卡信息,对所述PCIE子卡进行初始化处理。

其中,所述的中断处理函数和轮询线程处理所述插入中断还包括:在所述PCIE子卡完成初始化以及所述等待队列被唤醒后,所述轮询线程对所述PCIE子卡在线上电流程的结果进行清除;所述轮询线程对所述PCIE子卡进行复位及链接处理,再将所述PCIE子卡插入事件信息上报给上层软件。

其中,所述中断处理函数和轮询线程处理所述拔出中断包括:所述中断处理函数向上层软件上报所述PCIE子卡拔出事件,并唤醒所述PCIE子卡的等待队列;在所述中断处理函数唤醒所述PCIE子卡的等待队列后,所述轮询线程执行所述PCIE子卡在线下电流程,以删除所述PCIE子卡对应的端口信息。具体地说,所述的轮询线程执行所述PCIE子卡在线下电流程包括:当检测到下电命令下发后,删除所述PCIE子卡对应的端口信息,并断开所述PCIE子卡链路的链接。

本发明还包括当检测到所述PCIE子卡的热插拔端口出现异常时,由所述中断处理函数或轮询线程处理所述PCIE子卡的异常热插拔端口,其具体包括以下步骤:当由所述中断处理函数处理所述PCIE子卡的异常热插拔端口时,在不能修复桥片错误信息的情况下,关闭所述出现异常的PCIE子卡的热插拔端口;当由所述轮询线程处理所述PCIE子卡的异常热插拔端口时,通过模拟一次热拔出动作,将所述PCIE子卡模拟的拨出事件信息上报给上层软件。

本发明还包括:所述中断处理函数通过记录所述PCIE子卡的端口信息及热插拔过程中的flag信息,对所述PCIE子卡进行定位处理。

图2显示了本发明实施例提供的一种基于PCIE子卡热插拔的装置示意图,如图2所示,包括:检查模块201、插入中断处理模块202以及拔出中断处理模块203。所述检查模块201,用于PCIE子卡热插拔造成中断触发后,中断处理函数检查中断是由PCIE子卡插入导致的插入中断,还是由PCIE子卡拔出导致的拔出中断;所述插入中断处理模块202,用于当检查结果为插入中断,则由所述中断处理函数和轮询线程处理所述插入中断,以便所述PCIE子卡初始化后,将插入事件信息上报给上层软件;所述拔出中断处理模块203,用于当检查结果为拔出中断,则由所述中断处理函数和轮询线程处理所述拔出中断,以便删除所述PCIE子卡对应的端口信息。

图3显示了本发明实施例提供的PCIE子卡热插拔中断处理流程图,如图3所示,在中断处理函数中,检查中断类型,在插入中断产生时只唤醒wakeup队列;在拔出中断产生时上层软件要求迅速感知(满足快切业务要求),故先上报拔出中断事件,再wakeup队列。

为保存和表示子卡热插拔事件,本发明采用面向对象的方式,将每个PCIE子卡看作一个对象,该对象包含热插拔过程中所需要的重要标识、函数指针、子卡对应的上行口设备号、等待队列等信息。

struct hotplug_subcard

{

子卡槽位号;

子卡挂载的桥片设备信息(domain,bus,device,function);

插入中断标识;

拔出中断标识;

扫描标识scanflag;

子卡可复位标识;

线程名称;

扫描函数挂载;

删除设备挂载;

子卡link状态标识;

扫描队列waitque;

};

几个重要信息介绍如下:

scanflag:为1表示该子卡已经被扫描;为0表示已卸载或删除设备;

hotplug:为1发生或模拟了一次热插拔动作(不区分插入还是拔出),该标识发生扫描之后,或者拔出动作/下电动作处理完后清0。

waitque:在中断处理中收到热插拔中断后要wakeup队列,在轮询线程中检查如果队列被wakeup了,就触发对热插拔事件的处理。

图4显示了本发明实施例提供的PCIE子卡热插拔线程处理流程图,如图4所示,PCIE子卡热插拔是由中断方式触发,在中断处理函数中,拔出中断和插入中断的处理有差别;中断和线程通过消息队列来进行通讯;在线程中,以PCIE子卡在线信息、EPLD_OK信号、PCIE link状态作为PCIE子卡状态变化的依据,在四种场景下(插入、拔出、在线上电、在线下电)有不同的处理流程,还要考虑流程的重叠和兼容处理。具体包括PCIE子卡在线上电流程、PCIE子卡在线下电流程、PCIE子卡插入动作处理流程、PCIE子卡拔出动作处理流程以及PCIE子卡热插拔线程处理中的容错流程。

所述PCIE子卡在线上电流程:上电命令下发后,PCIE子卡EPLD_OK信号会产生,并且PCIE子卡链路完成链接link up,此时扫描标识scanflag为0,故发生一次扫描,同时置scanflag为1,表示已发生扫描。扫描后把PCIE子卡信息导入到sysfs(/sys/bsp/board/subcard/slotX)中,上层软件读取后即可完成初始化PCIE子卡。

所述PCIE子卡在线下电流程:下电命令下发后,PCIE子卡EPLD_OK信号首 先检测不到,之前scanflag为1,故删除设备,热插拔hotplug清0。

所述PCIE子卡插入动作处理流程:插入中断的上报有延时,大概3~5s,所以插入动作发生时,轮询线程首先检测到的PCIE子卡在线online&&子卡EPLD_OK信号,发生了一次PCIE子卡在线上电流程的扫描;当中断产生且唤醒队列后,先判断之前是否扫描过(scanflag为1),如果是,则清除设备信息,即删除子卡在线上电流程扫描的结果,清scanflag;然后要复位子卡(在插入扫描动作前复位能提高子卡扫描稳定性),hotplug置1;等待PCIE子卡EPLD_OK信号且link up后,再进行一次扫描,扫描后会将插入事件上报给上层软件处理。

所述PCIE子卡拔出动作处理流程:拔出中断的上报可能有延时,有延时时还会先走PCIE子卡在线下电流程,删除设备;中断信号来临时,在中断处理流程中及时上报,线程中scanflag为0。

在PCIE子卡热插拔过程中,由于链接线路抖动、瞬断等导致出现PCIE错误信息,这些错误信息必须及时得到处理。首先在缓存错误cache error处理流程中解析出错误的子卡设备,尝试恢复,过一段时间仍未恢复的,就先将此端口关闭;在热插拔轮询线程中检测符合一定条件时,再将此端口打开。

所述PCIE热插拔线程处理中的容错流程包括两种容错机制:第一种,线程不断轮询端口状态,如果发现PCIE子卡在线且EPLD_OK信号,但端口关闭,则置hotplug为1,模拟一次拔出动作,删除设备并上报拔出中断,下一个轮询中根据hotplug会再扫描一次,扫描到就重新上报插入中断。此过程一般不会发生在PCIE子卡运行过程中。第二种,在PCIE子卡运行过程中发生了PCIE子卡链路断开link down,记录当前事件,模拟一次热插拔,重新扫描并上报中断。此过程可能发生在单板运行过程中,导致断流。

图5显示了本发明实施例提供的PCIE热插拔端口异常处理流程图,如图5所示,将PCIE子卡热插拔端口的异常处理函数挂载到cache error处理机制中。当有PCIE发生错误时,首先判断是否会有桥片错误,如果有,则尝试去修复桥片错误信息,采用循环修复机制,在5s后如果还不能修复,且该端口是子卡热插拔端口,则将该端口关闭。若修复成功,则不做什么。

本发明还包括PCIE子卡热插拔问题定位:通过sysfs方式,将扫描到的PCIE子卡设备信息保存下来,并将热插拔过程中重要的flag信息(hotplug、scanflag 等)、中断信息、子卡异常时的端口状态变化以及错误信息等都以文件形式记录下来,能方便快捷地定位问题。也就是说,通过log实时记录PCIE子卡端口状态、通过sysfs方式记录插拔过程中flag标识的变化及状态等,能够有效快速定位PCIE子卡热插拔过程中的问题。

综上所述:本发明的具体的实现方法包括两块内容,一是中断上下文和线程上下文结合来实现对PCIE子卡热插拔的扫描与删除,二是对在热插拔过程产生的异常进行有效及时的处理。首先要考虑的是PCIE子卡热插拔的动态扫描与删除的方式与时机。PCIE子卡在插入母板时会通过上报中断来触发扫描动作,扫描耗时较长,不宜在中断上下文处理,故配合轮询线程方式来进行扫描。在PCIE子卡拔出时,要动态删除设备。本发明还兼容PCIE子卡在线上下电操作,即在无法上报中断的情况下,根据需要对PCIE子卡扫描或删除。

综上所述,本发明具有以下技术效果:

本发明可以实现PCIE子卡热插拔功能,兼容在线上下电功能,且对于插拔过程中产生的异常进行及时有效处理,同时加入了热插拔问题定位手段,有助于快速排查PCIE子卡热插拔故障。

尽管上文对本发明进行了详细说明,但是本发明不限于此,本技术领域技术人员可以根据本发明的原理进行各种修改。因此,凡按照本发明原理所作的修改,都应当理解为落入本发明的保护范围。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1