- 博客(27)
- 收藏
- 关注
原创 arm smmuv3
StreamID是SMMU区分不同客户端设备的方式。最简单地说,一个设备可以有一个StreamID。但是,设备可能能够生成多个StreamID,并根据StreamID应用不同的翻译。例如,对于支持多个通道的DMA引擎,不同的StreamID可能应用于不同的通道。
2024-05-06 10:47:46
2380
原创 linux iommu-STE表,CD表,iommu_map
arm_smmu_add_device通过arm_smmu_init_l2_strtab函数申请了对应StreamID的Stream Table Entry。初始化时候通过arm_smmu_init_strtab_2lvl函数初始化了arm_smmu_device的Level 1 Stream Table Descriptor,这时候主要是申请地址。以下流程添加smmu的dev的时候会,调用arm_smmu_init_l2_strtab函数填充STE的L2表(Stream Table Entry)
2024-04-09 16:40:08
1255
1
原创 AArch64虚拟化
本指南介绍Armv8-A AArch64中的虚拟化支持。所涵盖的主题包括stage 2 translation, virtual exceptions和trapping。本指南介绍了一些基本的虚拟化理论,并举例说明了hypervisor如何使用其所描述的功能。它没有涵盖特定hypervisor的操作,也没有试图解释如何从头开始编写自己的hypervisor。阅读本文,您将了解这两种类型的hypervisor,以及它们如何映射到Arm Exception级别。
2023-12-14 14:03:48
554
原创 linux mailbox(The Common Mailbox Framework)
Common Mailbox Framework主要用作soc和各个subsystem的通信框架。以Qcom平台为例,这些subsystem包括AOP,ADSP以及CDSP等等。客户端(mbox_client): 主要对各个dev,注册信息处理的回调函数。通道(mbox_chan): 通道用来链接客户端和控制器,以及管理message。控制器(mbox_controller): 为注册到控制器上的channels提供服务。以及实现通信的OPS。
2023-12-11 11:10:19
1035
原创 Xen-hypervisor的Emulating Memory-mapped Input/Output (MMIO)实现
对于type1的hypervisor(例如xen),虚拟机是如何访问IO的?下面分成原理部分和实现部分阐述。
2023-09-19 18:01:11
576
原创 Xen-hypervisor中SPI中断虚拟化的实现-中断处理-汇编部分
entry_guest会将guest的SPSR_el1,SP_el0 ,SP_el1,ELR_el1压栈保存, exit_guest的时候在弹出,恢复guest VCPU 的寄存器。最后调用return_from_trap,将guest vcpu的寄存器x0-x29,elr_el2,spsr_el2恢复,最后调用eret跳到guest上下文空间。VCPU相关的寄存器结构如下,entry的时候会将guest VCPU 相关的寄存器压栈保存,exit的时候在弹出,恢复guest VCPU 的寄存器。
2023-08-25 15:53:10
289
原创 Arch64 寄存器
AArch64支持31个64位的通用寄存器即X0-X30。其中传递参数用X0-X7寄存器,X29为栈帧寄存器FP,X30为链接寄存器LR。可以是用X来表示64位数据,用W来表示低32位数据。
2023-08-14 15:47:43
1357
原创 minidump
; Build ID: 855-XBL-00000000if OS.FILE(OCIMEM.BIN)(d.load.binary OCIMEM.BIN 0x14680000 /noclear)if OS.FILE(CODERAM.BIN)(d.load.binary CODERAM.BIN 0xb000000 /noclear)if OS.FILE(DATARAM.BIN)(d.load.binary DATARAM.BIN 0xb0e0000 /noclear)if OS.FIL
2023-08-07 12:55:26
191
原创 Xen-hypervisor中SPI中断虚拟化的实现-重要的寄存器
组优先级字段确定Group 0中断抢占,并且如果ICH_VMCR_EL2.VCBPR==1,还确定Group 1中断抢占。•当HCR_EL2.TGE的值为0时,如果PE使用AArch64在EL2执行,则不采用物理FIQ中断,除非它们通过SCR_EL3.FIQ位路由到EL3。0b1-读取ICV_BPR1_EL1返回ICV_BPR0_EL1加1,饱和为0b111。0b1-如果最高优先级pending中断是Group 1,则读取GICV_IAR或GICV_HPPIR返回相应中断的INTID。
2023-07-31 11:16:05
596
3
原创 Locality-Specific Peripheral Interrupts
是一种在GICv3/v4中引入的中断类型。中断是向处理器发出的一个信号,表示发生了需要处理的事件。中断通常由外围设备产生。LPI通常用于产生消息信号中断(MSIs)的外围设备。LPI的配置和管理与其他中断类型不同,因为它们的状态保存在内存中,而不是寄存器中。LPI是消息信号中断(MSIs),其翻译由(ITS)提供。
2023-06-19 20:54:58
557
原创 Arm Generic Interrupt Controller v3 and v4 - Virtualization
本指南介绍了GICv3和GICv4体系结构中对虚拟化的支持。它涵盖了hypervisor可用于生成和管理虚拟中断的控件。本指南适用于需要了解中断控制器功能或需要编写软件来管理虚拟中断。本指南介绍了GICv3.x和GICv4.1中的功能。它不包括GICv4.0,只是作为一个介绍。
2023-05-24 21:23:11
1872
原创 AArch64 virtualization之exceptions
中断被系统中的硬件用来向软件发送事件信号。例如,GPU可能会发送一个中断,以发出它已经完成渲染帧的信号。使用虚拟化的系统更为复杂。有些中断可能由hypervisor本身处理。其他中断可能来自分配给虚拟机(VM)的设备,并且需要由该VM内的软件处理。此外,被中断作为目标的VM在接收到中断时可能没有运行。这意味着您需要一些机制来支持hypervisor对EL2中某些中断的处理。您还需要将其他中断转发到特定VM或VM中的特定虚拟CPU(vCPU)的机制。
2023-04-16 21:22:54
370
原创 Virtual Interrupt Handling and Prioritization
在EL2处执行的hypervisor的控制下在EL1处执行的操作系统有时被称为。虚拟机可以支持多处理,这意味着由hypervisor调度的多个**虚拟PE(vPE)**正在一个或多个物理PE上执行。当vPE在PE上执行时,虚拟机的vPE被称为在物理PE上调度。在Armv8和Armv9中,当EL2被实现和启用时,CPU interface提供了将中断路由到VM的hypervisor开销最小化的机制。在GICv4中,对于直接注入的虚拟LPI,调度的vPE由GICR_VPENDBASE确定。
2023-04-16 19:34:03
762
原创 Physical Interrupt Handling and Prioritization
GIC中断处理基于GIC中断生命周期。中断生命周期为描述中断处理过程的详细步骤提供了基础。GIC还维护一个状态机,用于控制生命周期期间的中断状态转换。下图显示了物理中断的GIC中断生命周期。
2023-03-30 14:49:56
980
原创 ARM-translation table walk
目录ARM-translation table walkqcom sm8350平台的相关配置qcom sm8350 page levels and translation gurad sizeVMSAv8-64 translation table format descriptorstrace32解析的qcom 8350的一个 translation table walkARM-translation table walk本文主要讨论1.是指MMU查询页表的过程。2.页表的解析。3.页表属性等等
2021-12-28 11:37:53
4023
1
空空如也
空空如也
TA创建的收藏夹 TA关注的收藏夹
TA关注的人