Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp1939463ybg; Sun, 27 Oct 2019 07:50:16 -0700 (PDT) X-Google-Smtp-Source: APXvYqwc7Px56H6S28QCKa8jsJ5JZoYqlwOlWJjzkxwQl9gyIFFwoPd8pSFsMRmtphch+276I94H X-Received: by 2002:a17:906:ccd6:: with SMTP id ot22mr12593625ejb.166.1572187816105; Sun, 27 Oct 2019 07:50:16 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1572187816; cv=none; d=google.com; s=arc-20160816; b=TnsKGtRHGwxHH0UhptEXKIDcs5E7O5WyfAojMtfb6v7LAEPFkRhLdOddIMH33gwnkZ rVzKbbqSPDmwZd8QxdjRVTux20a/bgXCkI1k5Iw3aOsnWzW/nsb3mvyo95qrBASK1fIX vX8PWJIOJHxTvDtIgJvy1+Z1Xy8qf6zC2yuNugVPm3gMy20Lb0m3cvV+Gaw8hhs6RvZb Y8QfX0s/QJjdD6s/rZtJWksctm9Jb2j+amboL/FesdX1PpP1rLSgyqdkXh/jdqq974rR bx5T7VSgQ9U3JCXtYQ/UpurG1uTa0IFlQKTe3VbraRgh7MwS8SxN90hiu1gh+38wi9zk f2SA== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from :dkim-signature; bh=j2K3XHoDaUTQX3XOA4x4RvU7SobxF39KjomPRQkfc8o=; b=gM6go+gUp4adDwwgOCmUJ73gA0Q4aK323e14BV0iISueMyjGgufNVTpIMHS4snPlIQ JluKQzQqYt4HL8QvdR0b/YlJD/vyM7kF/VCqqR1eeGo6PUkrci6w53Cq03OKVQFliNt2 urTa3sQVa1fY497Y2IYZfgnjzLCvlBEDZDjLbDHfMSal4BpdWRTmoLN4zShNMxBN2gaw 9IC03ItkQVtd5GD8gRFKNdEnHrJHFgBin1O4m//Qkl84Tf5vIEIcizQfJ2FM6n0LwXhf cGu9glF31ettKBHmUXM0C9M3mMdv+Ob/ugUt3yULZOIuK9h/muVxzZSX6f+tr8sIGGv2 QpnA== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=DQhwT4AR; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id w14si4535018ejv.112.2019.10.27.07.49.52; Sun, 27 Oct 2019 07:50:16 -0700 (PDT) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=DQhwT4AR; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org; dmarc=pass (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1727542AbfJ0Oqn (ORCPT + 99 others); Sun, 27 Oct 2019 10:46:43 -0400 Received: from mail.kernel.org ([198.145.29.99]:39248 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1726706AbfJ0Oqn (ORCPT ); Sun, 27 Oct 2019 10:46:43 -0400 Received: from localhost.localdomain (82-132-239-15.dab.02.net [82.132.239.15]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 961B921D80; Sun, 27 Oct 2019 14:46:37 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1572187602; bh=rT1g/raMHC8EmgZx/1zwUJDNQKU4ZVLYts5C3N9/83M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=DQhwT4AR7f2090hNfLKqJlUsiIsfpQRCd40xkcZSaB3bJBV427cJtyNquoOKaxEzq hFsLf+UcVT+psA3ZsmE0Ppm2qHRfDqPmoOMHiWju6v015jraLjA/5X1mnbO1M3i45S ZLttOiS719NNFRPABihNMM8x+WjH2IEmEMu+Ja6I= From: Marc Zyngier To: kvmarm@lists.cs.columbia.edu, linux-kernel@vger.kernel.org Cc: Eric Auger , James Morse , Julien Thierry , Suzuki K Poulose , Thomas Gleixner , Jason Cooper , Lorenzo Pieralisi , Andrew Murray , Zenghui Yu , Jayachandran C , Robert Richter Subject: [PATCH v2 35/36] KVM: arm64: GICv4.1: Configure SGIs as HW interrupts Date: Sun, 27 Oct 2019 14:42:33 +0000 Message-Id: <20191027144234.8395-36-maz@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20191027144234.8395-1-maz@kernel.org> References: <20191027144234.8395-1-maz@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org To enable HW delivery of SGIs, set their hw flag to true, link them to the corresponding Linux interrupt, which is then activated. This configures the SGIs at the ITS level, and put the show on the road! Signed-off-by: Marc Zyngier --- virt/kvm/arm/vgic/vgic-v4.c | 42 +++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/virt/kvm/arm/vgic/vgic-v4.c b/virt/kvm/arm/vgic/vgic-v4.c index e61c7a149515..0ff6dac16cba 100644 --- a/virt/kvm/arm/vgic/vgic-v4.c +++ b/virt/kvm/arm/vgic/vgic-v4.c @@ -97,6 +97,46 @@ static irqreturn_t vgic_v4_doorbell_handler(int irq, void *info) return IRQ_HANDLED; } +static void vgic_v4_sync_sgi_config(struct its_vpe *vpe, struct vgic_irq *irq) +{ + vpe->sgi_config[irq->intid].enabled = irq->enabled; + vpe->sgi_config[irq->intid].group = irq->group; + vpe->sgi_config[irq->intid].priority = irq->priority; +} + +static void vgic_v4_init_vsgis(struct kvm_vcpu *vcpu) +{ + struct its_vpe *vpe = &vcpu->arch.vgic_cpu.vgic_v3.its_vpe; + int i; + + if (!kvm_vgic_global_state.has_gicv4_1) + return; + + /* + * With GICv4.1, every virtual SGI can be directly injected. So + * let's pretend that they are HW interrupts, tied to a host + * IRQ. The SGI code will do its magic. + */ + for (i = 0; i < VGIC_NR_SGIS; i++) { + struct vgic_irq *irq = vgic_get_irq(vcpu->kvm, vcpu, i); + struct irq_desc *desc; + int ret; + + irq->hw = true; + irq->host_irq = irq_find_mapping(vpe->sgi_domain, i); + vgic_v4_sync_sgi_config(vpe, irq); + /* + * SGIs are initialised as disabled. Enable them if + * required by the rest of the VGIC init code. + */ + desc = irq_to_desc(irq->host_irq); + ret = irq_domain_activate_irq(irq_desc_get_irq_data(desc), + false); + WARN_ON(ret); + vgic_put_irq(vcpu->kvm, irq); + } +} + /** * vgic_v4_init - Initialize the GICv4 data structures * @kvm: Pointer to the VM being initialized @@ -168,6 +208,8 @@ int vgic_v4_init(struct kvm *kvm) dist->its_vm.nr_vpes = i; break; } + + vgic_v4_init_vsgis(vcpu); } if (ret) -- 2.20.1