Received: by 2002:a25:c205:0:0:0:0:0 with SMTP id s5csp4882713ybf; Wed, 4 Mar 2020 12:37:53 -0800 (PST) X-Google-Smtp-Source: ADFU+vvbBtpmxFAnmKVU7lEd/aRsbQMv7zPr0LIyDQ7b8/mPkBk7H7X1RGkQfSya1KBM89H+C2iN X-Received: by 2002:a05:6830:1b6e:: with SMTP id d14mr3804523ote.117.1583354273733; Wed, 04 Mar 2020 12:37:53 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1583354273; cv=none; d=google.com; s=arc-20160816; b=lKoAvPZUWP6w0TPu6peZzn54d6bVGrRDsw6eeAAf/6uz/hroiW+Wtv1s72RbbsisU1 gKit9EBlTI6EKVaPVP78H/tChDS+qdnuy9+SjsHMiL5rTih8eVLZuA8woVD8KrJg4BCw dZ5mIfroIFZYppgJgXTpyiFE1qhswna+CpOeIzhYFja4Rtw9Eis7tmGIX4hiq9dwCyzO cuN1x07gScSNmLE+nJbo7AzHC8MbWcMwzFA4sIT0gJa55YuRSyWzciikTzmumuNsa3uK WX3hNK4Z8YWxwdad3Xhn6oeH7cEzeBJ2N50AMYh+/Kp2qjWrn8naDnWCMjQMTPC3ZA9B fVAg== 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=ZzSuDEY2DmrloEHKf0s1kGbfXotroCPDRf4/mE4mM1Q=; b=JAJI1RV60Z+J6PkOjyOQp+mSGJhaOMv9erRy5XpSD9H/16Xd8DgzZL0+73JWTCgN0k KjFsEGvKKPZ5exWeuiJUx2S4sVB/VD9rTlcWR6cpkH+H5PWeN06+VOt01O1p4lilAxE3 iif3MTDgJkN70QbTu5BG+uBjKqJqXewddzEaTrqVDnC7QKnM45rqmsjJuEte4zCybCIg rpci0anTEopwLCZvoD/MZknpECh39sdp9c5HnzLZzgpSVFu9HIlF+e0fKR8Wo32TuwDL q0Lkid7H3AIizTMRbSIAlv/RkTHAN6nmnz1BKCH8pRXrTBTwupXP/hBsAiVAGL/mg3gL v47w== ARC-Authentication-Results: i=1; mx.google.com; dkim=pass header.i=@kernel.org header.s=default header.b=Wrzj2s13; 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 d196si1986741oig.268.2020.03.04.12.37.41; Wed, 04 Mar 2020 12:37:53 -0800 (PST) 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=Wrzj2s13; 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 S2388563AbgCDUgt (ORCPT + 99 others); Wed, 4 Mar 2020 15:36:49 -0500 Received: from mail.kernel.org ([198.145.29.99]:36948 "EHLO mail.kernel.org" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388546AbgCDUgq (ORCPT ); Wed, 4 Mar 2020 15:36:46 -0500 Received: from disco-boy.misterjones.org (disco-boy.misterjones.org [51.254.78.96]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPSA id 9D5AB2146E; Wed, 4 Mar 2020 20:36:45 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=default; t=1583354205; bh=k9NuDEldVoZ6bpBn6sexmCkoKT0Svr+AR58KgyJSSYE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=Wrzj2s13aRQSyvlEesPlprNEvn+Pg4iay9eykCpow/3c1mRoAcMCw6bqlUTDH6wWn kOYVqleYlyFN+Be6iPS+7YKYTinbrVHwSnYvssMp0kI3ppiVNxXyLB6Pm6gFZN5Ove lZBwO1Psxvsz2k5RDSUROI2jRbyk939nANEebj1w= Received: from 78.163-31-62.static.virginmediabusiness.co.uk ([62.31.163.78] helo=why.lan) by disco-boy.misterjones.org with esmtpsa (TLS1.3:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.92) (envelope-from ) id 1j9ajC-00A59R-Vw; Wed, 04 Mar 2020 20:34:51 +0000 From: Marc Zyngier To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, linux-kernel@vger.kernel.org Cc: Lorenzo Pieralisi , Jason Cooper , Robert Richter , Thomas Gleixner , Zenghui Yu , Eric Auger , James Morse , Julien Thierry , Suzuki K Poulose Subject: [PATCH v5 16/23] irqchip/gic-v4.1: Eagerly vmap vPEs Date: Wed, 4 Mar 2020 20:33:23 +0000 Message-Id: <20200304203330.4967-17-maz@kernel.org> X-Mailer: git-send-email 2.20.1 In-Reply-To: <20200304203330.4967-1-maz@kernel.org> References: <20200304203330.4967-1-maz@kernel.org> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-SA-Exim-Connect-IP: 62.31.163.78 X-SA-Exim-Rcpt-To: linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org, linux-kernel@vger.kernel.org, lorenzo.pieralisi@arm.com, jason@lakedaemon.net, rrichter@marvell.com, tglx@linutronix.de, yuzenghui@huawei.com, eric.auger@redhat.com, james.morse@arm.com, julien.thierry.kdev@gmail.com, suzuki.poulose@arm.com X-SA-Exim-Mail-From: maz@kernel.org X-SA-Exim-Scanned: No (on disco-boy.misterjones.org); SAEximRunCond expanded to false Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Now that we have HW-accelerated SGIs being delivered to VPEs, it becomes required to map the VPEs on all ITSs instead of relying on the lazy approach that we would use when using the ITS-list mechanism. Signed-off-by: Marc Zyngier --- drivers/irqchip/irq-gic-v3-its.c | 39 +++++++++++++++++++++++++------- 1 file changed, 31 insertions(+), 8 deletions(-) diff --git a/drivers/irqchip/irq-gic-v3-its.c b/drivers/irqchip/irq-gic-v3-its.c index b65fba67bd85..6277b3e3731f 100644 --- a/drivers/irqchip/irq-gic-v3-its.c +++ b/drivers/irqchip/irq-gic-v3-its.c @@ -1586,12 +1586,31 @@ static int its_irq_set_irqchip_state(struct irq_data *d, return 0; } +/* + * Two favourable cases: + * + * (a) Either we have a GICv4.1, and all vPEs have to be mapped at all times + * for vSGI delivery + * + * (b) Or the ITSs do not use a list map, meaning that VMOVP is cheap enough + * and we're better off mapping all VPEs always + * + * If neither (a) nor (b) is true, then we map vPEs on demand. + * + */ +static bool gic_requires_eager_mapping(void) +{ + if (!its_list_map || gic_rdists->has_rvpeid) + return true; + + return false; +} + static void its_map_vm(struct its_node *its, struct its_vm *vm) { unsigned long flags; - /* Not using the ITS list? Everything is always mapped. */ - if (!its_list_map) + if (gic_requires_eager_mapping()) return; raw_spin_lock_irqsave(&vmovp_lock, flags); @@ -1625,7 +1644,7 @@ static void its_unmap_vm(struct its_node *its, struct its_vm *vm) unsigned long flags; /* Not using the ITS list? Everything is always mapped. */ - if (!its_list_map) + if (gic_requires_eager_mapping()) return; raw_spin_lock_irqsave(&vmovp_lock, flags); @@ -4260,8 +4279,12 @@ static int its_vpe_irq_domain_activate(struct irq_domain *domain, struct its_vpe *vpe = irq_data_get_irq_chip_data(d); struct its_node *its; - /* If we use the list map, we issue VMAPP on demand... */ - if (its_list_map) + /* + * If we use the list map, we issue VMAPP on demand... Unless + * we're on a GICv4.1 and we eagerly map the VPE on all ITSs + * so that VSGIs can work. + */ + if (!gic_requires_eager_mapping()) return 0; /* Map the VPE to the first possible CPU */ @@ -4287,10 +4310,10 @@ static void its_vpe_irq_domain_deactivate(struct irq_domain *domain, struct its_node *its; /* - * If we use the list map, we unmap the VPE once no VLPIs are - * associated with the VM. + * If we use the list map on GICv4.0, we unmap the VPE once no + * VLPIs are associated with the VM. */ - if (its_list_map) + if (!gic_requires_eager_mapping()) return; list_for_each_entry(its, &its_nodes, entry) { -- 2.20.1