x86/kvm/vmc.c // x86平台和CPU相关的虚拟化 VT-X
x86/kvm/x86.c // x86平台kvm虚拟化
virt/kvm/kvm_main.c // 虚拟化模块(可类比xx-core)
简单几个重要数据结构。// 一个虚拟机,对应一个进程,一个虚拟vcpu,对应一个线程
kvm_host.h
struct kvm
{
struct kvm_vcpu *vcpus[KVM_MAX_VCPUS];
struct list_head vm_list; // 用于挂到全局vm_list列表
struct kvm_arch arch; // 平台相关
}
// 和虚拟机一一对应。
x86
struct vcpu_vmx
{
struct kvm_vcpu vcpu;
}
// 单个虚拟机的单个虚拟CPU。
struct vmcs {
u32 revision_id;
u32 abort;
char data[0];
}; // 每个物理CPU一个 vmxarea
kvm模块初始化
kvm_init()
{
kvm_arch_init(); // 平台初始化
kvm_irqfd_init(); // 创建kvm-irqfd-cleanup workqueue
kvm_arch_hardware_setup();
//检查每一个处理器的兼容性;
//注册监听CPU up/down;
//注册监听系统重启;
//分配存放kvm_vcpu cache;
//分配存放异步错误(pf)cache;
//注册/dev/kvm;
//注册syscore_ops;
//注册类别为kvm_dev_type_vfio kvm_device_ops;
}