使用qemu2.7版本源码,内核使用3.10
1,(qemu中)创建VCPU,每个VCPU对qemu来说就是一个线程。代码如下
Main-> machine_class->init(current_machine)->pc_init1(./hw/i386/pc_piix.c)->
pc_cpus_init->pc_new_cpu->x86_cpu_realizefn->qemu_init_vcpu(cs)->
qemu_init_vcpu(CPUState *cpu)->qemu_kvm_start_vcpu->qemu_thread_create->
qemu_kvm_cpu_thread_fn->kvm_cpu_exec-> kvm_vcpu_ioctl(cpu, KVM_RUN, 0)。
通过kvm_vcpu_ioctl(cpu, KVM_RUN, 0),是系统调用,就进入内核开始执行了。
2,(linux内核中)
kvm_vcpu_ioctl
case KVM_RUN:
r = kvm_arch_vcpu_ioctl_run(vcpu, vcpu->run);
vcpu_run(vcpu)
vcpu_enter_guest
kvm_x86_ops->run
vmx_vcpu_run