QEMU中实现ITS设备模拟在文件hw/intc/arm_gicv3_its_kvm.c中实现。初始化如下:

过程如下:

  1. 定义ITS设备的具现化接口kvm_arm_its_realize();
  2. 设备设备的属性;
  3. 定义ITS设备发送MSI中断接口;
  4. 定义迁移时提前保存接口,该接口将ITS寄存器保存到内存结构体s中;
  5. 定义迁移恢复加载接口,该接口将内存结构体s中数据恢复到ITS寄存器中;

1 ITS设备的具现化

ITS设备具现化过程如下:

这里对重要几步作介绍:

  1. 调用KVM_CREATE_DEVICE在KVM中创建设备,后面在KVM中作详细介绍;
  2. Kvm_device_access()会调用系统调用SET_ATTR或GET_ATTR,这里不做任何事;
  3. 调用kvm_arm_register_device() (作用?)
  4. 将设备添加到s->gitv3中
  5. 调用gicv3_its_init_mmio()分配ITS MMIO,模拟ITS寄存器,这里分配MMIO,并没有真实物理地址,因此当guest中访问MMIO时会触发异常,在KVM中模拟操作;
  6. Kvm_device_check_attr()会调用系统调用HAS_ATTR,这里检查KVM中是否定义GITS_CTLR寄存器;
  7. 其他设置如kvm_msi_use_devid表示该设备需要使用devid等

2 QEMU中MSI中断的产生

QEMU中通过发送系统调KVM_SIGNAL_MSI产生MSI中断,在内核中实现后续再作介绍。

3 ITS设备状态的保存

当系统作迁移或其他操作之前时,需要各设备保存设备状态。ITS设备通过函数kvm_arm_its_pre_save()保存ITS设备状态。它主要是提前保存ITS设备相关的寄存器值到s相结构体中。

4 ITS设备状态的恢复

当系统完成迁移或其他操作之后,需要各设备恢复设备状态。ITS设备通过函数kvm_arm_its_post_load()恢复ITS设备状态。它主要是将s结构体恢复到ITS设备结构体中。

GIC/ITS代码分析(12)LPI中断虚拟化之QEMU中ITS设备的模拟相关推荐

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

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

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

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

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

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

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

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

  5. GIC spec之ITS和LPI中断2

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

  6. GIC spec之ITS和LPI中断3

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

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

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

  8. GIC spec之ITS和LPI中断1

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

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

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

最新文章

  1. 2022-2028年中国复合软管行业市场行情动态及发展趋向分析报告
  2. rhel6硬盘或U盘安装注意的问题
  3. Resharper的使用
  4. STM32的时钟系统RCC详细整理
  5. 【直播】今晚言有三阿里云直播、赠书+书籍解读+案例剖析
  6. PythonOpenCV--Rtrees随机森林
  7. jsp界面自动生成文件注释_实施注释界面
  8. 计算机课实验三,成都信息工程学院计算机网络课程实验三
  9. Ext.data.GroupingStore详解
  10. 笔试常见的“阶乘”编程题,你写对了么?
  11. 成功的人和不成功的人最大的区别
  12. DataURL入门,图片储存在数据库字段中
  13. 【转】android开发 dts、各种接口porting----不错
  14. 基于C++的采用单链表判断算术表达式的合理性
  15. 计算机硬盘容量的最小单位,计算机中存储数据的最小单位和存储容量的基本单位各是什么?...
  16. 搭建sql-libs的环境
  17. SSM | Spring
  18. 第七周OJ—百位数的分解
  19. 浪尖聊聊大数据从业者的迷茫及解决方案
  20. xc7z030有多少个quad_XC7Z030-2FBG676I;XCZ7030-2FFG676I ZYNQ7系列专营

热门文章

  1. linux trim命令,linux shell trim()
  2. Idea 使用svn创建新分支
  3. 记录上家公司的合理设计点
  4. 立体角(Solid Angle)
  5. vue数组的深克隆和浅克隆
  6. 在OpenCV平台下,比较mask rcnn在GPU 1050ti与CPU r5 3600上的运行效率
  7. python transpose函数_numpy中transpose和swapaxes函数讲解
  8. 【74HC595】51单片机(普中A2开发板)LED点阵屏点亮以及74HC595芯片的使用笔记
  9. Ubuntu 20.04 安装AppImage格式的文件
  10. vue(9)—— 组件化开发 - webpack(3)