* QEMUBH *start_bh = qemu_bh_new(enter_co_bh, co); * qemu_bh_schedule(start_bh); * while (...) { * main_loop_wait(false); * } * * (In the future we may provide a wrapper for this). * * @nonblocking: Whether the caller should block until an event occurs. */ int main...
machine_power_off() -> power_off() -> native_machine_poweroff() -> pm_power_off() 若该Ubuntu运行的虚拟机支持ACPI标准,则pm_power_off将指向acpi_power_off()函数。 acpi_power_off() -> acpi_enter_sleep_state() 该函数将会往ACPI标准中规定的寄存器PM1 Control Registers Fixed Hardware Feature ...
1、qemu发起KVM_CREATE_VM的ioctl创建虚拟机 qemu从vl.c/main开始,通过configure_accelerator根据当前current_machine调用对应的accel_init_machine,如果是kvm则具体是kvm_init。当要创建虚拟机,kvm_init函数中会s->fd = qemu_open("/dev/kvm", O_RDWR);打开/dev/kvm设备,获取虚拟机句柄fd,在该fd上ret =kvm_...
原线程调用qemu_coroutine_enter进入协程; 协程submit_io后通过qemu_coroutine_yield直接“退出”协程,返回到原线程调用enter处,而不是“返回”到调动yield处,此时协程的代码逻辑是没有执行完的;原线程可以继续在循环中创建新的协程来不断的提交io; io完成后main_loop中再次调用qemu_coroutine_enter再次进入协程,协程的...
对应到kvm的:kvm_main.c中kvm_vcpu_ioctl函数,若传入的参数为KVM_RUN,它最终会调用vcpu_enter_guest函数进入guest vm。 关于开关: qemu-kvm线程工作过程: 1)启动一个子线程,创建初始化vcpu,主线程等待 2)子线程创建初始化vcpu完毕,子线程等待,并等候通知主线程运行...
qemu_coroutine_yield()切换回caller,也就是qemu_coroutine_enter()的调用者,参考代码: qemu_coroutine_yield() --- Coroutine *self = qemu_coroutine_self(); Coroutine *to = self->caller; ... self->caller = NULL; qemu_coroutine_switch(self, to, COROUTINE_YIELD); --- 1. 2. 3. 4. 5....
经过一系列准备后(如判断vcpu标记位、保存host信息、载入guest信息等)后vmx_vcpu_enter_exit调用__vmx_vcpu_run进入guest mode。__vmx_vcpu_run汇编代码可见,进入会保存host寄存器现场然后载入guest寄存器。这样一来虚拟机就相当于host上的一个普通进程调度运行,当kvm执行到vmexit后会从kvm退出到qemu进行模拟/处理。
vcpu_enter_guest()使虚拟vcpu进入non-root操作,退出该函数等效于执行了VM exit,如果退出该函数时返回1,即代表guest无法处理本次exit reasion,需要进入到用户空间(qemu),使用qemu对本次exit reason进行处理,处理完成之后再进入vcpu_enter_guest(). QEMU与KVM的交互 ...
Search or jump to... Search code, repositories, users, issues, pull requests... Provide feedback We read every piece of feedback, and take your input very seriously. Include my email address so I can be contacted Cancel Submit feedback Saved searches Use saved searches to filter your...
在kvm_main.c文件3764行找到内核中实际的kvm_vcpu_ioctl函数。 那调用流程就是kvm_vcpu_ioctl --> kvm_arch_vcpu_ioctl_run--> vcpu_run --> vcpu_enter_guest--> static_call(kvm_x86_run)(vcpu) 在arch/x86/kvm/vmx/vmx.c line 7584定义了一系列架构相关的操作函数关注运行相关的 .run = vmx_...