KVM: x86/xen: Add KVM_IRQ_ROUTING_XEN_EVTCHN and event channel delivery
[linux-2.6-microblaze.git] / arch / x86 / kvm / irq_comm.c
index 39ad02d..6e0dab0 100644 (file)
@@ -24,6 +24,7 @@
 
 #include "hyperv.h"
 #include "x86.h"
+#include "xen.h"
 
 static int kvm_set_pic_irq(struct kvm_kernel_irq_routing_entry *e,
                           struct kvm *kvm, int irq_source_id, int level,
@@ -175,6 +176,13 @@ int kvm_arch_set_irq_inatomic(struct kvm_kernel_irq_routing_entry *e,
                        return r;
                break;
 
+#ifdef CONFIG_KVM_XEN
+       case KVM_IRQ_ROUTING_XEN_EVTCHN:
+               if (!level)
+                       return -1;
+
+               return kvm_xen_set_evtchn_fast(e, kvm);
+#endif
        default:
                break;
        }
@@ -310,6 +318,10 @@ int kvm_set_routing_entry(struct kvm *kvm,
                e->hv_sint.vcpu = ue->u.hv_sint.vcpu;
                e->hv_sint.sint = ue->u.hv_sint.sint;
                break;
+#ifdef CONFIG_KVM_XEN
+       case KVM_IRQ_ROUTING_XEN_EVTCHN:
+               return kvm_xen_setup_evtchn(kvm, e, ue);
+#endif
        default:
                return -EINVAL;
        }