您的位置首页>企业动态>

基于Linux模块的IDT PCIe热插拔驱动程序

导读 大家好,我是极客范的本期栏目编辑小友,现在为大家讲解基于Linux模块的IDT PCIe热插拔驱动程序问题。在典型的基于PCIe的系统中,在系统初

大家好,我是极客范的本期栏目编辑小友,现在为大家讲解基于Linux模块的IDT PCIe热插拔驱动程序问题。

在典型的基于PCIe的系统中,在系统初始化期间,PCIe总线被枚举并且资源被分配给每个PCIe端点设备。由于枚举和资源分配算法的限制,PCIe拓扑一经初始化就已修复,这意味着新的端点设备或交换机不得连接到系统。

IDT PCIe PCIe热插拔驱动一个可加载的Linux模块,采用IDT独家枚举、资源分配和设备检测算法,允许PCIe端点设备和交换机在运行时与系统连接或断开,而不影响系统的运行状态。系统中的其他PCIe设备。参考图1,如果双千兆以太网控制器与系统断开连接,然后重新连接到其他交换机上的端口,光纤通道控制器和SATA/SAS控制器的运行状态将保持不变。这与Windows Vista实现的PCIe热插拔不同,后者必须先禁用、重新枚举并重新分配资源给共享同一根端口的所有设备,然后新连接的设备才能运行。通过写入位于/sysfs目录中的文件,您可以轻松地以任何方式将设备连接到系统或从系统断开连接。将0写入/sysfs/bus/PCI/slots/00003360 bb : dd . f/power文件(其中bb指定总线号,DD指定设备号,f指定下游端口的功能号)将禁用指定下游端口,而将1写入同一文件将启用下游端口。当下游端口被禁用时,连接到该端口的所有设备都将从Linux内核中删除,并且将调用PCI驱动程序remove()函数来执行所需的清理操作。同样,当下游端口启用时,所有连接到它的设备都将被发现,并且将调用添加到Linux内核的PCI驱动程序probe()函数来执行设备初始化。第三方内核模式驱动程序也可以通过使用标题“启用和禁用下游端口”中描述的热插拔驱动程序接口来启用或禁用下游端口。

下面的图2描述了可以与运行IDT PCIe热插拔驱动程序的系统连接或断开的设备类型示例。

实现这种热插拔功能的关键是为系统中的每个下游端口分配其他未使用的总线号和内存资源。当新设备连接到系统时,这些额外的资源将用于使设备进入运行状态,而不会破坏共享同一根端口的其他设备的运行状态。

系统互连的考虑。

图3所示的IDT系统互连拓扑由基于x86的根联合处理器(RP)组成,该处理器通过IDT系统互连PCIe交换机连接到一个或多个基于x86的智能端点处理器(EP)。每个EP使用IDT域内交换机将它们连接到PCIe交换机的下游端口,以实现系统互连。这种拓扑结构与IDT系统互联软件结合使用,可以在系统中任意两个节点之间传输高速数据。

当使用这种类型的拓扑将新的电生理连接到系统或从系统断开时,热插拔驱动程序会将电生理视为与任何普通端点设备相同。但是,当RP连接到系统或从系统断开时,RP的处理方式不同。

通常,当PCIe交换机的上游端口断开时,如图4所示,交换机将在其所有下游端口上执行热复位。该功能在系统互连拓扑中是不可取的,因为当RP与系统断开时,它会阻止EPs相互通信。热插拔驱动程序通过检测IDT PCIe系统互连开关并禁用在其上游端口断开时生成热复位的能力来解决这个问题。您可以通过将linkDownHotReset模块参数设置为非零值来禁用热插拔驱动程序中的此功能。

热插拔驱动程序还有一个被动资源分配算法。该算法主要与IDT系统互连拓扑一起使用,这允许RP以最小的系统中断将其连接到操作系统。通常,当端点设备连接到根联合体时,是根联合体为设备分配内存资源。对于被动资源分配,根联合体将内存资源分配给设备。在被动资源分配的情况下,应该使用哪个“根联合体”的内存资源。默认情况下,此功能在热插拔驱动程序中启用,但可以通过设置passiveAllocationDisable模块参数来禁用。

编辑:hfy。

在典型的基于PCIe的系统中,在系统初始化期间,PCIe总线被枚举并且资源被分配给每个PCIe端点设备。由于枚举和资源分配算法的限制,PCIe拓扑一经初始化就已修复,这意味着新的端点设备或交换机不得连接到系统。

IDT PCIe PCIe热插拔驱动一个可加载的Linux模块,采用IDT独家枚举、资源分配和设备检测算法,允许PCIe端点设备和交换机在运行时与系统连接或断开,而不影响系统的运行状态。系统中的其他PCIe设备。参考图1,如果双GigE控制器与系统断开连接。

并随后重新连接至其他交换机上的端口,则光纤通道控制器和SATA / SAS控制器的操作状态将保持不变。这与PCIe热插拔的Windows Vista实施不同,后者必须禁用,重新枚举和重新分配资源给共享同一根端口的所有设备,然后新连接的设备才能运行。通过写入位于/ sysfs目录下的文件,可以简单地以任意方式或更舒适地将设备连接至系统或从系统断开连接。将0写入/sysfs/bus/pci/slots/0000:bb:dd.f/power文件(其中bb指定总线号,dd指定设备号,f指定下游端口的功能号)将禁用指定下游端口,同时将1写入同一文件将启用下游端口。禁用下游端口时,将从Linux内核中删除所有连接到该端口的设备,并且将调用PCI驱动程序remove()函数来执行所需的清除操作。同样,启用下游端口后,将发现与其连接的所有设备,添加到Linux内核中的PCI驱动程序probe()函数将被调用以执行设备初始化。下游端口也可以由第三方内核模式驱动程序通过使用标题为“启用和禁用下游端口”中描述的热插拔驱动程序API来启用或禁用。

下面的图2描述了可以与运行IDT PCIe热插拔驱动程序的系统连接或断开连接的设备类型的示例。

实现这种热插拔功能的关键是能够为系统中的每个下游端口分配其他未使用的总线号和内存资源。当新设备连接到系统时,这些额外资源将用于使该设备进入运行状态,而不必损害共享同一根端口的其他设备的运行状态。

系统互连注意事项

图3中所示的IDT系统互连拓扑由一个基于x86的根联合处理器(RP)组成,该根复杂处理器通过IDT系统互连PCIe交换机连接到一个或多个基于智能x86的端点处理器(EP)。每个EP都使用IDT域内交换机将它们连接到系统互连PCIe交换机的下游端口。这种拓扑结构与IDT系统互连软件结合使用,可以在系统中任何两个对等方之间进行高速数据传输。

当使用这种类型的拓扑将新的EP连接到系统或从系统断开连接时,热插拔驱动程序会将EP视为与任何普通端点设备相同。但是,当RP连接到系统或从系统断开时,处理RP的方式有所不同。

通常,当PCIe交换机的上游端口断开时,如图4所示,该交换机将对其所有下游端口进行热复位。此功能在系统互连拓扑中是不可取的,因为当RP与系统断开连接时,它将阻止EP相互通信。热插拔驱动程序通过检测IDT PCIe系统互连交换机并禁用其上游端口断开连接时生成热重置的能力,从而解决了此问题。通过将linkDownHotReset模块参数设置为非零值,可以在热插拔驱动程序中禁用此功能。

热插拔驱动程序还具有被动资源分配算法。该算法主要与IDT系统互连拓扑一起使用,该算法允许RP以最小的系统中断将其连接到操作系统。通常,当端点设备连接到根联合体时,是根联合体将内存资源分配给该设备。对于被动资源分配,是由根联合体将内存资源分配给设备。在被动资源分配的情况下,应该使用哪些内存资源的“根联合体”。默认情况下,热交换驱动程序中会启用此功能,但可以通过设置passiveAllocationDisable模块参数来禁用此功能。

编辑:hfy

.dfma { position: relative; width: 1000px; margin: 0 auto; } .dfma a::after { position: absolute; left: 0; bottom: 0; width: 30px; line-height: 1.4; text-align: center; background-color: rgba(0, 0, 0, .5); color: #fff; font-size: 12px; content:"广告"; } .dfma img { display: block; }
郑重声明:本文版权归原作者所有,转载文章仅为传播更多信息之目的,如作者信息标记有误,请第一时间联系我们修改或删除,多谢。