虚拟化(7):kvm+kernel kvm子系统初始化流程(GIC)
0.总流程
来看,依然回到这个函数上
https://elixir.bootlin.com/linux/v6.6/source/arch/arm64/kvm/arm.c#L2397
初始化子系统:
其中就包括CPU的hyp_init, cpu低功耗init, virt gic初始化,virt timer初始化
一行行解释我们会碰到的log:
1.GICv3: no GICV resource entry
这里 是指并未提供GICV的物理基址资源,它可以兼容GICv2, 实际我们并没有打算支持v2, v3 在 arm64上仍是主流
2.disabling GICv2 emulation
https://elixir.bootlin.com/linux/v6.6/source/arch/arm64/kvm/vgic/vgic-v3.c#L685
这里是disable GICv2 emulation(仿真)
3.GIC system register CPU interface enabled
https://elixir.bootlin.com/linux/v6.6/source/arch/arm64/kvm/vgic/vgic-init.c#L586
GIC打开
4.vgic interrupt IRQ%d
https://elixir.bootlin.com/linux/v6.6/source/arch/arm64/kvm/vgic/vgic-init.c#L613
调用request_percpu_irq把vgic_maintenance_handler
绑定到per CPU 独立的中断线