天天看點

kvm 中斷以及io虛拟化 cpu_enter_guest->inject_pending_event

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回處理相應的