This post has NOT been accepted by the mailing list yet.
These days I read the source code about xen interrupts. When physical interrupts arrive, in xen source code, do_IRQ will decide which will deal with the physical interrupt, by xen or the guest os. If the physical interrupt should be dealt with by guest os. Then the case __do_irq_guest() will be executed. In __do_irq_guest() function, the corresponding event channel will be delivered to the guests that are registered the irq. My question is that in the guest os, how to decide whether the irq is to itself? Eg, a guest A request a file from a disk, after the disk finished to get the file, will generate a disk interrupt. The disk interrupt should only be delivered to the guest A. Maybe all of the guest virtual machines registered the disk interrupt. __do_irq_guest will deliver the disk interrupt to all of the virtual machines. In the virtual machine, how to decide the disk interrupt was generated by its requested file?