CN101135982A - 在计算机中管理消息传信中断资源的方法和装置 - Google Patents
在计算机中管理消息传信中断资源的方法和装置 Download PDFInfo
- Publication number
- CN101135982A CN101135982A CN200710108861.1A CN200710108861A CN101135982A CN 101135982 A CN101135982 A CN 101135982A CN 200710108861 A CN200710108861 A CN 200710108861A CN 101135982 A CN101135982 A CN 101135982A
- Authority
- CN
- China
- Prior art keywords
- msi
- port
- binding
- resource
- interrupt
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Pending
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/48—Program initiating; Program switching, e.g. by interrupt
- G06F9/4806—Task transfer initiation or dispatching
- G06F9/4812—Task transfer initiation or dispatching by interrupt, e.g. masked
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06F—ELECTRIC DIGITAL DATA PROCESSING
- G06F9/00—Arrangements for program control, e.g. control units
- G06F9/06—Arrangements for program control, e.g. control units using stored programs, i.e. using an internal store of processing equipment to receive or retain programs
- G06F9/46—Multiprogramming arrangements
- G06F9/50—Allocation of resources, e.g. of the central processing unit [CPU]
- G06F9/5061—Partitioning or combining of resources
- G06F9/5077—Logical partitioning of resources; Management or configuration of virtualized resources
Landscapes
- Engineering & Computer Science (AREA)
- Software Systems (AREA)
- Theoretical Computer Science (AREA)
- Physics & Mathematics (AREA)
- General Engineering & Computer Science (AREA)
- General Physics & Mathematics (AREA)
- Storage Device Security (AREA)
Abstract
本发明提供了在具有MSI能力计算机中动态地将多个客户机共享的消息传信中断(MSI)资源与中断设施绑定在一起的装置、程序产品和方法。另外,这样绑定的管理可以利用能够管理MSI资源与中断设施之间的多个MSI绑定、和通过平台特有封装程序代码与计算机的底层硬件平台接口的平台无关中断管理器实现。
Description
技术领域
本发明涉及计算机和计算机软件,尤其涉及在计算机或计算机系统的输入/输出结构中生成的处理中断。
背景技术
随着当今社会越来越依赖于计算机,计算机技术在许多前沿都得到发展,以便跟上越来越高的性能要求,以及赋予计算机的越来越重要的信任位置。尤其,计算机越来越多地用在必须不断地进行大量处理、和任何停机时间都完全不可接受的高性能和关键使命应用中。
提高性能往往要求使用越来越快和越来越复杂的硬件部件。此外,在许多应用中,像处理器和诸如存储设备、网络连线等的外围部件那样的多个硬件部件并行地工作,以便提高总系统性能。
与这些更复杂部件的使用一起,用于操作这些部件的软件往往必须更精致和复杂,以便有效管理这些部件的使用。例如,人们开发出了允许计算机程序多“线程”地同时执行,以便可以基本上同时完成多项任务的多线程操作系统和内核。例如,对于电子商务计算机应用,可以将不同的线程指定给不同的客户,以便在独立线程中管理每个客户特定电子商务交易。
多线程操作系统的一种逻辑扩展是逻辑分区概念,其中,允许单个物理计算机基本上像多个独立“虚拟”计算机(称为逻辑分区)那样工作,以及在各种逻辑分区之间分配物理计算机中的各种资源(例如,处理器、存储器、输入/输出设备)。每个逻辑分区执行独立操作系统,并且,从用户和在逻辑分区上执行的应用软件的角度来看,作为完全独立的计算机工作。
借助于逻辑分区,往往称为“管理程序”或分区管理器的共享程序管理逻辑分区和有助于将资源分配给不同逻辑分区。例如,分区管理器可以将诸如处理器、工作站适配器、存储设备、存储空间、网络适配器等的资源分配给各种分区,以便以与独立物理计算机非常相似的方式支持每个逻辑分区相对独立地操作。
在逻辑分区和非逻辑分区计算机系统中,对这样系统使用的外围硬件部件的管理也使复杂性越来越高。外围部件,例如,存储设备、网络连线、工作站、适配器、控制器、和其它互连硬件设备(下文称为输入/输出(IO)资源)通常通过一个或多个中间互连硬件设备与计算机耦合,一个或多个中间互连硬件设备形成通过其在中央处理单元和IO资源之间进行通信的“结构”。
在较低性能计算机设计,例如,像台式计算机、膝上型计算机等那样的单用户计算机中,用在这样设计中的IO结构可能只需要相对简单设计,例如,使用支持像集成驱动电子设备(IDE)、外围部件互连(PCI)或通用串行总线(USB)那样的少数几种互连技术的IO芯片组。另一方面,在较高性能计算机设计中,IO要求可能是这样的,要求互连硬件设备的复杂配置管理这样设计的所有必要通信需要。在一些情况下,通信需要可能大到足以要求使用与容纳计算机中央处理单元的外封(enclosure)分离和与之耦合的一个或多个附加外封。
通常,在更复杂设计中,利用排列在计算机的主要外封和辅助外封之一或两者上的“插槽”将IO适配器(IOA)安装在IO结构上和与之耦合。可以以其它方式,例如,通过电缆或其它类型的连接器将其它部件安装在IO结构上或与之耦合,但是,为了方便起见,往往将这些其它类型的连接也称为“插槽”。因此,与使用的连接类型无关,IO插槽代表IO资源通过IO结构与计算机通信的连接点。在一些情况下,术语“IO插槽”也用于指IO结构中安装在特定连接点上的实际外围硬件部件,和关于这一点,下文将IO插槽或与之耦合的IO资源也称为端点IO资源。
由于IO结构关于多个端点IO资源支持多个任务的同时执行的典型能力,以及访问IO资源的计算机中各种软件层面之间的相对独立性,管理通过IO结构与计算机耦合的端点IO资源往往存在问题。例如,要求多个IO结构支持中断的概念,这些中断是IO资源生成的警告计算机的中央处理复合体特定事件的非同步和往往是边带的信号。
在许多传统IO结构中,中断本质上对层敏感,从而通过断言专用线或引线上的信号生成中断信号。但是,对于复杂的IO结构,要求为与该结构连接的所有IO资源都提供中断功能的专用线或引线的数量可能大到难以实现,因此,许多更复杂IO结构实现通常通过将数据写入系统地址空间中的特定存储地址中实现的消息传信中断(MSI,message-signaled interrupt)。
举例来说,PCI-X和PCI-Express标准支持MSI能力,其中,PCI-Express标准要求所有非传承PCI-Express兼容IOA都支持MSI。为了完全支持MSI,不仅IOA需要支持MSI,而且IO结构中的其它硬件部件,例如,PCI主桥接器(PHB)、根复合体(complex)等,以及主固件,例如,BIOS、操作系统实用程序、管理程序固件等也必须支持MSI。更进一步,这些部件必须足够灵活,以便允许支持IOA的变化类型、和IO结构硬件和IOA两者的变化配置和MSI传信能力。
此外,当逻辑分区系统中的PHB或根复合体支持IOA内IOA或PCI功能的分区时,在分区和共享它们的PCI功能的PHB或根复合体中MSI中断设施的管理变得更加复杂。主固件通常必须利用PHB实现,实现适用于改变单个PHB上的适配器能力和配置的MSI管理功能和策略。更进一步,这样的管理必须适应多个客户机,即,操作系统、分区、设备驱动器等的需要,以避免客户机间的资源冲突和保证多个客户机之间的公平分配。
要求提供MSI支持的一种基本功能是创建MSI资源和底层硬件平台的中断设施之间的绑定。绑定代表MSI资源和中断设施之间的映射,以保证通过中断设施将MSI资源传信(signaled)的中断路由到适当客户机。在许多设计中,例如,中断设施将特定中断“端口”分配给各客户机,以便MSI绑定保证分配给那个客户机的MSI资源传信的中断被引向与那个客户机相关联的中断设施中的端口。
与逻辑分区计算机以及更复杂非分区计算机有关的严重问题是高可用性问题。这样的计算机往往要求对系统可用性的影响最小地支持动态重新配置。在逻辑分区计算机中,例如,可以动态终止和重新激活逻辑分区,而不影响驻留在计算机上的其它逻辑分区提供的服务的可用性。另外,可能有必要利用否则被分配给其它分区的未用资源,在逻辑分区之间重新分配系统资源,例如,以提高负担沉重分区的能力。更进一步,许多设计支持对IOA和其它资源进行同时维护的能力,包括对系统可用性影响很小或没有影响地动态和按需要加入、替换(例如,升级),或移走IOA。错误恢复技术也可以动态地重新分配,要不然改变系统资源的可用性。在这些情况的每一种中,可能需要调整MSI设施,以便使底层硬件平台的变化和/或系统资源分配的变化适应计算机中的不同分区。
与MSI支持有关的另一种担心由可以利用MSI的底层硬件平台的多样性引起的。在许多情况下,希望操作系统和设备驱动器可移植到不同硬件平台。如果将MSI管理职责分配给操作系统或设备驱动器,可移植性因操作系统或设备驱动器需要考虑硬件平台的变化而遇到麻烦。同样,通过与操作系统或设备驱动器分离的管理设施的MSI管理,例如,像用固件实现的那样,往往同样因需要考虑硬件平台的变化而变得过度复杂。
发明内容
本发明通过在一个方面中提供了在具有MSI能力计算机中动态地将多个客户机共享的消息传信中断(MSI)资源与中断设施绑定在一起的装置、程序产品和方法解决了与现有技术有关的这些和其它问题。尤其,在包括硬件平台的计算机中,通过管理计算机中映射硬件平台支持的MSI资源共享库当中的MSI资源的、与驻留在计算机中的至少一个中断设施的多个MSI绑定,和响应来自计算机中能够访问MSI资源共享库的多个客户机当中的第一客户机的请求,动态地创建将MSI资源共享库当中第一客户机可访问的第一MSI资源映射到中断设施的MSI绑定,管理MSI资源。
表征本发明的这些和其它优点和特征在形成其进一步部分的所附权利要求书中给出。但是,为了更好地理解本发明,和通过其使用达到的优点和目的,应该参考附图和描述了本发明示范性实施例的伴随描述性内容。
附图说明
图1是按照本发明的MSI兼容计算机中的主要硬件部件的框图;
图2A是例示图1的计算机中的MSI相关设施的框图;
图2B是例示用在在图2A中引用的MSI管理器中的内部数据结构的示范性实现的框图;
图3是例示能够被图1的计算机执行的绑定例程的程序流程的流程图;
图4是例示能够被图1的计算机执行的释放例程的程序流程的流程图;
图5是例示能够被图1的计算机执行的修改例程的程序流程的流程图;
图6是例示能够被图1的计算机执行的激活例程的程序流程的流程图;
图7是例示能够被图1的计算机执行的去激活例程的程序流程的流程图;
图8是例示能够被图1的计算机执行的查询例程的程序流程的流程图;和
图9A和9B是例示能够被图1的计算机执行的初始化例程的程序流程的流程图。
具体实施方式
下文讨论的实施例管理MSI资源和中断设施之间的绑定,以便有助于多个客户机共享MSI资源。可以从下面更明显看出,按照本发明的一些实施例支持动态绑定管理,从而可以在运行时,尤其,响应客户机请求,动态地创建MSI绑定。另外,在按照本发明的一些实施例中,对MSI绑定的管理可以由通过平台专用封装程序与硬件平台接口的平台无关中断管理器进行。但是,应该认识到,在本发明的一些实施例中,可以相互分离地实现动态绑定功能和平台无关性。
下文具体描述的实施例利用作为主系统固件的部件实现,和能够管理中断设施中的各个MSI硬件中断和端口、和将2的乘方倍数的多个MSI中断与MSI端口(DMA地址)绑定的MSI管理器程序。上述MSI管理器程序另外还授权各个逻辑分区使用逻辑分区系统中的共享PCI主桥接器或根复合体的MSI硬件设施。更进一步,将MSI管理器程序作为可移植到不同硬件平台和通过下面将更详细描述的硬件封装程序接口的独立编程实体(例如,C++类)来实现。
这里所述的MSI管理器一般是像非分区计算机中的台式计算机的BIOS,或逻辑分区计算机中的管理程序或分区管理器固件那样的平台或系统固件的部件。可替代地,MSI管理器可以是操作系统的部件,将作为OS实用程序的MSI管理提供给设备驱动器和利用BIOS提供硬件封装程序的功能。
MSI管理器可以与许多不同中断设施结合在一起使用。在这种背景下,中断设施由向处理器提供来自IOA的中断信号的硬件逻辑单元组成。中断设施通常作为各种客户机的表示层工作,使客户机能够配置和访问MSI资源,例如,Open PIC变量、MPIC、APIC、IBMPowerPC中断、和其它像可能存在于可变底层处理器结构之中那样的处理器中断控制器。中断设施包括能够将来自MSI或LSI源的输入中断信号传送到处理器中断接收硬件的硬件逻辑单元、使处理器接着将中断传送到管理IOA的客户机程序的功能。通常包含在中断设施内的是像MSI中断向量那样,映射到一组MSI端口或与一组MSI端口绑定的MSI资源,其中,MSI端口是从传信MSI中断的IOA接收MSIDMA消息的DMA地址。就这一点而言,客户机可以是能够将IOA配置成利用为这样IOA建立的中断设施MSI资源,例如,操作系统、系统BIOS、设备驱动器等的任何程序代码。客户机在分区环境下可以驻留逻辑分区中,或在非分区环境下可以驻留在其它地方。像用在下面讨论的实施例中那样的客户机的一个例子是利用也称为运行时抽象化服务(RTAS)的固件提供库的分区操作系统。
在本上下文中,硬件平台指的是为位于IO结构中的一个或多个IOA管理一个或多个MSI资源的任何硬件。例如,硬件平台可以包括为与PCI主桥接器驱动的PCI总线耦合的任何IOA管理中断的PCI主桥接器。硬件平台还可以包括承担为与根复合体耦合的任何IOA管理中断任务、像用在PCI-Express环境中那样使用的根复合体。
这里所述的MSI管理器通常包括使客户机能够管理(例如,分配,释放,和/或修改)专用于一个IOA和客户机的MSI资源或几个IOA和客户机共享的MSI资源当前的MSI硬件资源的编程功能或调用。在非分区计算机中,这些编程功能可以借助于,例如,内核或平台固件(例如,BIOS)库调用实现。在逻辑分区系统中,这些功能可以借助于,例如,管理程序调用实现。
另外,如上所述,MSI管理器通过MSI硬件封装程序与硬件平台接口,MSI硬件封装程序将实际硬件实现抽象化,使MSI管理器与任何具体硬件实现无关。封装程序提供使底层硬件实现对MSI管理器透明的功能调用,从而使MSI管理器程序可不变地移植到其它硬件实现。
硬件封装程序代表MSI管理器进行所有实际硬件寄存器访问和操纵。另外,硬件封装程序不用包括,例如,MSIDMA端口的数量、MSI中断的数量和它们如何与硬件MSI端口地址相关联、和与各个MSI中断相关联的系统中断向量的实际硬件结构的MSI管理器知识,利用描述MSI硬件能力的抽象参数计算和编程MSI管理器。在面向对象编程实现中,可以将MSI管理器作为C++类(或“对象”)来实现,硬件封装程序将抽象参数作为类构造函数(constructor)参数提供给MSI管理器。这些抽象参数最好与封装程序知道,但MSI管理器不知道的实际硬件设计无关。
硬件封装程序还可以包括易受MSI管理器影响使MSI管理器可以不用硬件设计的直接知识地间接控制和设置MSI硬件设施中的值的编程功能或调用。这些编程功能可以不需要对MSI管理器作任何改变,与可变硬件实现相适应地通过硬件封装程序内部实现。
这里所述的MSI管理器可以分配给特定主桥接器或根复合体,或为一个或多个IOA管理MSI中断的任何其它硬件设备。在下面讨论的实施例中,例如,可以将MSI管理器分配给PCI主桥接器或PCI-Express根复合体,因此,可以用在至少部分基于PCI、PCI-X或PCI-Express的IO结构中。但是,可以从下面更明显看出,按照本发明的实施例可以与包括许多和各种IO结构元件,例如,包括桥接器设备、集线器设备、开关、连接器、主设备、从设备、控制器设备、电缆、调制解调器、串行化器/并行化器、光电收发器等的IO结构结合在一起使用。
除了别的好处之外,这里所述的技术有助于在逻辑分区计算机中实现插槽或资源层面划分,从而可以将各个IO资源或插槽与驻留在逻辑分区计算机中的特定逻辑分区绑定在一起。但是,应该认识到,这里所述的技术可以用在非逻辑分区环境中,以及与资源划分的其它尺度,例如,总线层面或外封层面一起使用。
现在转到在所有示图中相同标号都表示相同部分的附图,图1例示了按照本发明的MSI兼容计算机系统10中的主要硬件部件。计算机10一般代表,例如,像网络服务器、中型计算机、大型计算机等那样的许多多用户计算机的任何一种,例如,IBM eServer计算机。但是,应该认识到,本发明可以在其它计算机和数据处理系统中,例如,在像工作站、台式计算机、便携式计算机等那样的单用户计算机中,或在其它可编程电子设备(例如,包含内置控制器等),以及包括非逻辑分区计算机的其它多用户计算机中实现。
计算机10一般包括包含通过总线16与存储器14耦合的一个或多个处理器12的中央电子设备复合体(CEC)。每个处理器12可以实现成单线程处理器或多线程处理器,至少一个处理器可以实现成用于运行专门固件代码以管理系统初始程序装载(IPL),和监视、诊断和配置系统硬件的服务处理器。一般说来,计算机10包括一个服务处理器和用于执行驻留在计算机中的操作系统和应用程序的多个系统处理器,但本发明不局限于这种特定实现。在一些实现中,服务处理器可以以除了通过总线16以外的其它方式与计算机中的其它各种硬件部件耦合。
存储器14可以包括一个或多个层面的存储设备,例如,基于DRAM(动态随机访问存储器)的主存储设备,以及一个或多个层面的数据、指令和/或组合高速缓冲存储器,正如在现有技术中众所周知的那样,某些高速缓冲存储器为各自处理器或多个处理器服务。更进一步,存储器14通过IO结构与许多类型的外部设备耦合。在利用PCI-X或PCI-Express兼容IO结构的例示性实现中,IO结构可以包括一个或多个PCI主桥接器(PHB)和/或一个或多个根复合体18。每个PHB/根复合体通常是在一些情况下可能是使用PCI-PCI桥接器29必需的主PCI总线的宿主(host),以便将相关IO插槽22与次PCI总线连接。IO插槽22可以实现成,例如,接纳PCI兼容适配器卡,或统称为IOA24、直接嵌(焊接)在包含PCI-PCI桥接器和/或PHB的电子平板上的PCI适配器芯片的连接器。
基于PCI接口支持存储器映射输入/输出(MMIO)。这样,当计算机10实现了逻辑分区环境时,对于从处理器12到IOA的MMIO、和从存储器14到IOA的地址,可以允许逻辑分区操作系统将处理器地址与特定PCI适配器存储器“绑定”,使IOA能够对存储器14进行DMA。
此外,在例示的实施例中,最好将热插式控制器与每个IO插槽相关联,或包含到PHB18或PCI-PCI桥接器20中,以便与对系统中的其它IO插槽22的供电状态无关地将电力有选择地供应给每个IO插槽22。另外,在一些实施例中,可以将IO结构元件组集成成公用集成电路或卡。例如,可以将多个PCI-PCI桥接器20部署在公用集成电路上。
参照图2A,在100上例示了计算机10的逻辑分区实现,它包括部署了多个设备驱动器程序102的多个逻辑分区操作系统101,每个设备驱动器程序102被配置成控制多个IOA 114之一的操作。操作系统分区应该理解为执行未包括在图中的传统计算机处理器和存储器中的程序。
除了处理器和存储器之外,计算机硬件还包括将IOA 114与计算机处理器和存储器连接的IO结构并进一步包括消息传信硬件117,消息传信硬件117可访问IOA和在计算机处理器中执行的程序。在例示的实施例中,MSI硬件117是下文可以简称为PHB的PCI主桥接器(PHB)或根复合体110的部件。IOA 114通过与PHB 110连接的PCI总线115,或可替代地,通过PCI桥接器113与PHB PCI总线115连接的PCI总线116与MSI硬件连接。对于本领域的普通技术人员,显而易见,除了PCI主桥接器或根复合体和PCI适配器之外的其它IO硬件形式可以以本发明所述的方式利用消息传信中断机构。更进一步,在一些实施例中,可以将多个PHB或根复合体用在给定计算机中。
MSI硬件117包括通过MSI硬件组合在一起将唯一中断传信(signal)给逻辑分区操作系统101中的设备驱动器102的MSI端口111和MSI中断112。多个MSI端口111的每一个都可以与依次相关的多个MSI中断112组合。例如,标成“端口0”的MSI端口111可以与编号为‘0’的单个MSI中断112组合,或可以与编号为8到15的一组MSI中断112组合,以便可以与MSI“端口0”组合在一起传信这八个中断的顺序组的任何一个。
在利用PCI主桥接器的例示性实施例中,IOA 114在PCI总线115或116上传信如DMA写操作的MSI中断,其中DMA写地址选择特定MSI端口111,DMA写数据选择特定MSI中断112。当为IO操作配置IOA 114时,操作系统101或设备驱动器102的客户机利用MSI端口112的DMA地址标识和IOA 114可以与那个MSI端口DMA地址相关联分别表示成DMA数据的顺序MSI中断111的有序范围编程IOA 114。
例如,MSI兼容IOA的PCI功能配置空间可以包含消息控制、消息数据、和消息地址(端口)寄存器。客户机可以配置成利用MSI设置这些寄存器,以便对每种功能定义MSI参数。这些功能通常将如DMA写的MSI中断传信给PHB,其中,DMA地址是PHB定义的地址或MSI“端口”,并且PHB解码成MSI目标。DMA数据是选择与MSI端口地址相关联的中断向量16位整数,或“中断号”。选择的特定中断向量通常是在PHB内具体实现的。PHB利用端口地址和中断号的组合将来自功能的中断与PHB可以传信给处理器的中断向量相关联。例如,对于Power5或Power6兼容PHB,MSI DMA中的端口地址和中断号可以选择XIVR。在带有MPIC中断控制器的硬件平台中,端口地址和中断号可以选择MPIC中断。
在例示的实现中,功能消息数据寄存器可以用于定义功能可以传信给PHB的中断号。这可以是特定中断号,或视消息控制寄存器中的3位多消息使能字段而定,可以是一批中断号。这个字段以从1到32(000b到101b)的2的乘方编码对这个功能定义的中断的号码。当多消息使能(MME)是‘000b’时,功能可以只像其存储在消息数据寄存器中那样表示那个特定中断号。例如,如果消息数据寄存器被设置成0×C7,功能可以只传信PHB将其与0×C7相关联和编码到消息地址(端口)寄存器中的端口地址相关联的中断。
当MME非零时,功能可以利用通过MME值定义的消息数据寄存器的低序位的所有组合,以2的乘方范围中断号表示中断。例如,如果消息数据寄存器是‘0×C8’,和MME被设置成‘010b’(4个中断),那个功能可以传信从0×C8到0×CB的四个中断。
例示的实施例还包括平台固件103,平台固件103包含MSI资源管理器105或MSI管理器、和MSI资源管理器接口104。对于本领域的普通技术人员来说,显而易见,平台固件103可以以计算机系统的管理程序、操作系统内核实用程序、或基本IO配置固件(如BIOS)的任何一种形式,或者,实际上,以在逻辑分区或非逻辑分区计算机中实现的任何其它软件或固件形式实现。MSI管理器105知道在平台MSI硬件107中实现的多个(m个)MSI端口111和多个(n个)MSI中断112,其中,n大于等于m。MSI管理器进一步知道MSI中断与计算机和MSI传信硬件结构的中断表示语义的关联,以便利用将传信硬件与配置值和计算机中断表示机制相关联的值指示操作系统或配置程序。
MSI管理器105确定导出n个MSI中断与m个MSI端口的数种关联或绑定的MSI中断111与特定MSI端口112的关联。数种绑定的每一种都适合供各自中断IOA114使用。MSI管理器105从而起为逻辑分区操作系统101或设备驱动器102服务,当需要为消息传信中断配置IOA114时,管理MSI端口和MSI中断112,使它们适用于各自设备驱动器102的作用。
尤其,MSI管理器105的作用是管理多个MSI端口111和MSI中断112,以便有助于在单个操作系统分区101内的多个设备驱动器102之间,或多个分区操作系统101内的多个设备驱动器102之间共享这些资源。MSI管理器接口104提供了管理这些资源,使得各自客户机,例如,操作系统101或设备驱动器102觉察不到配备在MSI硬件107中的MSI端口111和MSI中断112的总数,或适用于其它操作系统101或设备驱动器102或其它操作系统101或设备驱动器102使用的那些MSI资源的手段。
MSI管理器接口104由识别、分配、解除分配、激活和去激活MSI传信资源、MSI端口111和MSI中断112的编程功能调用组成。操作系统101或设备驱动器102调用这些功能以向MSI管理器105指示各IOA 114需要什么MSI资源,并确定什么MSI资源可用以为了传信消息中断编程IOA 114。
平台固件103也包括MSI硬件封装程序106和硬件封装接口107。硬件封装程序106和硬件封装接口107的作用是提供MSI端口111和MSI中断113的特定硬件实现的抽象化,以便使MSI管理器105与这些特定性无关。这样就可以得到在对平台MSI硬件117存在不同硬件实现的多个不同计算机系统中可以不变地起作用的MSI处理器的单一编程实现。
在利用硬件封装接口107的MSI管理器105的指引下,硬件封装程序106直接与底层平台MSI硬件通信,进行MSI中断111与MSI端口112的特定硬件关联,或进行为IOA 114传信消息激活或去激活MSI端口的硬件操作。硬件封装程序可以将硬件装载/存储接口118,例如,存储器映射装载/存储IO接口用于对硬件MSI设施的编程访问。
硬件封装程序106还在管理程序、操作系统内核实用程序、或IO配置固件内提供编程操作,以便与可在平台MSI硬件107的设计内,例如,基于逐个PHB相互组合的MSI端口111和MSI中断112的每个库相关联地创建MSI管理器程序和数据结构。
例示在图2A中的许多部件,例如,逻辑分区操作系统101、设备驱动器102、MSI管理器105、和硬件封装程序106可以用一般驻留在在计算机100中执行的软件或固件中的程序代码实现。一般说来,为实现本发明的实施例而执行的例程,无论作为操作系统或特定应用程序的一部分、部件、程序、对象、模块还是指令序列实现,甚至作为它们的一个子组实现,在这里都称为“计算机程序代码”,或简称为“程序代码”。程序代码通常包含在各个时刻驻留在计算机中的各存储器和存储设备中,和当被计算机中的一个或多个处理器读取和执行时,使该计算机完成执行体现本发明的各个方面的步骤或单元所需的步骤的一条或多条指令。此外,虽然本发明是在全功能计算机和计算机系统的背景下加以描述的,但本领域的普通技术人员应该认识到,本发明的各种实施例能够作为程序产品以各种形式分发,并且本发明可以与用于实际实现分发的信号承载媒体的具体类型无关地平等应用。信号承载媒体的例子包括,但不局限于,像易失性和非易失性存储设备、软盘和其它可换式盘、硬盘驱动器、磁带、光盘(例如,CD-ORM、DVD等)等那样的有形可记录型媒体、和像数字和模拟通信链路那样的传输型媒体。
另外,下文所述的各种程序代码可以根据在本发明的特定实施例中实现的应用程序或软件部件来标识。但是,应该认识到,使用如下的任何特定程序术语只是为了方便,因此,本发明不应该局限于只用在这样的术语所标识和/或暗示的任何特定应用中。更进一步,考虑到可以将计算机程序组织成例程、过程、方法、模块、对象等的方式通常不计其数,以及可以在驻留在典型计算机(例如,操作系统、库、API、应用程序、小应用程序等)内的各种软件层面之间分配程序功能的方式多种多样,应该认识到,本发明不局限于这里所述的程序功能的特定组织和分配。
本领域的普通技术人员应该认识到,例示在图1和2A中的示范性环境不是用于限制本发明的。实际上,本领域的普通技术人员应该认识到,可以不偏离本发明范围地使用其它可替代硬件和/或软件环境。
现在参照图2B,按照本发明的MSI管理器可以包含以与变化硬件实现无关的抽象方式描述平台硬件的一个或多个内部数据结构。例如,如图2B所示,适用的一组数据结构包括端口属性表300,端口属性表300包含传递给MSI管理器构造函数的描述MSI端口的基本抽象参数:端口DMA地址301、端口开始系统中断号302、端口开始MSI数据值303、和与那个端口相关联的MSI数(number)304。
可选地,如305所示,MSI管理器在端口属性表300中还可以包括作为MSI管理器权限管理的一部分,被授权使用那个MSI端口和可以与那个端口绑定的MSI的逻辑分区的列表。可替代地,MSI管理器可以利用管理程序的其它权限管理功能,如管理程序权限机制,授权逻辑分区为其它系统功能访问PHB或PCI插槽。在这样的可替代实施例中,MSI管理器不需要使分区权限参数直接包含在MSI端口属性或其它内部结构中。
与MSI端口属性和硬件MSI中断相关联,MSI管理器还可以在内部构造管理MSI中断与MSI端口的绑定的MSI状态表310。MSI状态表310可以实现成MSI状态项的阵列,每个MSI的MSI状态项可以与那个MSI管理器管理的MSI相关联。MSI状态标志向量311包括如那个MSI已分配还是可用,和在任何给定时刻它被激活还是去激活的状态。MSI Bus#值312、Dev#值313、和Func#值314记录客户机通过MSI管理器绑定了那个MSI之后分配给MSI的PCI总线/设备/功能号。类似地,MME值315记录绑定成包括这个MSI的一个组的相继MSI中断的数量。分区ID 316记录当在逻辑分区计算机系统中实现MSI管理器时为其绑定MSI的特定逻辑分区。
本领域的普通技术人员应该认识到,硬件抽象化和MSI状态参数可以以例如C++语言或以在现有技术中已知的其它方式实现为如图2B所示的表,作为面向对象编程类。
另外,单个MSI管理器类可以包含多个端口属性表和相关MSI状态表,其中,每个端口属性表与单个MSI状态表相关联。从而,每个这样的一对表将代表单个MSI端口和可以与那个端口绑定的MSI。从而,这样的实施例使单个MSI管理器能够管理每一个可分别与特定范围的MSI相关联的多个MSI端口。在另一个实施例中,MSI管理器可以拥有多个MSI端口属性表和单个MSI状态表,MSI状态表中的MSI状态标志包括标识一个MSI或一组连续MSI与多个端口的哪一个绑定的索引或标识符。这样的实施例使MSI管理器能够管理可与单个范围MSI中断的任意子组绑定的多个MSI端口。受益于这里的公开,与描述单个MSI端口的参数相对用于提供端口属性参数列表的构造参数的实现对于本领域的普通技术人员来说是显而易见的。
下面将结合图3-9B更具体地描述支持MSI资源与中断设施的动态绑定的MSI管理器的一种特定实现。在这种实现中,MSI管理器用于处理涉及到中断设施中的MSI端口和在MSI管理器与之相关联的PHB或根复合体下与IOA相关联的MSI资源的所有激活、去激活、释放和绑定活动。利用在构造MSI管理器期间提供的指定PHB或根复合体的特性的参数为每个具有MSI能力的PHB或根复合体构建MSI管理器。
MSI管理器是与PHB或根复合体相关联,但不能直接认识到PHB/根复合体硬件实现的附属对象。一旦建成,MSI管理器就利用硬件封装接口访问硬件封装程序和间接建立MSI绑定和激活。这样,可将MSI管理器移植到其它PHB实现上。
MSI管理器包含MSI与MSI确认表项目(MVE)或端口的逻辑绑定、MSI的当前可用共享‘库’、和未用MSI端口地址。另外,MSI管理器保证与MSI相关联的一组策略,并为将MSI与MVE绑定、从当前MVE绑定中释放MSI、激活MVE使DMA写到绑定MSI端口地址、在分区重新引导和错误流期间去激活MVE、和修改当前MSI与特定MVE或端口的绑定提供支持。
在一种实现中,例如,MSI管理器实现保证每个PE一个MVE和八个MSI的最少MSI资源的MSI管理策略。同时,MSI管理器可以允许客户机动态地绑定附加MSI以便优化IOA性能。对于支持不止一个PE的PHB,MSI管理器可以像那个PHB上含有PE的所有客户机(例如,分区)共享的库那样管理超出按PE要求最少量的MVE和MSI。MSI管理器可以根据先到先服务分配这些入库资源,这样就保证了所有PE都能起作用。但是,根据将MSI分配给共享这些资源的分区的动态分配状态,PCI设备性能可能由于入库MSI或多或少可用随激活而改变。
每个MVE通常包括将DMA主设备确认成具有DMA这个端口的权限的信息,以及将有效MSI中断号翻译成适当处理器中断(例如,特定XISR)的信息。在逻辑分区环境下支持端点分区的PHB通常为每个端点提供MVE。因此,PHB一般提供使多个可分区端点(指定给不同逻辑分区的PCI设备)能够共享PHBMSI资源的多个MVE。
另外,功能可以传信的每个MSI中断通常与硬件平台中断空间中的唯一中断相关联。在一些平台中,例如,该翻译可以将有效MSI中断号与PHB中的XIVR相关联,然后,PHB将XIVR作为XISR传信给处理器。因此,在那个PHB上的XISR中将PHB ID和中断号组合在一起生成平台唯一中断号。一般说来,提供多个MVE的PHB允许任何MVE寻址PHB提供的所有MSI XIVR的一个子组。平台和分区固件使那种关联动态地适应通过PHB连接的IOA的配置和能力。这里所述的动态绑定最好能够在分区引导时,以及在运行系统上IOA的外部IO拉出或PCI插槽热插替换,或动态逻辑分区加入之后绑定。
MSI管理器支持包括三种基本类型调用的客户机接口。绑定/释放/修改调用支持MSI资源与中断设备中的MVE或MSI端口之间的绑定的动态创建、破坏和修改。激活/去激活调用支持MVE或MSI端口的动态激活和去激活,查询调用支持有关当前MSI可用性和绑定的逻辑信息的检索。图3-8例示了这些各种类型调用的操作,在这种情况下,假设底层计算机是含有用作可以分配给特定分区的可分区端点(PE)的IOA的逻辑分区计算机。另外,分区,或更具体地说,驻留在其中的操作系统起驻留在计算机中的管理程序或平台管理器固件中的MSI处理功能的客户机作用。
例如,图3例示了与绑定操作一起发生的操作序列。如块120所示,绑定操作由操作系统或试图引导或配置IOA的其它客户机启动,和包括适配器是否具有MSI能力的块122中的确定。如果没有,控制转到块124,在块124中进行传统层面敏感中断(LSI)配置。否则,控制转到块126,从而操作系统利用作为一个逻辑端口和一些数量MSI的零值对MSI管理器作出管理程序MSI服务portBmr()调用,以便配置IOA。然后,MSI管理器在块128中确定可用于请求的MSI资源是否足够。如果不够,MSI管理器使调用返回到分区操作系统,然后,分区操作系统将传统LSI中断用于IOA(块124)。否则,MSI管理器将控制转到块130,确定将多个MSI与之绑定的下一个可用物理硬件端口,并调用又将MSI与可用端口物理绑定的与硬件封装类有关的bind()例程(块132)。接着,MSI管理器为与新绑定MSI有关的端口更新所有局部数据,和将成功结果返回到操作系统(块134)。
图4例示了与释放操作一起发生的操作序列。如块140所示,当分区操作系统需要释放当前适配器的MSI绑定时,譬如,当在插槽上进行分区断电或动态逻辑分区(DLPPAR)操作时释放它时,启动释放操作。在块142中,操作系统利用要释放的MSI的逻辑端口号、和有关MSI参数的数字的零值作出管理程序MSI服务portBmr()调用。接着,在块144中,MSI管理器确定MSI是否与那个IOA的识别端口绑定,即,MSI管理器对操作系统进行权限检验,以保证操作系统具有进行操作的权限。如果没有,MSI管理器在块146中将错误返回到操作系统。否则,MSI管理器确定MSI端口是否是激活的(块148),并且,如果是,将控制转到块150,隐式地经过deactivate()调用通过硬件封装类去激活端口,指定适当端口号。
响应这个调用,硬件封装类去激活端口(块152)。一旦完成了块152,或如果在块148中确定MSI端口未激活,将控制转到块154,从而MSI管理器调用又从硬件中物理释放MSI绑定的与硬件封装类有关的release()例程(块156)。然后完成释放操作。
此外,如图4所示,在利用逻辑分区的实施例中,管理程序可以强制终止逻辑分区,以便分区不以例示成从块140开始的方式开始或完成MSI绑定的释放。取而代之,如块157所示,管理程序可以通过与MSI管理器的内部管理程序接口直接调用MSI管理器来释放与通过分区标识符“x”标识的分区相关联的绑定。作出响应,和如块158所示,MSI管理器为与分区标识符“x”相关联的绑定扫描它的MSI绑定列表。如果存在任何这样的绑定,MSI管理器将控制转到块148,开始相关绑定的释放。然后,如块159所示,当与分区标识符“x”相关联的所有绑定都得到释放时,MSI管理器返回到管理程序,发出释放已完成的信号。
图5例示了与修改操作,尤其,请求大量MSI的操作一起发生的操作序列。如块160所示,当操作系统需要为IOA修改MSI的绑定时,譬如,当发生不同IOA类型热插替换时,启动修改操作。这个操作从保证相关端口已去激活,在块162中对MSI管理器作出portSet(deactivate)调用,和开始执行去激活端口的去激活例程(块164)开始。去激活例程的操作将在下面结合图7作更详细描述。
接着,随着逻辑端口被去激活,操作系统利用它拥有的逻辑端口和新请求的MSI,通过调用管理程序MSI服务protBmr()调用请求更大量的MSI(块166)。然后,MSI管理器检验操作系统对IOA的权限和检验可用MSI以便进行修改(块168)。如果没有足够的MSI可用,MSI管理器返还数量与以前相同的MSI(块170)。否则,它利用为在调用中映射成操作系统逻辑端口号的物理端口请求的MSI调用硬件封装类bind()例程(块172)。然后,在硬件中作出物理绑定(块174),并将控制返还给MSI管理器,为那个操作系统端口更新局部MSI数据(块176)。接着,在块178中,操作系统通过如块180所示作出queryPe()调用(将在下面结合图8作更详细描述)查询MSI管理器。然后,操作系统可以利用从管理程序查询调用返回的新MSI绑定信息配置IOA。接着,在块182中,操作系统通过如块184所示调用activate()例程(将在下面结合图6作更详细描述)为端口激活MSI。然后,操作系统可以开始使用新MSI中断。
虽然按照本发明可以使用许多不同例程调用接口,但支持绑定/释放/修改操作的一种适用于MSI管理器调用的接口如下:
int64 h_msi_port_bmr(uint64_t token,struct
msi_port_bmr_parms*parms,
uint64_tsizeof_parms)
msi_port_bmr_parms数据结构可以具有如下表I所示的格式:
表I:msi_port_bmr_parms格式
成员名 | 成员类型 | 输入/输出 | 说明 |
slot_id | unit_32 | 输入 | 插槽标识符 |
保留 | unit_8 | N/A | 未用 |
bus_num | unit_8 | 输入 | PCI bus#(用于绑定和修改) |
dev_num | unit_8 | 输入 | PCI dev#(用于绑定和修改) |
func_num | unit_8 | 输入 | PCI func#(用于绑定和修改) |
num_msi_requested | unit_32 | 输入 | 指定与绑定操作有关的请求MSI中断号的数量;指定0意味着从这个bus/dev/func中释放这个MSI端口 |
port_num | unit_16 | 输入/输出 | 指定进行修改/释放操作的MSI端口号;这是MVE标识符。在绑定操作中应该输入成0和由管理程序设置 |
message_data | unit_16 | N/A输出 | 与DMA port_addr一起用于为那个功能选择/索引MSI的消息数据 |
port_addr | unit_64 | 输出 | 绑定MSI的MSI端口地址 |
num_msi_assigned | unit_32 | 输出 | 实际上有多少个中断与这个MSI端口绑定/重新指定给这个MSI端口的来自管理程序的结果 |
local_rc | unit_32 | 输出 | 指示附加错误隔离值、由管理程序定义和对分区没有特定语义的详细返回码 |
该接口可以支持如下表II所示的返回码:
表II:返回码
显式 | 细节 | 说明 |
H_SUCCESS | GEN_BASE_SUCCESS | 成功 |
H_PRIVILEGE | GEN_PRIV_INVALID_ADDR | 坏缓冲器指针 |
H_PRIVILEGE | GEN_PRIV_INVALID_LEN | 无效缓冲器长度 |
H_PARAMETER | GEN_INVALID_PARM_1 | 无效slot_id,或未指定给分区的插槽 |
H_PARAMETER | GEN_INVALID_PARM2 | 无效MSI端口指定 |
H_HARDWARE | GEN_HARDWARE_ERROR | 任何硬件错误或试图为不支持端口动态修改的硬件修改激活MSI端口 |
H_AUTHORITY | GENERAL_AUTHORITY | 调用分区不拥有插槽LRDRC |
H_RESOURCE | GENERAL_RESOURCE_ERROR | 无MSI资源可用 |
管理程序将在interrupt_range中传递的值应用于指定MSI端口并在interrupt_range的返回值中返回所得中断号(number)绑定。为了收集用于绑定的中断基值或修改,该调用后面可以接MSI QueryPE调用。
如果传递的interrupt_range值小于当前建立的绑定,管理程序将那个绑定减少到大于等于传递值的2的下一个较低乘方值和在interrupt_range中返回这个结果。隐式地释放超过这个降低值的中断号和使它们返回到可用在那个PHB上的MSI中断库中,和为这些中断号解除分区利用这些MSI中断和任何相关资源(XIVE)的权限。也就是说,隐式地解除分区对与这些释放中断相关联的平台XIVE的权限。
如果传递的interrupt_range值大于当前建立的绑定,管理程序试图将那个绑定增加到大于等于传递值的2的下一个较高乘方值和在interrupt_range中返回这个结果。如果没有足够多的可用中断号满足这个请求扩充这个绑定,管理程序不修改建立的绑定和返回在interrupt_range参数中绑定的已建立中断数。
如果管理程序可以增加与那个MSI端口相关联的MSI中断的数量,管理程序隐式地授权与附加中断号相关联的分区XIVE。也就是说,将分区授权给范围从建立的interrupt_base到那个值加上新interrupt_range值减去1的XIVE的平台中断号。但是,分区必须将这些XIVE设置成能够将它们用作中断向量。
对于绑定操作,如果port_num参数被传递成零,管理程序试图将interrupt_range个MSI与可用MSI端口绑定。如果有足够的MSI资源可用,管理程序返回port_num参数中的MSI端口号、port_addr参数中的端口地址、在interrupt_num参数中绑定的MSI的数量和与那个interrupt_range值(SMI数0)相关联的开始或基本平台中断号。
对于修改操作,当port_num参数被传递成非零和num_msi_requested>0时,port_num参数指定分区想修改的已建立绑定的MSI MVE标识符。如果传递的port_num参数与为此绑定的MSI端口,或为为这个分区绑定的端口传递的interrupt_range值不匹配,管理程序返回H_parameter和拒绝操作。如果在这个调用的时候激活MSI端口,并且硬件不允许动态修改MVE,管理程序利用h_hardware返回码值拒绝这个调用。
对于释放操作,当port_num参数被传递成非零和num_msi_requested=0时, port_num参数指定分区想释放的已建立绑定的MSI MVE标识符。如果传递的port_num参数是零或与为这个分区与MSI绑定的端口不匹配,管理程序返回H_Parameter并抑制操作。否则,管理程序释放MSI端口和与这个端口地址相关联的MSI中断号。
作为释放MSI资源的一部分,如果还没有禁用,管理程序首先禁用相关XIVR,然后禁用端口。一旦完成了这个调用,就隐式地废除分区对已经与这个端口绑定的XIVR的权限。然后,清除这个端口绑定的所有管理程序记录。
一般说来,管理程序可以在去激活状态下利用相关绑定中断号初始化MVE。去激活状态使MSI端口不对针对那个地址的DMA操作作出响应,并且IOA在端口处在去激活状态下时在PCI总线上接收Master Abort。在利用管理程序调用显式地绑定之后,或如果根据前分区激活隐式地绑定,分区激活端口。激活MSI端口使PHB硬件能够响应作为DMA目标的MSI端口地址,和定义可以传信这个端口地址上的MSI的有效辅助总线、设备、和功能号的范围。
如上所述,第二种调用包括用于动态激活和去激活MVE或MSI端口的激活和去激活操作。例如,图6例示了可关于激活操作发生的操作序列。如块200所示,激活操作由需要激活逻辑端口的操作系统通过对MSI管理器作出portSet(activate)调用和指定要激活的逻辑端口启动。接着,在块202中,MSI管理器确定操作系统是否拥有端口和端口是否与MSI绑定。如果这些条件之一不成立,MSI管理器将错误返回到操作系统(块204)。否则,将控制转到块206,在块206中,MSI管理器转换(resolve)操作系统的逻辑端口,然后转到块208,利用转换的端口号,通过调用activate()例程访问硬件封装类。作为这个调用的结果,硬件封装类通过将MSI端口硬件寄存器设置成激活的,物理激活转换的端口(块210)。然后,硬件封装类返回到MSI管理器,然后,MSI管理器更新局部端口信息以指示端口现在是激活的(块212),并返回到操作系统。
图7例示了关于去激活操作一起发生的操作序列。如块220所示,去激活操作由需要去激活逻辑端口的操作系统通过对MSI管理器作出portSet(deactivate)调用和指定要去激活的逻辑端口启动。接着,在块222中,MSI管理器确定操作系统是否拥有端口和端口是否是激活的。如果这些条件之一不成立,MSI管理器将错误返回到操作系统(块224)。否则,将控制转到块226,在块226中,MSI管理器转换操作系统的逻辑端口,然后转到块228,利用转换的端口号,通过调用deactivate()例程访问硬件封装类。作为这个调用的结果,硬件封装类通过将MSI端口硬件寄存器设置成不激活,物理去激活转换的端口(块230)。然后,硬件封装类返回到MSI管理器,然后,MSI管理器更新局部端口信息以指示端口现在是未激活的(块232),并且返回到操作系统。
虽然按照本发明可以使用许多不同例程调用接口,但支持激活/去激活操作的一种适用于MSI管理器调用的接口如下:
int64h_msi_port set(uint64_t toke,struct
msi_port_set_parms*parms,
uint64_t sizeof_parms)
msi_port_set_parms数据结构可以具有如下表III所示的格式:
表III:msi_port_set_parms格式
成员名 | 成员类型 | 输入/输出 | 说明 |
操作 | unit 32 | 输入 | 1=激活MSI资源2=去激活MSI资源 |
slot_id | unit_32 | 输入 | 对应于来自PFDS的插槽LR DRC,标识将作出这个动作的插槽 |
port_num | unit_16 | 输入 | 指定进行修改/释放,激活,或去激活操作的MSI端口;接受与绑定操作有关的指定端口。这是MVE标识符 |
保留 | unit_16 | N/A | 未用 |
loCal_rc | unit_32 | 输出 | 指示附加错误隔离值、由管理程序定义和对分区没有特定语义的详细返回码 |
该接口可以支持如下表IV所示的返回码:
表IV:返回码
显式 | 细节 | 说明 |
H_SUCCESS | GEN_BASE_SUCCESS | 成功 |
H_PRIVILEGE | GEN_PRIV_INVALID_ADDR | 坏缓冲器指针 |
H_PRIVILEGE | GEN_PRIV_INVALID_LEN | 无效缓冲器长度 |
H_PARAMETER | GEN_INVALID_PARM_1 | 无效slot_id,或未指定给分区的插槽 |
H_PARAMETER | GEN_INVALID_PARM_2 | 无效MSI端口指定 |
H_HARDWARE | GEN_HARDWARE_ERROR | 任何硬件错误或试图为不支持端口动态修改的硬件修改激活MSI端口 |
H_AUTHORITY | GENERAL_AUTHORITY | 调用分区不拥有插槽LR_DRC |
借助于这个调用,分区可以告诉管理程序去激活MSI端口。作为改变对设备的MSI分配的平台操作的一部分,如DLPAR或热插(插槽同时维护)操作、安装新设备驱动器等,分区去激活端口。另外,如果硬件要求,平台可能需要去激活MSI端口,以便修改中断号范围或总线/设备/功能确认范围。
第三种调用包括支持检索有关当前MSI可用性和绑定的逻辑信息的查询操作。例如,在许多实施例中,最好使查询操作返回像用于标识那个PHB中的可能多个端口当中的那个端口的端口索引、作为DMA目标的那个端口的PCI总线地址、PCI MSI数据基值(例如,客户机用于确定编程到IOA中的功能消息数据值的2的乘方倍数)、实际与端口绑定的中断的数量、和与那些中断相关联的开始系统中断号(例如,与那个PHB有关的特定XIVR的平台一般ID)那样的客户机信息。一旦MSI管理器将MSI中断与端口绑定,接着,客户机就自由地以满足PCI MSI结构的任何组合将这些绑定分配给它控制的功能配置空间。
图8例示了可关于查询操作发生的操作序列。如块240所示,查询操作由需要针对操作系统拥有的IOA的所有MSI绑定查询MSI管理器的操作系统通过对MSI管理器作出queryPe()调用和指定它的LPAR索引启动。接着,在块242中,MSI管理器检验调用操作系统是否存在与之绑定的MSI,和如果不存在这样的绑定,返回到操作系统(块244)。否则,MSI管理器利用所有DMA地址信息、开始系统中断号、每个项目的逻辑端口、和与端口绑定的所有MSI检索所有MSI绑定项目(块246)。然后,操作系统将这个返回数据用于配置IOA以便使用MSI中断,或者,在运行时期间,用于其它适当目的(块248)。
虽然按照本发明可以使用许多不同例程调用接口,但支持查询操作的一种适用于MSI管理器调用的接口如下:
int64 h_msi_query_pe(uint64_t toke,struct
msi_query_pe_parms*parms,
uint64_t sizeof_parms)
msi_query_pe_parms数据结构可以具有如下表V所示的格式:
表V:msi_query_pe_parms格式
成员名 | 成员类型 | 输入/输出 | 说明 |
slot_id | unit_32 | 输入 | 对应于来自PFDS的插槽LR DRC,标识将作出这个动作的插槽 |
buff_len | unit_32 | 输入 | 指定PFW提供的缓冲器的长度 |
buff_ptr | unit_64_t | 输入 | 指定PFW存储器中将MSI__Info_structs复制到那里的地址 |
num_msi_entries | unit_32 | 输出 | 返回的MSI_Info_structs数量 |
local_rc | unit_32 | 输出 | 指示附加错误隔离值、由管理程序定义和对分区没有特定语义的详细返回码 |
查询操作可以将具有如下表VI所示的格式的一个或多个MSI_Info_struct返回到客户机:
表VI:MSI_Info_struct格式
成员名 | 类型 | 说明 |
port_addr | unit_64 | 用在其它MSI调用中的MSI端口地址(MVE) |
bit_flags | unit_8 | 如下所述 |
bus_num | unit_8 | 寄存MVE的PCI bus# |
dev_num | unit_8 | 寄存MVE的PCI dev# |
func_num | unit_8 | 寄存MVE的PCI fuc# |
starting_int | unit_32 | 在这个MVE下“MSI 0”的平台中断# |
int_range | unit_32 | 在这个MVE下的中断数量,0指示没有与这个MVE绑定的中断 |
port_numport_num | unit_16 | PHYP访问MSI端口所需的逻辑MSI port#。这是MVE标识符。 |
reservedmessage_data | unit_16 | 与DMA port_addr一起用于为那个功能选择/索引MSI的消息数据的0x8字节倍数的保留结构 |
另外,每个MSI_Info_struct含有可以具有如下表VII所示的格式的bit_flags字段:
表VII:bit_flags格式
位标志名 | 值 | 定义 |
MSI-BOUND | 0×1 | 将MSI端口与特定bus/dev/func绑定 |
MSI-ACTIVE | 0×2 | 激活MSI端口 |
MSI-RESERVED | 0×4 | 将MSI端口与这个可分区端点关联 |
保留 | 0×8-0×80 | 留作将来使用 |
该接口可以支持如下表VIII所示的返回码:
表VIII:返回码
显式 | 细节 | 说明 |
H_SUCCESS | GEN_BASE_SUCCESS | 成功 |
H_PRIVILEGE | GEN_PRIV_INVALID_ADDR | 坏缓冲器指针 |
H_PRIVILEGE | GEN_PRIV_INVALID_LEN | 无效缓冲器长度 |
H_PARAMETER | GEN_INVALID_PARM_1 | 无效slot_id,或未指定给分区的插槽,或插槽不支持MSI |
H_PARAMETER | GEN_INVALID_PARM_2 | 无效MSI_info缓冲器长度 |
H_PARAMETER | GEN_INVELID_PARM_3 | MSI_info缓冲器地址太小,或缓冲器未初始化成0 |
H_HARDWARE | GEN_HARDWARE_ERROR | 任何硬件错误或试图为不支持端口动态修改的硬件修改激活MSI端口 |
H_AUTHORITY | GENERAL_AUTHORITY | 调用分区不拥有插槽LR DRC |
h_msi_quey_pe调用使分区可以获得有关与特定可分区端口(PE)绑定的MSI端口的信息。可分区端点下的每种具有MSI能力PCI功能都需要一种结构,因此,应该提供至少4*(MSI_info_struct)的大小的缓冲器。关于复制到分区固件缓冲器的结构的阵列,没有排序假设。分区固件通过每种结构搜索所需的正确MSI端口号。
其它MSI调用可以直接操纵MSI-BOUND和MSI-ACTIVE位标志。当在引导之间需要静态地将MSI资源与特定PE绑定时,例如,当没有足够的MSI资源可供应给PHB下的所有可分区端点时,可以使用MSI-RESERVED标志。
接着,图9A和9B例示了能够被图1的计算机执行配置IOA,和利用如上所述的各种调用实现MSI资源与中断设施的动态绑定的初始化例程的程序流程。该例程被例示成存在两个潜在开始点260和262,分别代表操作系统调用管理程序获取特定插槽,并且系统管理者对逻辑分区加电,要不然初始化逻辑分区。
与开始点无关,例程从块264开始,逻辑分区中的操作系统开始配置IOA。在这个块中,可以执行像IOA配置、像与PCI总线探测相关联那样的寄存器读写、配置桥接器和辅助总线、和解析每种PCI功能下的PCI能力结构链那样的操作。
接着,在块266中,分区操作系统确定IOA是否具有MSI能力。如果没有,将控制转到块268,以传统方式配置IOA以使用LSI中断。否则,将控制转到块270,在块270中,分区操作系统对MSI管理器作出port_bmr(绑定)调用,利用MSI管理器启动绑定操作。通常,OS请求数量与IOA MSI/MSI-X能力结构最大MSI中断数相对应的MSI中断,但是,如环境需要,OS可以请求少一点MSI中断。
接着,在块272中,MSI管理器检验其相关PHB的局部MSI数据,然后将控制转到块274,以便确定MSI资源是否可用。如果没有MSI资源可用,将控制转到块268,以便配置IOA以使用LSI中断。否则,将控制转到块276,在块276中,MSI管理器对硬件封装程序作出bind()调用,这将导致硬件封装程序物理绑定适当MSI资源(块278)。接着,在块280中,MSI更新其局部MSI数据。
接着,在块282中,分区操作系统对MSI管理器作出queryPe()调用,然后,MSI管理器确定调用者是否拥有MSI项目(即,调用者是否拥有MSI绑定)。如果没有,在块286中将错误返回到调用者。否则,将控制转到块288,在块288中,MSI管理器将它的局部MSI数据返回到分区操作系统。
接着,在块290中,分区操作系统配置IOA和作出portSet(激活)调用,以便激活与IOA使用的MSI资源绑定的端口。然后,MSI管理器经过上面结合图6描述的激活流。一旦端口已经激活,分区操作系统接着可以适当地开始使用MSI中断(块294)。
作为以上述方式配置IOA的例子,考虑要求每种功能一个中断的八功能IOA。IOA的配置由其中请求MSI管理器将8个MSI与一个端口绑定的分区操作系统或设备驱动器启动。然后,分区操作系统将每种功能的消息地址设置那一个端口地址,并在每种功能中将MME字段设置成‘000’b。然后,分区操作系统将功能0中的消息数据字段设置成‘0x00’,将功能1中的消息数据字段设置成‘0x01’,等等,并且,在0x00到0x07范围内利用唯一整数值编程每个功能消息数据。与此不同,对于每种功能两个中断的二功能IOA,分区操作系统将请求MSI管理器将4个MSI与一个端口绑定。然后,分区操作系统将每种功能中的消息地址设置那一个端口地址,在每种功能(两个中断)中将MME字段设置成‘001’b,并且将功能0中的消息数据字段设置成‘0x00’,将功能1中的消息数据字段设置成‘0x01’,等等。然后,在每一种情况下,分区操作系统都利用与端口的开始系统中断号加上编程到那个功能消息数据寄存器中的MSI中断号相关联的XIVR管理每种功能的中断。
如上所述,在本发明的一些实施例中,MSI管理器是与平台无关的,并且通过硬件封装程序与底层硬件平台接口。在这方面,硬件封装程序通常通过例示(instantiate)MSI管理器类的对象,能够在PHB或根复合体的初始化期间动态地创建MSI管理器。另外,为了利用与底层硬件平台有关的适当细节初始化MSI管理器,硬件封装程序最好以供应给MSI管理器类的构造方法的调用参数的形式将一组抽象参数提供给MSI管理器。
可替代地,按照本发明的一些实施例可以将MSI管理器实现成一组程序函数调用并不含有面向对象类结构或类构造函数。这样的可替代实施例可以像供这样的函数调用访问提供MSI管理器客户机操作的数据结构那样,提供硬件MSI特性和能力的MSI管理器抽象化。将硬件抽象化的其它机制针对本领域的普通技术人员来说是显而易见的。一些实施例还可以根据硬件MSI能力及其构造函数抽象,例如,将每个MSI管理器分别与特定MSI端口地址和可以与那个端口绑定的MSI中断相关联地提供MSI管理器的多个实例。在其它实施例中,可以使用含有可以根据硬件MSI能力绑定的多个MSI端口和MSI中断组合和含有多个其构造函数抽象的单个MSI管理器。
抽象参数在不同实施例中可以不同,和按照图2B的实施例,可以包括像PHB或根复合体的MSI端口的数量、PHB或根复合体的MSI的数量、PHB或根复合体管理的特定插槽的MSI的数量、可以指定给MSI端口的可分区端点或插槽的数量、可以与那个PHB上的MSI组合的每个MSI端口的端口地址、可以与MSI端口绑定的所有顺序MSI当中的第一MSI的开始平台中断号、和可以与MSI端口绑定的所有顺序MSI当中的第一MSI的开始MSI消息数据值等。如何创建构造函数参数,提供端口属性参数的抽象,以便创建如,例如,图2B所示的MSI管理器内部表,以及如何创建与描述单个MSI端口的参数相对的、使MSI管理器能够管理多个MSI端口和MSI中断的参数表对于本领域的普通技术人员来说是显而易见的。
按照本发明的实施例解决了困扰传统设计的许多问题。例如,这样的实施例支持操作系统或设备驱动器软件与主固件之间的抽象和可移植接口的定义。这样的实施例还能够定义以对于操作系统和设备驱动器来说抽象和透明的方式,根据PHB、适配器和逻辑分区配置管理PHB MSI设施的高度可变配置的主固件策略。这样的实施例还能够在诸如设备驱动器的多个客户机程序之间动态地共享MSI资源库,并且IOA也共享PHB。这样的实施例还能够定义硬件设施抽象化以使MSI管理能够与特定硬件设计无关,使得MSI管理功能和与操作系统和设备驱动器软件的接口可以很小的修改或没有修改地直接移植到其它硬件平台。另外,这样的实施例能够为错误纠正、同时维护、分区重新引导、和影响适配器的逻辑分区动态资源管理定义MSI状态和策略。
示范性的主固件策略包括管理MSI资源绑定,以便保证利用相同IOA资源重新引导分区或断电和以后再加电的分区也能够重新建立以前的绑定。这些策略保证了分区能够每次分区引导一致地利用MSI资源重新配置适配器,而与其它分区的MSI绑定或共享MSI硬件设施的适配器无关。按照本发明的实施例将从硬件无关性和封装这样策略的MSI管理器的可移植性中获益。
主固件策略还可以包括将所有逻辑分区的整个硬件平台的MSI资源表示成虚拟MSI硬件资源。这样的实施例将从硬件无关性和封装确定向共享平台的MSI硬件的多个逻辑分区当中的任何一个逻辑分区呈现实际硬件MSI资源的哪一个的策略的MSI管理器的可移植性中获益。
按照本发明的实施例还可以提供与MSI管理器的抽象硬件封装接口,例如,表示适用于配置和激活MSI硬件资源,但与特定硬件寄存器和任何特定平台的顺序实现无关的原始操作。这样的实施例还可以可编程地将硬件封装接口直接与MSI管理器客户机接口相关联,在有效地具有MSI管理器的功能的同时省却了真正MSI管理器对象。这样的实施例存在不含抽象和可移植MSI管理器对象的缺点,不过,提供了抽象MSI客户机接口,和在这样客户机接口的实现中,可以从硬件接口的抽象化中获益。
对这里所述实施例的各种修改针对本领域的普通技术人员来说是显而易见的。例如,虽然这里讨论的许多实施例支持将PCI 2的乘方组MSI映射到一个端口,但本领域的普通技术人员应该认识到,MSI中断号可以与组数不是2的乘方,而是由客户机请求的任何数字的MSI端口绑定,并且MSI管理器可以修改成绑定和管理多个MSI到中断范围不只局限于2的乘方倍数的MSI端口的映射。
可以不偏离本发明精神和范围地对所例示的实施例作出其它修改。因此,本发明的范围由所附权利要求书限定。
Claims (27)
1.一种在包括硬件平台的计算机中管理消息传信中断(MSI)资源的方法,该方法包含:
管理计算机中映射硬件平台支持的MSI资源共享库当中的MSI资源的、与驻留在计算机中的至少一个中断设施的多个MSI绑定;和
响应来自计算机中能够访问MSI资源共享库的多个客户机当中的第一客户机的请求,动态地创建将MSI资源共享库当中第一客户机可访问的第一MSI资源映射到中断设施的MSI绑定。
2.根据权利要求1所述的方法,进一步包含响应来自第一客户机的解开请求,动态地释放MSI绑定。
3.根据权利要求1所述的方法,进一步包含响应来自第一客户机的修改请求,动态地减少或增加现有绑定中MSI资源的数量。
4.根据权利要求1所述的方法,进一步包含响应来自第一客户机的查询请求,提供与MSI资源共享库相关联的配置数据。
5.根据权利要求4所述的方法,其中,配置数据标识至少一个以前的绑定。
6.根据权利要求4所述的方法,其中,对于MSI绑定,配置数据包括与第一MSI资源与之绑定的中断设施中的MSI端口相关联的端口地址、与MSI端口相关联的端口号、端口状态、与第一MSI资源相关联的开始中断号、和映射到MSI端口的MSI中断的数量。
7.根据权利要求4所述的方法,其中,MSI绑定将第一MSI资源与端口绑定,该方法进一步包含响应来自第一客户机的激活请求,动态地激活该端口。
8.根据权利要求7所述的方法,进一步包含响应来自第一客户机的去激活请求,动态地去激活该端口。
9.根据权利要求1所述的方法,进一步包含在动态地创建MSI绑定之前对第一客户机进行权限检验。
10.根据权利要求1所述的方法,其中,动态地创建MSI绑定包括接收平台无关中断管理器中请求平台特有封装程序创建与平台无关中断管理器的MSI绑定、并利用平台特有封装程序创建MSI绑定的请求。
11.根据权利要求1所述的方法,其中,每个MSI资源包含MSI中断,并且其中中断设施包含至少一个MSI端口。
12.根据权利要求1所述的方法,其中,硬件平台包括配置成提供对多个输入/输出适配器(IOA)的访问的PCI主桥接器(PHB),其中,中断设施包含与PHB相关联的多个MSI端口,并且其中MSI资源共享库包含PBH管理的多个MSI中断。
13.根据权利要求12所述的方法,其中,管理多个MSI绑定包括实现为通过PHB访问的每个IOA保证最少量MSI资源的策略。
14.一种装置,包含:
包括中断设施的硬件平台;
多个客户机共享的消息传信中断(MSI)资源共享库;和
配置成管理映射MSI资源共享库当中的MSI资源的、与中断设施的多个MSI绑定,包括响应来自多个客户机当中的第一客户机的请求,动态地创建将MSI资源共享库当中第一客户机可访问的第一MSI资源映射到中断设施的MSI绑定的程序代码。
15.根据权利要求14所述的装置,其中,程序代码被进一步配置成响应来自第一客户机的解开请求,动态地释放MSI绑定。
16.根据权利要求14所述的装置,其中,程序代码被进一步配置成响应来自第一客户机的修改请求,动态地减少或增加现有绑定中MSI资源的数量。
17.根据权利要求14所述的装置,其中,程序代码被进一步配置成响应来自第一客户机的查询请求,提供与MSI资源共享库相关联的配置数据。
18.根据权利要求17所述的装置,其中,配置数据标识至少一个以前的绑定。
19.根据权利要求17所述的装置,其中,对于MSI绑定,配置数据包括与第一MSI资源与之绑定的中断设施中的MSI端口相关联的端口地址、与MSI端口相关联的端口号、端口状态、与第一MSI资源相关联的开始中断号、和映射到MSI端口的MSI中断的数量。
20.根据权利要求14所述的装置,其中,MSI绑定将第一MSI资源与端口绑定,程序代码被进一步配置成响应来自第一客户机的激活请求,动态地激活该端口。
21.根据权利要求20所述的装置,其中,程序代码被进一步配置成响应来自第一客户机的去激活请求,动态地去激活该端口。
22.根据权利要求14所述的装置,其中,程序代码被进一步配置成去激活和释放与之相关联的绑定还没有释放就终止的客户机相关联的绑定。
23.根据权利要求14所述的装置,其中,程序代码被进一步配置成在动态地创建MSI绑定之前对第一客户机进行权限检验。
24.根据权利要求14所述的装置,其中,程序代码被进一步配置成通过接收平台无关中断管理器中请求平台特有封装程序创建与平台无关中断管理器的MSI绑定、并利用平台特有封装程序创建MSI绑定的请求,动态地创建MSI绑定。
25.根据权利要求14所述的装置,其中,每个MSI资源包含MSI中断,并且其中中断设施包含至少一个MSI端口。
26.根据权利要求14所述的装置,其中,硬件平台包括配置成提供对多个输入/输出适配器(IOA)的访问的PCI主桥接器(PHB),其中,中断设施包含与PHB相关联的多个MSI端口,并且其中MSI资源共享库包含PBH管理的多个MSI中断。
27.根据权利要求26所述的装置,其中,程序代码被进一步配置成通过实现为通过PHB访问的每个IOA保证最少量MSI资源的策略,管理多个MSI绑定。
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US11/467,816 US20080126617A1 (en) | 2006-08-28 | 2006-08-28 | Message Signaled Interrupt Management for a Computer Input/Output Fabric Incorporating Dynamic Binding |
US11/467,816 | 2006-08-28 |
Publications (1)
Publication Number | Publication Date |
---|---|
CN101135982A true CN101135982A (zh) | 2008-03-05 |
Family
ID=39160091
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN200710108861.1A Pending CN101135982A (zh) | 2006-08-28 | 2007-06-05 | 在计算机中管理消息传信中断资源的方法和装置 |
Country Status (2)
Country | Link |
---|---|
US (1) | US20080126617A1 (zh) |
CN (1) | CN101135982A (zh) |
Cited By (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102906705A (zh) * | 2010-06-23 | 2013-01-30 | 国际商业机器公司 | 将消息信号中断转换为对客户操作系统的i/o适配器事件通知 |
CN107861803A (zh) * | 2017-10-31 | 2018-03-30 | 湖北三江航天万峰科技发展有限公司 | 一种基于中断的xp系统下cpci总线rs422通信驱动方法 |
CN108139932A (zh) * | 2015-10-16 | 2018-06-08 | 高通股份有限公司 | 关闭关键执行路径的任务信令 |
CN111722916A (zh) * | 2020-06-29 | 2020-09-29 | 长沙新弘软件有限公司 | 一种通过映射表处理msi-x中断的方法 |
Families Citing this family (17)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US7574551B2 (en) * | 2007-03-23 | 2009-08-11 | International Business Machines Corporation | Operating PCI express resources in a logically partitioned computing system |
US7805556B2 (en) * | 2007-05-01 | 2010-09-28 | Ricoh Company, Ltd. | Interrupt control apparatus, bus bridge, bus switch, image processing apparatus, and interrupt control method |
US8495271B2 (en) | 2010-08-04 | 2013-07-23 | International Business Machines Corporation | Injection of I/O messages |
US8549202B2 (en) * | 2010-08-04 | 2013-10-01 | International Business Machines Corporation | Interrupt source controller with scalable state structures |
US20120036302A1 (en) | 2010-08-04 | 2012-02-09 | International Business Machines Corporation | Determination of one or more partitionable endpoints affected by an i/o message |
US9088569B2 (en) * | 2011-05-12 | 2015-07-21 | International Business Machines Corporation | Managing access to a shared resource using client access credentials |
US9152588B2 (en) | 2012-10-16 | 2015-10-06 | Apple Inc. | Race-free level-sensitive interrupt delivery using fabric delivered interrupts |
US9009377B2 (en) * | 2012-11-01 | 2015-04-14 | Apple Inc. | Edge-triggered interrupt conversion in a system employing level-sensitive interrupts |
US9311243B2 (en) | 2012-11-30 | 2016-04-12 | Intel Corporation | Emulated message signaled interrupts in multiprocessor systems |
US9870335B2 (en) * | 2014-04-03 | 2018-01-16 | International Business Machines Corporation | Implementing sideband control structure for PCIE cable cards and IO expansion enclosures |
US9535859B2 (en) | 2014-04-17 | 2017-01-03 | International Business Machines Corporation | Sharing message-signaled interrupts between peripheral component interconnect (PCI) I/O devices |
US10496444B2 (en) * | 2015-10-02 | 2019-12-03 | Hitachi, Ltd. | Computer and control method for computer |
US10404747B1 (en) * | 2018-07-24 | 2019-09-03 | Illusive Networks Ltd. | Detecting malicious activity by using endemic network hosts as decoys |
CN109714218B (zh) * | 2019-03-05 | 2021-11-23 | 佛山点度物联科技有限公司 | 一种物联网服务器配置信息同步方法 |
CN113806273B (zh) * | 2020-06-16 | 2024-04-09 | 英业达科技有限公司 | 快速周边组件互连数据传输控制系统 |
US11550745B1 (en) * | 2021-09-21 | 2023-01-10 | Apple Inc. | Remapping techniques for message signaled interrupts |
CN114726657B (zh) * | 2022-03-21 | 2024-06-14 | 京东科技信息技术有限公司 | 中断管理和数据收发管理的方法、装置及智能网卡 |
Family Cites Families (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US20070061441A1 (en) * | 2003-10-08 | 2007-03-15 | Landis John A | Para-virtualized computer system with I/0 server partitions that map physical host hardware for access by guest partitions |
US7048877B2 (en) * | 2004-03-30 | 2006-05-23 | Intel Corporation | Efficiently supporting interrupts |
US7478178B2 (en) * | 2005-04-22 | 2009-01-13 | Sun Microsystems, Inc. | Virtualization for device sharing |
US7516252B2 (en) * | 2005-06-08 | 2009-04-07 | Intel Corporation | Port binding scheme to create virtual host bus adapter in a virtualized multi-operating system platform environment |
-
2006
- 2006-08-28 US US11/467,816 patent/US20080126617A1/en not_active Abandoned
-
2007
- 2007-06-05 CN CN200710108861.1A patent/CN101135982A/zh active Pending
Cited By (7)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102906705A (zh) * | 2010-06-23 | 2013-01-30 | 国际商业机器公司 | 将消息信号中断转换为对客户操作系统的i/o适配器事件通知 |
CN102906705B (zh) * | 2010-06-23 | 2016-02-24 | 国际商业机器公司 | 将消息信号中断转换为对客户操作系统的i/o适配器事件通知 |
CN108139932A (zh) * | 2015-10-16 | 2018-06-08 | 高通股份有限公司 | 关闭关键执行路径的任务信令 |
CN108139932B (zh) * | 2015-10-16 | 2021-08-24 | 高通股份有限公司 | 关闭关键执行路径的任务信令 |
CN107861803A (zh) * | 2017-10-31 | 2018-03-30 | 湖北三江航天万峰科技发展有限公司 | 一种基于中断的xp系统下cpci总线rs422通信驱动方法 |
CN111722916A (zh) * | 2020-06-29 | 2020-09-29 | 长沙新弘软件有限公司 | 一种通过映射表处理msi-x中断的方法 |
CN111722916B (zh) * | 2020-06-29 | 2023-11-14 | 长沙新弘软件有限公司 | 一种通过映射表处理msi-x中断的方法 |
Also Published As
Publication number | Publication date |
---|---|
US20080126617A1 (en) | 2008-05-29 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101135982A (zh) | 在计算机中管理消息传信中断资源的方法和装置 | |
US8725914B2 (en) | Message signaled interrupt management for a computer input/output fabric incorporating platform independent interrupt manager | |
US5307491A (en) | Layered SCSI device driver with error handling circuit providing sense data from device directly to the driver on the occurrence of an error | |
US5566346A (en) | System for constructing hardware device interface software systems independent of operating systems including capability of installing and removing interrupt handlers | |
US9250947B2 (en) | Determining placement fitness for partitions under a hypervisor | |
US5027271A (en) | Apparatus and method for alterable resource partitioning enforcement in a data processing system having central processing units using different operating systems | |
JP4756603B2 (ja) | データプロセッサ | |
US4747040A (en) | Dual operating system computer | |
US6148361A (en) | Interrupt architecture for a non-uniform memory access (NUMA) data processing system | |
US8281315B2 (en) | Method, system, and storage medium for managing computer processing functions | |
US9176713B2 (en) | Method, apparatus and program storage device that provides a user mode device interface | |
US7200695B2 (en) | Method, system, and program for processing packets utilizing descriptors | |
US10289564B2 (en) | Computer and memory region management method | |
US7840773B1 (en) | Providing memory management within a system management mode | |
KR20040065981A (ko) | 스레드 유형에 근거한 컴퓨터 자원의 동적 할당 | |
KR20070100367A (ko) | 하나의 가상 머신에서 다른 가상 머신으로 메모리를동적으로 재할당하기 위한 방법, 장치 및 시스템 | |
TW505855B (en) | Parallel software processing system | |
US20090070769A1 (en) | Processing system having resource partitioning | |
KR102568906B1 (ko) | PCIe 디바이스 및 그 동작 방법 | |
KR102570943B1 (ko) | PCIe 디바이스 및 그 동작 방법 | |
KR102568909B1 (ko) | PCIe 펑션 및 그 동작 방법 | |
JP2003531434A (ja) | Javaコンピュータプログラムを実行するためのコンピュータ方法およびシステム | |
US20240289295A1 (en) | PCIe DEVICE | |
US10853284B1 (en) | Supporting PCI-e message-signaled interrupts in computer system with shared peripheral interrupts | |
US7840772B2 (en) | Physical memory control using memory classes |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
C06 | Publication | ||
PB01 | Publication | ||
C10 | Entry into substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
AD01 | Patent right deemed abandoned |
Effective date of abandoning: 20080305 |
|
C20 | Patent right or utility model deemed to be abandoned or is abandoned |