这里主要介绍ITS所产生的LPI中断的虚拟化。首先对ITS寄存器映射作简要介绍。

1 ITS寄存器映射

ITS地址映射包含两个分开的64KB,该地址由ITS_base指定。基地址必须64KB对齐,这两个包含:

  1. control寄存器,地址位于ITS_base + 0x000000
  2. 中断转换空间,地址位于ITS_base + 0x010000
  3. vSGI空间,地址位于ITS_base + 0x020000

下表为GIC寄存器映射。

序号

类型

描述

GITS_CTLR

RW

ITS控制寄存器

GITS_IIDR

RO

ITS ID寄存器

GITS_TYPER

RO

ITS Type寄存器

GITS_MPAMIDR

RO

ITS支持MPAM大小

GITS_PARTIDR

RW

ITS PARTID寄存器

GITS_MPIDR

RO

ITS亲和性

GITS_STATUSR

RW

ITS错误报告状态寄存器

GITS_UMSIR

RO

ITS未映射MSI寄存器

GITS_CBASER

RW

ITS命令队列描述符

GITS_CWRITE

RW

ITS写寄存器

GITS_CREADR

RW

ITS读寄存器

GITS_BASER<n>

RW

ITS转换表描述符

GITS_TRANSLATER

WO

ITS转换寄存器

GITS_SGIR

WO

vSGI寄存器

2 ITS设备的模拟概述

ITS设备的模拟包含两个部分,一部分在QEMU中,一部分在内核KVM模块中。QEMU中会模拟ITS设备,让guest中能够识别到ITS设备;另一部分在内核KVM中对于ITS MMIO等模拟。

在guest中访问ITS设备寄存器所对应的MR时,会触发VM exit进入到host中,在host KVM中会根据访问不同的寄存器作不同的处理,完成MMIO处理后最终再次VM enter进入guest。

3 GICv3中LPI中断的处理

GICv3支持对LPI中断的虚拟化。GICv3增加了GICH和VGICC来支持LPI中断的虚拟化。

  1. 一个物理非安全Group1中断发送给Redistributor的物理CPU interface;
  2. 物理CPU interface检查物理中断是否发送给PE。默认情况下该检查通过,发出物理中断;
  3. 中断被带到EL2。hypervisor读取IAR寄存器,返回物理INTID。因此该物理INTID变成active状态。Hypervisor决定当前中断是否直接发送给当前运行vPE。hypervisor将物理INTID写入到ICC_EOIR1_EL1,在ICC_CTLR_EL1.EOImode=1情况下,该行为仅发出priority drop而不会deactive物理中断;
  4. Hypervisor写LR寄存器将虚拟中断变成pending状态。LR寄存器指定了vINTID。Hypervisor发出异常到vPE;
  5. 虚拟CPU interface检查虚拟中断是否发送给vPE。这些检查与物理中断相同,除了使用ICV寄存器。在这种情况下,检查通过并发出虚拟中断;
  6. 虚拟异常被带到非安全EL1。当软件读IAR时,虚拟INTID返回且虚拟中断变成active状态;
  7. Guest OS处理中断。当它完成中断处理时,它写EOIR发出priority drop和deactivation。因为LR寄存器记录物理INTID,它将deactivate虚拟INTID和物理INTID。

4 GICv4中LPI中断的处理

GICv4支持对虚拟LPI中断的直接注入,即不需要陷入到EL2,直接由Redistributor产生虚拟中断。

  1. ITS使用DeviceID从Device Table中获取合适的entry,它用于找到使用的Interrupt Translation table;
  2. ITS使用EventID从ITT表中选择合适的entry,它要么返回物理INTID和collection ID,要么返回vINTID和vPE ID;
  3. ITS使用vPE ID选择vPE表中的entry,vPE表返回目标Redistributor和vPE的VPT;
  4. ITS将vINTID,door-bell中断以及目标Redistributor的VPT地址;
  5. Redistributor比较ITS的VPT地址和当前GICR_VPENDBASER,若匹配,表示vPE被调度,虚拟INTID被发送给虚拟CPU interface;若不匹配,表明vPE没有被调度,vINTID被设置为pending状态。如果提供door-bell中断,物理INTID被发送给物理CPU interface。

GIC/ITS代码分析(11)LPI中断虚拟化之概述相关推荐

  1. GIC/ITS代码分析(4)中断的分配/映射及注册

    本章节分析常用的中断分配/映射及注册函数,对这个过程有个基本的理解.后续针对不同的中断使用实例作更详细介绍. 1 中断的分配/映射 它主要根据硬件中断号hwirq,分配virq,建立起映射,然后请求中 ...

  2. GIC/ITS代码分析(0)GIC/ITS框架介绍

    结合GIC芯片手册,计划分多次对GIC/ITS代码进行分析,加深对GIC/ITS代码的理解. 在分析代码之前,需要对GIC/ITS作简要介绍,包括GIC/ITS在系统中的位置,GIC/ITS硬件的介绍 ...

  3. GIC/ITS代码分析(2)GICv3驱动初始化

    这里我们介绍GICv3驱动的基础框架,后续再介绍GICv4的支持.GICv3驱动在文件drivers/irqchip/irq-gic-v3.c中.同时仅介绍ACPI方式下GICv3驱动. 该驱动由宏I ...

  4. GIC spec之ITS和LPI中断2

    1.1 LPI配置表 LPI配置为全局的.GIC是否支持指向LPI配置表的不同拷贝的Redistributor是由实现定义的. 是否在不同Redistributor设置GICR_PROPBASER为不 ...

  5. GIC/ITS代码分析(3)ITS驱动初始化

    这里对ITS再作简要介绍.在GICv3中,外设通过写GITS_TRANSLATER,根据所写内容解析出device_id和event_id,根据device_id找到设备所对应的Device Tabl ...

  6. GIC spec之ITS和LPI中断1

    本章描述LPI和ITS.它包含如下部分: LPI ITS ITS命令 通用ITS伪功能 ITS命令错误编码 ITS电源管理 1 LPI LPI为基于信息的边沿触发中断,如果实现ITS,该中断可以使用I ...

  7. GIC/ITS代码分析(13)LPI中断虚拟化之KVM中ITS设备的模拟

    1 ITS设备的注册 ITS设备和GIC设备通过函数kvm_register_device_ops()注册不同的操作函数,如下所示: 2 系统调用KVM_CREATE_DEVICE 在QEMU中会调用 ...

  8. GIC/ITS代码分析(12)LPI中断虚拟化之QEMU中ITS设备的模拟

    QEMU中实现ITS设备模拟在文件hw/intc/arm_gicv3_its_kvm.c中实现.初始化如下: 过程如下: 定义ITS设备的具现化接口kvm_arm_its_realize(): 设备设 ...

  9. GIC/ITS代码分析(8)中断应用实例之SGI中断

    SGI中断也称IPI中断,即处理器间中断,一个处理器可以向其他处理器发送中断,以达到目标处理器执行某种事情. 如上所示,cpu0通过写GICD寄存器让cpu2上产生SGI中断. 在ARM64系统中,硬 ...

  10. GIC spec之ITS和LPI中断3

    2 ITS ITS转化一个设备的输入EventID,设备由DeviceID区分,它决定: (1)输入相对应的INTID; (2)目标Redistributor,INTID的目标PE: 对于GICv3, ...

最新文章

  1. spring mvc 自动生成代码
  2. Pandas CookBook -- 02DataFrame基础操作
  3. Java设置软件图标即窗口上角图标
  4. linux 内核设备管理模型sysfs(进阶篇)
  5. 「旁门右道」CURL持久连接技巧
  6. 问题:pom文件飘红, parent.relativePath
  7. 利用nginx集群式部署服务器中,数据同步问题
  8. Java 的数据类型示意图
  9. 第十章 嵌入式linux的调试技术
  10. 蒸汽凝结水颜色发红十种常见除铁处理技术优劣对比
  11. 输出所有3位数的水仙花数,例:153=1的3次方+5的3次方+3的3次方 谭浩强《c语言程序设计》第五章第八题
  12. 帮我写一篇向女孩子表白的情书
  13. 关于罗马数字转整数的实现
  14. 多开分身苹果版_苹果手机如何同时登陆两个微信 iPhone微信多开教程
  15. 解决克隆虚拟机后无法上网问题(亲测有效)
  16. GEE面向对象分类(先分割影像 、再计算特征、最后分类)
  17. 区块链培训就业方向多不多?
  18. 使用python(turtle)画小猪佩奇
  19. html能转换成axure,axure里面文件如何变成html
  20. 基于北向资金的择时买入卖出策略复现

热门文章

  1. 蘑菇街iOS客户端应用源码
  2. java安卓模拟器和电脑通信_android模拟器与PC的端口映射
  3. 为什么计算机连不上无线网络,笔记本无线连不上是什么原因_为什么笔记本电脑连不上wifi-win7之家...
  4. 稀疏矩阵存储格式总结+存储效率对比:COO,CSR,DIA,ELL,HYB
  5. Centos6连接网络配置
  6. Mobento:能搜索视频中说过的话
  7. RK3399调试支持以太网
  8. CentOS7精简版基本配置
  9. 单片机问题,24V NPN接近开关信号,怎么接入到单片机
  10. 让devcpp支持c++11