虚拟中断与物理中断的映射:
1)当kvm向VM注入一个虚拟中断时,中断信息保存在lr寄存器中,包含了中断号、中断优先级、中断状态(activate、pending)等信息
2)lr里还有一个HW标志位信息,HW置为1时,lr寄存器中会加入相应的物理终端号信息,这样在VM里deactivate一个虚拟中断时会同步deactivate对应的物理中断;
struct vgic_v3_cpu_if {
u32 vgic_hcr;
u32 vgic_vmcr;
u32 vgic_sre; /* Restored only, change ignored */
u32 vgic_elrsr; /* Saved only */
u32 vgic_ap0r[4];
u32 vgic_ap1r[4];
u64 vgic_lr[VGIC_V3_MAX_LRS];
};
中断处理流程:
1:建立虚拟中断与物理中断的映射关系(再确认下??)
2:收到中断,被EL2捕获(可以通过设置HCR_EL2的IMO、FMO,让中断直通到VM,默认是会路由到EL2);
3:EL2将VM拉回到HOST;
4:重新使能中断(local_irq_enable),进入HOST的物理中断处理函数;
5:在物理中断处理函数中向VM注入虚拟中断;
(未完待续。。。)