From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:51016) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a9cdz-0000sG-BF for qemu-devel@nongnu.org; Thu, 17 Dec 2015 12:47:12 -0500 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1a9cdy-0006pi-7T for qemu-devel@nongnu.org; Thu, 17 Dec 2015 12:47:11 -0500 Received: from mx1.redhat.com ([209.132.183.28]:53193) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1a9cdy-0006pd-2A for qemu-devel@nongnu.org; Thu, 17 Dec 2015 12:47:10 -0500 From: Paolo Bonzini Date: Thu, 17 Dec 2015 18:46:10 +0100 Message-Id: <1450374401-31352-15-git-send-email-pbonzini@redhat.com> In-Reply-To: <1450374401-31352-1-git-send-email-pbonzini@redhat.com> References: <1450374401-31352-1-git-send-email-pbonzini@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: quoted-printable Subject: [Qemu-devel] [PULL 14/45] kvm: Hyper-V SynIC irq routing support List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: qemu-devel@nongnu.org Cc: Eduardo Habkost , kvm@vger.kernel.org, Marcelo Tosatti , Roman Kagan , Andrey Smetanin , "Denis V. Lunev" , =?UTF-8?q?Andreas=20F=C3=A4rber?= , Richard Henderson From: Andrey Smetanin Signed-off-by: Andrey Smetanin Reviewed-by: Roman Kagan Signed-off-by: Denis V. Lunev CC: Paolo Bonzini CC: Richard Henderson CC: Eduardo Habkost CC: "Andreas F=C3=A4rber" CC: Marcelo Tosatti CC: Roman Kagan CC: Denis V. Lunev CC: kvm@vger.kernel.org Signed-off-by: Paolo Bonzini --- include/sysemu/kvm.h | 1 + kvm-all.c | 33 +++++++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/include/sysemu/kvm.h b/include/sysemu/kvm.h index b31f325..9a569f1 100644 --- a/include/sysemu/kvm.h +++ b/include/sysemu/kvm.h @@ -455,6 +455,7 @@ int kvm_irqchip_update_msi_route(KVMState *s, int vir= q, MSIMessage msg, void kvm_irqchip_release_virq(KVMState *s, int virq); =20 int kvm_irqchip_add_adapter_route(KVMState *s, AdapterInfo *adapter); +int kvm_irqchip_add_hv_sint_route(KVMState *s, uint32_t vcpu, uint32_t s= int); =20 int kvm_irqchip_add_irqfd_notifier_gsi(KVMState *s, EventNotifier *n, EventNotifier *rn, int virq); diff --git a/kvm-all.c b/kvm-all.c index ed707fe..e78a378 100644 --- a/kvm-all.c +++ b/kvm-all.c @@ -1300,6 +1300,34 @@ int kvm_irqchip_add_adapter_route(KVMState *s, Ada= pterInfo *adapter) return virq; } =20 +int kvm_irqchip_add_hv_sint_route(KVMState *s, uint32_t vcpu, uint32_t s= int) +{ + struct kvm_irq_routing_entry kroute =3D {}; + int virq; + + if (!kvm_gsi_routing_enabled()) { + return -ENOSYS; + } + if (!kvm_check_extension(s, KVM_CAP_HYPERV_SYNIC)) { + return -ENOSYS; + } + virq =3D kvm_irqchip_get_virq(s); + if (virq < 0) { + return virq; + } + + kroute.gsi =3D virq; + kroute.type =3D KVM_IRQ_ROUTING_HV_SINT; + kroute.flags =3D 0; + kroute.u.hv_sint.vcpu =3D vcpu; + kroute.u.hv_sint.sint =3D sint; + + kvm_add_routing_entry(s, &kroute); + kvm_irqchip_commit_routes(s); + + return virq; +} + #else /* !KVM_CAP_IRQ_ROUTING */ =20 void kvm_init_irq_routing(KVMState *s) @@ -1325,6 +1353,11 @@ int kvm_irqchip_add_adapter_route(KVMState *s, Ada= pterInfo *adapter) return -ENOSYS; } =20 +int kvm_irqchip_add_hv_sint_route(KVMState *s, uint32_t vcpu, uint32_t s= int) +{ + return -ENOSYS; +} + static int kvm_irqchip_assign_irqfd(KVMState *s, int fd, int virq, bool = assign) { abort(); --=20 2.5.0