Implement 2-level event channel delivery based on the original code from Joao and Ankur. For IPIs and timers we *really* want to have a completely in-kernel code path instead of bouncing out to the VMM each time. That will come next, but this is the basis for it. With this I can wire up MSI of assigned devices to PIRQs in the guest. v2: Actually solve the problem of mapping the shared_info page, instead of merely declaring that I've reduced it to a previously unsolved problem. And having fixed up the broken KVM steal time stuff in a separately posted patch. David Woodhouse (6): KVM: x86/xen: Fix get_attr of KVM_XEN_ATTR_TYPE_SHARED_INFO KVM: selftests: Add event channel upcall support to xen_shinfo_test KVM: x86/xen: Use sizeof_field() instead of open-coding it KVM: Fix kvm_map_gfn()/kvm_unmap_gfn() to take a kvm as their names imply KVM: x86/xen: Maintain valid mapping of Xen shared_info page KVM: x86/xen: Add KVM_IRQ_ROUTING_XEN_EVTCHN and event channel delivery Documentation/virt/kvm/api.rst | 21 +++ arch/x86/include/asm/kvm_host.h | 5 + arch/x86/kvm/irq_comm.c | 12 ++ arch/x86/kvm/mmu/mmu.c | 23 ++++ arch/x86/kvm/x86.c | 3 +- arch/x86/kvm/xen.c | 340 ++++++++++++++++++++++++++++++++++++++++++++---- arch/x86/kvm/xen.h | 9 ++ include/linux/kvm_host.h | 37 ++---- include/linux/kvm_types.h | 27 ++++ include/uapi/linux/kvm.h | 11 ++ tools/testing/selftests/kvm/x86_64/xen_shinfo_test.c | 187 ++++++++++++++++++++++++-- virt/kvm/kvm_main.c | 11 +- 12 files changed, 614 insertions(+), 72 deletions(-)