3.KVM_IRQ_LINE 这个IOCTL和KVM_RUN是不同步的,它也是个频率非常高的调用,它就是一般中断设备的中断注入入口。当设备有中断就通过这个IOCTL最终调用KVM里面的kvm_set_irq将中断注入到虚拟的中断控制器。在kvm中会进一步判断属于什么中断类型,然后在合适的时机写入vmcs。当然在KVM_RUN中会不断的同步虚拟中断控制器,...
I8042 mouse,产生的irq是12,所以是i8259 slave产生的。 vda是virtio-blk,它是一个pci设备,它的中断是msi信号。 net0也是pci设备,中断也是msi信号。 2、irq routing 物理环境上,irq是由硬件产生的。在虚拟化下,却是由虚拟出来的。 kvm提供了set irq line这ioctl给user-mode调用,也提供了kvm_vm_ioctl_irq_li...
#ifdef __KVM_HAVE_IRQ_LINE case KVM_IRQ_LINE_STATUS: case KVM_IRQ_LINE: { struct kvm_irq_level irq_event; r = -EFAULT; if (copy_from_user(&irq_event, argp, sizeof(irq_event))) goto out; r = kvm_vm_ioctl_irq_line(kvm, &irq_event, ioctl == KVM_IRQ_LINE_STATUS); if (r...
代码中在一个while循环处理完设备驱动的I/O请求后,调用了函数kvm__irq_line,irq_line对应8259A的管脚IR0~7,其代码如下: commit 4155ba8cda055b7831489e4c4a412b073493115b kvm: Fix virtio block device support some more kvmtool.git/kvm.c void kvm__irq_line(struct kvm *self, int irq, intlevel) ...
I8042 mouse,产生的irq是12,所以是i8259 slave产生的。 vda是virtio-blk,它是一个pci设备,它的中断是msi信号。 net0也是pci设备,中断也是msi信号。 2,irq routing 物理环境上,irq是由硬件产生的。在虚拟化下,却是由虚拟出来的。 kvm提供了set irq line这ioctl给user-mode调用,也提供了kvm_vm_ioctl_irq_lin...
中断注入在KVM内部流程起始于一个函数kvm_set_irq int kvm_set_irq(struct kvm *kvm, int irq_source_id, u32 irq, int level, bool line_status) { struct kvm_kernel_irq_routing_entry *e, irq_set[KVM_NR_IRQCHIPS]; int ret = -1, i = 0; ...
ioctl==KVM_IRQ_LINE_STATUS);if(r)gotoout; r= -EFAULT;if(ioctl ==KVM_IRQ_LINE_STATUS) {if(copy_to_user(argp, &irq_event,sizeof(irq_event)))gotoout; } r=0;break; }#endif#ifdef CONFIG_HAVE_KVM_IRQ_ROUTINGcaseKVM_SET_GSI_ROUTING: {structkvm_irq_routing routing;structkvm_irq_rout...
QEMU的核心函数如main_loop, qemu_main_loop_start, 和cpu_exec等承担了关键作用,通过TB链和TCG执行主机代码。QEMU与KVM的联系体现在用户空间的QEMU通过IOCTL与内核空间的KVM模块通信,如创建KVM、KVM_RUN中断处理以及KVM_IRQ_LINE中断注入。KVM与QEMU交互频繁,如初始化硬件设备、CPU循环和中断处理等。
devices use level triggered interrupts and the interrupt controller is hardwired to always work in level triggered mode. On newer EISA, PCI, and later systems the Edge/Level Control Registers (ELCRs) control the mode per IRQ line, effectively making the mode of the 8259 irrelevant for such sy...
harvester:/home/rancher # lsmod | grep kvm kvm_amd 147456 6 ccp 106496 1 kvm_amd kvm 1052672 1 kvm_amd irqbypass 16384 1 kvm harvester:/home/rancher # egrep '(vmx|svm)' --color=always /proc/cpuinfo flags : fpu vme de pse tsc msr pae mce cx8 apic sep mtrr pge mca cmov pat ...