一种在jailhouse实现PCIE设备隔离的方法转让专利

申请号 : CN202310701490.7

文献号 : CN116431293B

文献日 :

基本信息:

PDF:

法律信息:

相似专利:

发明人 : 崔彦召杨晓骅黄磊陈阳平张云飞

申请人 : 麒麟软件有限公司

摘要 :

本发明涉及一种在jailhouse实现PCIE设备隔离的方法,方法包括:修改Host OS设备树文件,防止Host OS初始化PCIE总线和gic‑its;修改Host OS在jailhouse中的配置文件,在jailhouse hypervisor层会对PCIE和gic‑its进行资源分配,以供Guest OS来使用;修改Guest OS设备树文件,使得所有PCIE和gic‑its相关的初始化过程都由Guest OS来完成;修改Guest OS在jailhouse中的配置文件,以便jailhouse初始化Guest OS资源;在jailhouse hypervisor层增加对GICR_PENDBASER寄存器访问权限,用以保证Guest OS中的避免PCIE设备的msi/msix中断能够频繁访问到GICR_PENDBASER寄存器资源。

权利要求 :

1.一种在jailhouse实现PCIE设备隔离的方法,其特征在于,所述方法包括:

修改Host OS设备树文件,去除PCIE总线描述节点和gic‑its描述节点;

修改Host OS在jailhouse中的配置文件,增加PCIE和gic‑its相关内存段的描述;

修改Guest OS设备树文件,增加PCIE总线描述节点和gic‑its描述节点;

修改Guest OS在jailhouse中的配置文件,增加PCIE和gic‑its相关内存段;

在jailhouse hypervisor层增加对GICR_PENDBASER寄存器访问权限,用以保证Guest OS中的PCIE设备的msi/msix中断能够频繁访问到GICR_PENDBASER寄存器资源;

其中,PCIE总线描述节点和gic‑its描述节点均为linux设备树源文件中的标准格式代码;

Guest OS中的PCIE在jailhouse中的资源包括:

PCIE ECAM资源、PCIE IO资源、PCIE mem32资源和PCIE mem64资源,其中,PCIE ECAM资源包括PCIE ECAM地址空间大小、jailhouse访问PCIE ECAM的权限、PCIE ECAM的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问PCIE ECAM的权限包括读权限、写权限和输入输出权限;

PCIE IO资源包括PCIE IO地址空间大小、jailhouse访问PCIE ECAM的权限、PCIE IO的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;

jailhouse访问PCIE IO的权限包括读权限、写权限和输入输出权限;

PCIE mem32资源包括PCIE mem32地址空间大小、jailhouse访问PCIE mem32的权限、PCIE mem32的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问PCIE mem32的权限包括读权限、写权限和输入输出权限;

PCIE mem64资源包括PCIE mem64地址空间大小、jailhouse访问PCIE mem64的权限、PCIE mem64的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问PCIE mem64的权限包括读权限、写权限和输入输出权限;

当访问GICR_PENDBASER寄存器的时候,hypervisor会进行拦截,进而执行到gicv3_handle_redist_access函数,进一步的会调用mmio_perform_access来执行对GICR_PENDBASER寄存器的读、写或者输入输出操作。

2.根据权利要求1所述的一种在jailhouse实现PCIE设备隔离的方法,其特征在于,Host OS中的gic‑its在jailhouse中的资源包括GIC ITS地址空间大小、jailhouse访问gic‑its内存的权限、gic‑its的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问gic‑its内存的权限包括读权限、写权限和输入输出权限。

3.根据权利要求2所述的一种在jailhouse实现PCIE设备隔离的方法,其特征在于,Host OS中的PCIE在jailhouse中的资源包括:PCIE ECAM资源、PCIE IO资源、PCIE mem32资源和PCIE mem64资源,其中,PCIE ECAM资源包括PCIE ECAM地址空间大小、jailhouse访问PCIE ECAM的权限、PCIE ECAM的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问PCIE ECAM的权限包括读权限、写权限和输入输出权限;

PCIE IO资源包括PCIE IO地址空间大小、jailhouse访问PCIE ECAM的权限、PCIE IO的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;

jailhouse访问PCIE IO的权限包括读权限、写权限和输入输出权限;

PCIE mem32资源包括PCIE mem32地址空间大小、jailhouse访问PCIE mem32的权限、PCIE mem32的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问PCIE mem32的权限包括读权限、写权限和输入输出权限;

PCIE mem64资源包括PCIE mem64地址空间大小、jailhouse访问PCIE mem64的权限、PCIE mem64的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问PCIE mem64的权限包括读权限、写权限和输入输出权限。

说明书 :

一种在jailhouse实现PCIE设备隔离的方法

技术领域

[0001] 本发明涉及PCIe设备领域,具体涉及一种在jailhouse实现PCIE设备隔离的方法。

背景技术

[0002] Jailhouse是用于实现设备隔离的虚拟化软件,是一个基于Hypervisor虚拟化技术的Linux静态分区管理程序,其可以运行linux、裸机程序或RTOS程序。Jailhouse使用Cell单元节点来配置CPU和设备硬件平台的虚拟化功能,且各个节点分配的资源互不干扰。Host OS作为root cell,Guest OS作为inmate cell,一旦Jailhouse被启动,在Inmate空间就会运行相应的程序,也就是说在Linux端分配了相关的硬件资源给Inmate,它完全可以独立控制硬件且不再需要外部系统的支持。
[0003] PCI Express(PCIe)标准的出现是为了满足网络设备对更高带宽、更大灵活性和更好性能的需求。PCIe在首次亮相后已经得到充分开发并广泛应用于许多网络设备。PCIe卡是指一种具有PCIe接口的网络适配器,在主板级连接中用作扩展卡接口。PCI‑E与 PCI‑X 、PCI是具有不同设计和拓扑的三个版本的网络适配器,最新的PCIe卡已经进行了改进,成为选择网卡时的必然趋势。
[0004] Jailhouse可以对PCIE设备进行物理隔离,也就是说可以把PCIE设备当作一种资源分配给各个虚拟机使用。现有的jailhouse设计框架决定了在ARM或ARM64架构CPU隔离PCIE设备不可行,主要存在的问题是PCIE总线初始化和GIC初始化在jailhouse root cell完成,在jailhouse inmate cell拿不到PCIE总线和GIC资源,hypervisor(管理程序)无法把msi、msix中断注入到相应inmate cell。

发明内容

[0005] 本发明的主要目的是针对基于jailhouse现有框架无法把PCIE设备隔离给ARM/ARM64架构CPU inmate cell这一问题,提出一种把PCIE root complex隔离给inmate cell的方法,从而实现PCIE设备的隔离。
[0006] 为了完成上述目的,本发明提供了一种在jailhouse实现PCIE设备隔离的方法,方法包括:
[0007] 修改Host OS设备树文件,防止Host OS初始化PCIE总线和gic‑its;
[0008] 修改Host OS在jailhouse中的配置文件,在jailhouse hypervisor层会对PCIE和gic‑its进行资源分配,以供Guest OS来使用;
[0009] 修改Guest OS设备树文件,使得所有PCIE和gic‑its相关的初始化过程都由Guest OS来完成;
[0010] 修改Guest OS在jailhouse中的配置文件,以便jailhouse初始化Guest OS资源;
[0011] 在jailhouse hypervisor层增加对GICR_PENDBASER寄存器访问权限,用以保证Guest OS中的避免PCIE设备的msi/msix中断能够频繁访问到GICR_PENDBASER寄存器资源。
[0012] 优选的,方法包括:
[0013] 修改Host OS设备树文件,去除PCIE总线描述节点和gic‑its描述节点;
[0014] 修改Host OS在jailhouse中的配置文件,增加PCIE和gic‑its相关内存段的描述;
[0015] 修改Guest OS设备树文件,增加PCIE总线描述节点和gic‑its描述节点;
[0016] 修改Guest OS在jailhouse中的配置文件,增加PCIE和gic‑its相关内存段;
[0017] 在jailhouse hypervisor层增加对GICR_PENDBASER寄存器访问权限,用以保证Guest OS中的PCIE设备msi/msix中断能够访问到GICR_PENDBASER寄存器资源。
[0018] 进一步优选的,Host OS中的gic‑its在jailhouse中的资源包括GIC ITS地址空间大小、jailhouse访问gic‑its内存的权限、gic‑its的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问gic‑its内存的权限包括读权限、写权限和输入输出权限。
[0019] 更进一步优选的,Host OS中的PCIE在jailhouse中的资源包括:
[0020] PCIE ECAM资源、PCIE IO资源、PCIE mem32资源和PCIE mem64资源,其中,[0021] PCIE ECAM资源包括PCIE ECAM地址空间大小、jailhouse访问PCIE ECAM的权限、PCIE ECAM的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问PCIE ECAM的权限包括读权限、写权限和输入输出权限;
[0022] PCIE IO资源包括PCIE IO地址空间大小、jailhouse访问PCIE ECAM的权限、PCIE IO的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问PCIE IO的权限包括读权限、写权限和输入输出权限;
[0023] PCIE mem32资源包括PCIE mem32地址空间大小、jailhouse访问PCIE mem32的权限、PCIE mem32的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问PCIE mem32的权限包括读权限、写权限和输入输出权限;
[0024] PCIE mem64资源包括PCIE mem64地址空间大小、jailhouse访问PCIE mem64的权限、PCIE mem64的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问PCIE mem64的权限包括读权限、写权限和输入输出权限。
[0025] 更进一步优选的,Guest OS中的PCIE在jailhouse中的资源包括:
[0026] PCIE ECAM资源、PCIE IO资源、PCIE mem32资源和PCIE mem64资源,其中,[0027] PCIE ECAM资源包括PCIE ECAM地址空间大小、jailhouse访问PCIE ECAM的权限、PCIE ECAM的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问PCIE ECAM的权限包括读权限、写权限和输入输出权限;
[0028] PCIE IO资源包括PCIE IO地址空间大小、jailhouse访问PCIE ECAM的权限、PCIE IO的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问PCIE IO的权限包括读权限、写权限和输入输出权限;
[0029] PCIE mem32资源包括PCIE mem32地址空间大小、jailhouse访问PCIE mem32的权限、PCIE mem32的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问PCIE mem32的权限包括读权限、写权限和输入输出权限;
[0030] PCIE mem64资源包括PCIE mem64地址空间大小、jailhouse访问PCIE mem64的权限、PCIE mem64的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问PCIE mem64的权限包括读权限、写权限和输入输出权限。
[0031] 更进一步优选的,PCIE总线描述节点和gic‑its描述节点均为linux设备树源文件中的标准格式代码。
[0032] 本发明的有益效果为:
[0033] 本发明通过把PCIE root complex隔离给Guest OS的方法,解决了jailhouse hypervisor不能把msi/msix中断注入给Guest OS的问题。

具体实施方式

[0034] 下面结合本发明的实施例,对本发明实施例中的技术方案进行清楚、完整地描述。在下面的描述中阐述了很多具体细节以便于充分理解本发明,但是本发明还可以采用其他不同于在此描述的其它方式来实施,本领域技术人员可以在不违背本发明内涵的情况下做类似推广,因此本发明不受下面公开的具体实施例的限制。
实施例一
[0035] 本实施例提供了一种在jailhouse实现PCIE设备隔离的方法,具体包括:
[0036] 修改Host OS设备树文件,防止Host OS初始化PCIE总线和gic‑its,在本实施例中,通过去除PCIE总线描述节点和gic‑its描述节点实现的;
[0037] 修改Host OS在jailhouse中的配置文件,在jailhouse hypervisor层会对PCIE和gic‑its进行资源分配,以供Guest OS来使用,在本实施例中,通过增加PCIE和gic‑its相关内存段的描述实现的;
[0038] 修改Guest OS设备树文件,使得所有PCIE和gic‑its相关的初始化过程都由Guest OS来完成,在本实施例中,通过增加PCIE和gic‑its相关内存段实现的;
[0039] 修改Guest OS在jailhouse中的配置文件,以便jailhouse初始化Guest OS资源,在本实施例中,通过增加PCIE总线描述节点和gic‑its描述节点实现的;
[0040] 在jailhouse hypervisor层增加对GICR_PENDBASER寄存器访问权限,避免PCIE设备的msi/msix中断频繁访问GICR_PENDBASER寄存器。
[0041] 在本实施例中,Host OS中的gic‑its在jailhouse中的资源包括GIC ITS地址空间大小、jailhouse访问gic‑its内存的权限、gic‑its的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问gic‑its内存的权限包括读权限、写权限和输入输出权限。
[0042] 在本实施例中,Host OS中的PCIE在jailhouse中的资源包括:
[0043] PCIE ECAM资源、PCIE IO资源、PCIE mem32资源和PCIE mem64资源,其中,[0044] PCIE ECAM资源包括PCIE ECAM地址空间大小、jailhouse访问PCIE ECAM的权限、PCIE ECAM的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问PCIE ECAM的权限包括读权限、写权限和输入输出权限;
[0045] PCIE IO资源包括PCIE IO地址空间大小、jailhouse访问PCIE ECAM的权限、PCIE IO的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问PCIE IO的权限包括读权限、写权限和输入输出权限;
[0046] PCIE mem32资源包括PCIE mem32地址空间大小、jailhouse访问PCIE mem32的权限、PCIE mem32的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问PCIE mem32的权限包括读权限、写权限和输入输出权限;
[0047] PCIE mem64资源包括PCIE mem64地址空间大小、jailhouse访问PCIE mem64的权限、PCIE mem64的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问PCIE mem64的权限包括读权限、写权限和输入输出权限。
[0048] 在本实施例中,修改Guest OS设备树文件,增加PCIE总线描述节点和gic‑its描述节点。
[0049] 在本实施例中,Guest OS中的PCIE在jailhouse中的资源包括(这部分增加的内存段与Host OS中的PCIE在jailhouse中的资源完全相同,因此,不再详细赘述代码内容。):
[0050] PCIE ECAM资源、PCIE IO资源、PCIE mem32资源和PCIE mem64资源,其中,[0051] PCIE ECAM资源包括PCIE ECAM地址空间大小、jailhouse访问PCIE ECAM的权限、PCIE ECAM的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问PCIE ECAM的权限包括读权限、写权限和输入输出权限;
[0052] PCIE IO资源包括PCIE IO地址空间大小、jailhouse访问PCIE ECAM的权限、PCIE IO的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问PCIE IO的权限包括读权限、写权限和输入输出权限;
[0053] PCIE mem32资源包括PCIE mem32地址空间大小、jailhouse访问PCIE mem32的权限、PCIE mem32的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问PCIE mem32的权限包括读权限、写权限和输入输出权限;
[0054] PCIE mem64资源包括PCIE mem64地址空间大小、jailhouse访问PCIE mem64的权限、PCIE mem64的物理地址和虚拟地址,其中,物理地址和虚拟地址两者在jailhouse中采取线性映射;jailhouse访问PCIE mem64的权限包括读权限、写权限和输入输出权限。
[0055] 在本实施例中,在jailhouse hypervisor层增加对GICR_PENDBASER寄存器访问权限,因为PCIE设备的msi/msix中断会频繁访问GICR_PENDBASER寄存器。实施例二
[0056] 本实施例在实施例一的基础上进行运行的。
[0057] 本实施例提供了一种在jailhouse实现PCIE设备隔离的方法,具体包括:
[0058] 1、修改Host OS设备树文件,去除PCIE总线描述节点和gic‑its描述节点,目的是不让Host OS初始化PCIE总线和gic‑its。
[0059] 2、修改Host OS在jailhouse中的配置文件,增加PCIE和gic‑its相关内存段的描述。这是因为,在jailhouse hypervisor层会对PCIE和gic‑its进行资源分配,以供Guest OS来使用。
[0060]          /* GIC ITS */
[0061]          {
[0062]                .phys_start = 0x29920000,
[0063]                .virt_start = 0x29920000,
[0064]                .size = 0x20000,
[0065]                .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |[0066]                      JAILHOUSE_MEM_IO,
[0067]          },
[0068] (以上代码表示把GIC ITS作为资源划分给hypervisor。其中.phys_start和.virt_start字段表征的是GIC ITS的物理地址和虚拟地址,在jailhouse中采取线性映射,所以这里物理地址和虚拟地址相等。字段.size表征GIC ITS地址空间大小。字段.flags表征jailhouse访问此段内存的权限,JAILHOUSE_MEM_READ表示读权限,JAILHOUSE_MEM_WRITE表示写权限,JAILHOUSE_MEM_IO表示输入输出权限。)
[0069] /* PCIe ECAM */
[0070]          {
[0071]                .phys_start = 0x40000000,
[0072]                .virt_start = 0x40000000,
[0073]                .size = 0x10000000,
[0074]                .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |[0075]                      JAILHOUSE_MEM_IO,
[0076]          },
[0077] (以上代码表示把PCIE ECAM作为资源分配给hypervisor,并设置访问权限为读、写和输入输出。)
[0078]          /* PCIe IO */
[0079]          {
[0080]                .phys_start = 0x50000000,
[0081]                .virt_start = 0x50000000,
[0082]                .size = 0x8000000,
[0083]                .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |[0084]                      JAILHOUSE_MEM_IO,
[0085]          },
[0086] (以上表示把PCIE IO空间地址资源分配给hypervisor,并设置访问权限为读、写和输入输出。)
[0087]          /* PCIe Mem32 */
[0088]          {
[0089]                .phys_start = 0x58000000,
[0090]                .virt_start = 0x58000000,
[0091]                .size = 0x28000000,
[0092]                .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |[0093]                      JAILHOUSE_MEM_IO,
[0094]          },
[0095] (以上表示把PCIE mem32空间地址资源分配给hypervisor,并设置访问权限为读、写和输入输出。)
[0096]          /* PCIe Mem64 */
[0097]           {
[0098]                .phys_start = 0x1000000000,
[0099]                .virt_start = 0x1000000000,
[0100]                .size = 0x1000000000,
[0101]                .flags = JAILHOUSE_MEM_READ | JAILHOUSE_MEM_WRITE |[0102]                      JAILHOUSE_MEM_IO,
[0103]          },
[0104] (以上表示把PCIE mem64空间地址资源分配给hypervisor,并设置访问权限为读、写和输入输出。)
[0105] 3、修改Guest OS设备树文件,增加PCIE总线描述节点和gic‑its描述节点。所有PCIE和gic‑its相关的初始化过程都由Guest OS来完成。
[0106]          pcie {
[0107]                compatible = "pci‑host‑ecam‑generic";
[0108]                device_type = "pci";
[0109]                #address‑cells = <0x03>;
[0110]                #size‑cells = <0x02>;
[0111]                #interrupt‑cells = <0x01>;
[0112]                reg = <0x00 0x40000000 0x00 0x10000000>;
[0113]                msi‑parent = <0x04>;
[0114]                bus‑range = <0x00 0xff>;
[0115]                interrupt‑map‑mask = <0x00 0x00 0x00 0x07>;
[0116]                interrupt‑map = <0x00 0x00 0x00 0x01 0x01 0x00 0x00 0x00 0x1c 0x04 0x00 0x00 0x00 0x02 0x01 0x00 0x00 0x00 0x1d 0x04 0x00 0x00 
0x00 0x03 0x01 0x00 0x00 0x00 0x1e 0x04 0x00 0x00 0x00 0x04 0x01 0x00 0x00 
0x00 0x1f 0x04>;
[0117]                ranges = <0x1000000 0x00 0x00 0x00 0x50000000 0x00 0xf00000 0x2000000 0x00 0x58000000 0x00 0x58000000 0x00 0x28000000 0x3000000 
0x10 0x00 0x10 0x00 0x10 0x00>;
[0118]          };
[0119] (以上代码是linux设备树源文件标准格式代码,表征的是pcie总线资源。这会在linux kernel加载pcie设备驱动的时候用到。)
[0120] interrupt‑controller@29900000 {
[0121]          compatible = "arm,gic‑v3";
[0122]          #interrupt‑cells = <0x03>;
[0123]          #address‑cells = <0x02>;
[0124]          #size‑cells = <0x02>;
[0125]          ranges;
[0126]          interrupt‑controller;
[0127]          reg = <0x00 0x29900000 0x00 0x20000 0x00 0x29980000 0x00 0x80000 0x00 0x29c00000 0x00 0x10000 0x00 0x29c10000 0x00 0x10000 0x00 
0x29c20000 0x00 0x10000>;
[0128]          interrupts = <0x01 0x09 0x04>;
[0129]          phandle = <0x01>;
[0130]          gic‑its@29920000 {
[0131]                compatible = "arm,gic‑v3‑its";
[0132]                msi‑controller;
[0133]                reg = <0x00 0x29920000 0x00 0x20000>;
[0134]                phandle = <0x05>;
[0135]          };
[0136]     };
[0137] (以上表示linux设备树源文件对GIC的描述。其中节点gic‑its描述是GIC中的ITS模块,这在Linux kernel启动过程中初始化GIC的后会用到。)
[0138] 4、修改Guest OS在jailhouse中的配置文件,增加PCIE和gic‑its相关内存段。这些内存段在jailhouse初始化Guest OS资源的时候会用到。这部分增加的内存段和步骤2中的完全相同,因此,不再详述。
[0139] 5、在jailhouse hypervisor层增加对GICR_PENDBASER寄存器访问权限,因为PCIE设备的msi/msix中断会频繁访问GICR_PENDBASER寄存器。
[0140] static enum mmio_result gicv3_handle_redist_access(void *arg,[0141]                                    struct mmio_access *mmio)[0142] {
[0143] ……
[0144]     switch (mmio‑>address) {
[0145]     case GICR_TYPER:
[0146]          mmio_perform_access(cpu_public‑>gicr.base, mmio);
[0147]          if (cpu_public‑>cpu_id == last_gicr)
[0148]                      mmio‑>value |= GICR_TYPER_Last;
[0149]          return MMIO_HANDLED;
[0150]     case GICR_TYPER + 4:
[0151]          mmio_perform_access(cpu_public‑>gicr.base, mmio);
[0152]          return MMIO_HANDLED;
[0153]     ……
[0154]     case GICR_PENDBASER:
[0155]          mmio_perform_access(cpu_public‑>gicr.base, mmio);
[0156]          return MMIO_HANDLED;
[0157] ……
[0158] }
[0159] 上面代码中, case GICR_PENDBASER之后的代码,含义是在hypervisor访问GICR相关寄存器时增加对GICR_PENDBASER寄存器访问权限。当访问GICR_PENDBASER寄存器的时候,hypervisor会进行拦截,进而执行到gicv3_handle_redist_access函数,进一步的会调用mmio_perform_access来执行对GICR_PENDBASER寄存器的读、写或者输入输出操作。
[0160] 显然,所描述的实施例仅仅是本发明的一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。