Received: by 2002:a25:824b:0:0:0:0:0 with SMTP id d11csp1271726ybn; Wed, 25 Sep 2019 15:23:54 -0700 (PDT) X-Google-Smtp-Source: APXvYqyArnD5d+vtGk3SJDeie12jVEjXZDU+fKAbqSpYG3Y7FxxzhouZ44nzZGTIvZ/G87q7mcSO X-Received: by 2002:a17:906:a40d:: with SMTP id l13mr371425ejz.237.1569450234197; Wed, 25 Sep 2019 15:23:54 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1569450234; cv=none; d=google.com; s=arc-20160816; b=Py55xnWQPVETdor43+OoLW9bBW3O5JVQeM8wg9IoUeIiZjecmIz23SJVMPaTc+Xecn g4iEXX7fN5E6TUJzuF3OxKEX3hnHMNrDbbxj1lRbbK2Eu37DNCNcTMuqjTFjMkxag0ir T31BZk0EggI/CCxhCK6RC4pw0YPzZrg1iE9c1na/bkJm4hfq7jvaqKO9xeb7vqMMkNu9 YwbS3WC1LHN4R8FWWuc1u0fCzNiwgtp2fF0QrR5VGObsfqGGFhAkofpOAZzl8/GIRDFb 0YtUG62Vpbj7738Nu43BglLwiDoA+r+3w/PQTHeu2KumikSypt7wFAzakhJ/KaZmiLd3 Z3KQ== 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; bh=j2K3XHoDaUTQX3XOA4x4RvU7SobxF39KjomPRQkfc8o=; b=WlYfSw+RKyGGw0F0u+PHh5SY74tfUOrSZ4Yk0VCk9DUSGcmwK059rw/9favkvTR/RL u7hP+P1pNKfeMHcFhb7wtVqFOpfvBgxldr+gLMDmn7YrkypN1r3AHCLcHRItRMQPGkp0 QsNPkuZlbg2iGsuOug54vEcJQiXeuzvq4FpHeiupRg9q9RmZKdLama/N2oTqRdJrORdL lwm3PfZmU4RUZHnAPdSrDFt3q0dAzCfHu0IUty322WiYlHqROcj1HcA/fQp1d2dXZekb OZK8pOPk6rZ4tL0elD2zYVVvF+rQ82eSEa0xz8QvcrvUH25UoeDwtdvAex+j52j8c8zK rRLA== ARC-Authentication-Results: i=1; mx.google.com; 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=fail (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 d2si102901ejc.136.2019.09.25.15.23.29; Wed, 25 Sep 2019 15:23:54 -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; 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=fail (p=NONE sp=NONE dis=NONE) header.from=kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1733089AbfIWS2d (ORCPT + 99 others); Mon, 23 Sep 2019 14:28:33 -0400 Received: from foss.arm.com ([217.140.110.172]:47282 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1733081AbfIWS2c (ORCPT ); Mon, 23 Sep 2019 14:28:32 -0400 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id ECBC12D97; Mon, 23 Sep 2019 11:28:31 -0700 (PDT) Received: from big-swifty.lan (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id 4139A3F694; Mon, 23 Sep 2019 11:28:28 -0700 (PDT) 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 Subject: [PATCH 34/35] KVM: arm64: GICv4.1: Configure SGIs as HW interrupts Date: Mon, 23 Sep 2019 19:26:05 +0100 Message-Id: <20190923182606.32100-35-maz@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20190923182606.32100-1-maz@kernel.org> References: <20190923182606.32100-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