From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from eggs.gnu.org ([2001:4830:134:3::10]:36891) by lists.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZLCgI-00061A-Fv for qemu-devel@nongnu.org; Fri, 31 Jul 2015 11:57:16 -0400 Received: from Debian-exim by eggs.gnu.org with spam-scanned (Exim 4.71) (envelope-from ) id 1ZLCgC-0007Ox-DU for qemu-devel@nongnu.org; Fri, 31 Jul 2015 11:57:10 -0400 Received: from mail-wi0-f178.google.com ([209.85.212.178]:38684) by eggs.gnu.org with esmtp (Exim 4.71) (envelope-from ) id 1ZLCgC-0007OZ-8T for qemu-devel@nongnu.org; Fri, 31 Jul 2015 11:57:04 -0400 Received: by wibxm9 with SMTP id xm9so37775780wib.1 for ; Fri, 31 Jul 2015 08:57:03 -0700 (PDT) From: Eric Auger Date: Fri, 31 Jul 2015 16:56:45 +0100 Message-Id: <1438358205-7395-1-git-send-email-eric.auger@linaro.org> Subject: [Qemu-devel] [PATCH for-2.5] hw/intc/arm_gic_kvm: set up a flat irqchip routing table List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , To: eric.auger@st.com, eric.auger@linaro.org, qemu-devel@nongnu.org, peter.maydell@linaro.org, pbonzini@redhat.com Cc: p.fedin@samsung.com, christoffer.dall@linaro.org, patches@linaro.org In case the kernel supports GSI routing, we set up irqchip routing entries for GIC SPIs. This is not mandated as long as MSI routing is not used (because the kernel sets a default irqchip routing table). However once MSI routing gets used (for VIRTIO-PCI vhost for example), the first call to KVM_SET_GSI_ROUTING overrides the kernel default irqchip table. If no routing entry exists for the GSI, any IRQFD signaling for this GSI will fail. Signed-off-by: Eric Auger --- gsi routing for ARM is functional but needs to be maturated. The API for MSI routing still is in discussion. See http://www.spinics.net/lists/kvm/msg118792.html --- hw/intc/arm_gic_kvm.c | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/hw/intc/arm_gic_kvm.c b/hw/intc/arm_gic_kvm.c index f56bff1..58d8303 100644 --- a/hw/intc/arm_gic_kvm.c +++ b/hw/intc/arm_gic_kvm.c @@ -631,6 +631,18 @@ static void kvm_arm_gic_realize(DeviceState *dev, Error **errp) KVM_DEV_ARM_VGIC_GRP_ADDR, KVM_VGIC_V2_ADDR_TYPE_CPU, s->dev_fd); + + if (kvm_check_extension(kvm_state, KVM_CAP_IRQ_ROUTING)) { + /* set up irq routing */ + kvm_init_irq_routing(kvm_state); + for (i = 0; i < s->num_irq - GIC_INTERNAL; ++i) { + kvm_irqchip_add_irq_route(kvm_state, i, 0, i); + } + + kvm_gsi_routing_allowed = true; + + kvm_irqchip_commit_routes(kvm_state); + } } static void kvm_arm_gic_class_init(ObjectClass *klass, void *data) -- 1.8.3.2