vcpu_enter_guest->inject_pending_event->中檢查是否有中斷到來(其檢測的為vcpu->arch.interrupt.pending)
這裡有個問題,設定相應的中斷是在apic_set_vector(vector, apic->regs + APIC_TMR)設定,這裡設定完了後在哪裡被解析出來,這裡和上面檢測的不一樣,這個函數代表的是寫相應的寄存器
kvm_vcpu_ioctl_x86_get_vcpu_events,kvm_vcpu_ioctl_x86_set_vcpu_events 這兩個函數可能使得vcpu->arch.interrupt.pending和event連接配接起來?可以注意一下
qemu裝置向vcpu注入中斷的方式
1. kvm_arch_vcpu_ioctl->kvm_vcpu_ioctl_x86_set_vcpu_events->kvm_make_request(設定相應的中斷)這些函數的參數events是從使用者空間傳遞過來的,
2.(切換VCPU時)kvm_arch_vcpu_ioctl_run->__vcpu_run->vcpu_enter_guest(在要進入VCPU前)->inject_pending_event-> ->vmx_inject_irq檢查是否有中斷到來這個是對應qemu外設發出中斷,将中斷注入到客戶機中,注入方式應該是直接寫VMCS(vmcs_write32(VM_ENTRY_INTR_INFO_FIELD, intr);)類似這個函數
問題kvm_x86_ops->run(vcpu);//vmx_vcpu_run退出是否代表着相應的VCPU exit了,然後在vmx_vcpu_run回處理相應的