trace_kvm_userspace_exit(vcpu->run->exit_reason, r); break; } //... } out: mutex_unlock(&vcpu->mutex); kfree(fpu); kfree(kvm_sregs); return r; } // arch/x86/kvm/x86.c line 10103 int kvm_arch_vcpu_ioctl_run(struct kvm_vcpu *vcpu) { //... if (kvm_run->immediate_ex...
当用户态触发kvm_arch_vcpu_ioctl_run时,会让Guest OS去跑在Hypervisor上,当Guest OS中出现异常退出到Host时,此时handle_exit将对退出的原因进行处理; 异常处理函数arm_exit_handlers如下,具体调用选择哪个处理函数,是根据ESR_EL2, Exception Syndrome Register(EL2)中的值来确定的。 static exit_handle_fn arm_ex...
r = kvm_arch_vcpu_ioctl_run(vcpu, vcpu->run);break; 至此,kvm的所有框架都初始化完成,用户态接口也都实现好了。 CPU RUN流程 kvm_arch_vcpu_ioctl_run ===》vcpu_run//死循环进入vcpu_enter_guest ===》vcpu_enter_guest //准备guestos的运行上下文 ===》kvm_x86_ops->run(vcpu); //回到我们之...
当用户态触发 kvm_arch_vcpu_ioctl_run 时,会让 Guest OS 去跑在 Hypervisor 上,当 Guest OS 中出现异常退出到 Host 时,此时 handle_exit 将对退出的原因进行处理; 异常处理函数 arm_exit_handlers 如下,具体调用选择哪个处理函数,是根据 ESR_EL2, Exception Syndrome Register(EL2) 中的值来确定的。 static...
2587 int kvm_init(void *opaque, unsigned int vcpu_size, 2588 struct module *module) 2589 { 2590 int r; 2591 int cpu; 2592 2593 r = kvm_arch_init(opaque); 2594 if (r) 2595 goto out_fail; 2596 2597 bad_page = alloc_page(
当用户态触发kvm_arch_vcpu_ioctl_run时,会让Guest OS去跑在Hypervisor上,当Guest OS中出现异常退出到Host时,此时handle_exit将对退出的原因进行处理; 异常处理函数arm_exit_handlers如下,具体调用选择哪个处理函数,是根据ESR_EL2, Exception Syndrome Register(EL2)中的值来确定的。
然后VMM通过KVM_RUN 的ioctl运行vCPU,对于Realm VM, 这是通过kvm_arch_vcpu_ioctl_run ->kvm_rec_enter->rmi_rec_enter,rmi_rec_enter通过RMI REC_ENTER的调用(通过SMC指令)到ATF,ATF将它dispatch到TF-RMM,TF-RMM调用smc_rec_enter,然后通过rec_run_loop将物理CPU的执行转交给Realm EL0&EL1的Realm VM。
当用户态触发kvm_arch_vcpu_ioctl_run时,会让Guest OS去跑在Hypervisor上,当Guest OS中出现异常退出到Host时,此时handle_exit将对退出的原因进行处理; 异常处理函数arm_exit_handlers如下,具体调用选择哪个处理函数,是根据ESR_EL2, Exception Syndrome Register(EL2)中的值来确定的。
Qemu-kvm通过ioctl调用运行VCPU,即调度相应的VM运行; 内核进行相关处理后,执行VMLAUNCH指令,通过VM-Entry进入Guest OS运行,Guest OS运行于非根模式下; Guest OS执行相应的虚拟机代码,非敏感指令可直接在物理CPU上运行; 当Guest OS中执行到敏感指令、发生外部中断、或Guest OS发生内部异常时,将产生VM-Exit,并将相关...
Qemu-kvm通过ioctl调用运行VCPU,即调度相应的VM运行; 内核进行相关处理后,执行VMLAUNCH指令,通过VM-Entry进入Guest OS运行,Guest OS运行于非根模式下; Guest OS执行相应的虚拟机代码,非敏感指令可直接在物理CPU上运行; 当Guest OS中执行到敏感指令、发生外部中断、或Guest OS发生内部异常时,将产生VM-Exit,并将相关...