Received: by 2002:a05:6a10:8c0a:0:0:0:0 with SMTP id go10csp585878pxb; Wed, 27 Jan 2021 15:55:44 -0800 (PST) X-Google-Smtp-Source: ABdhPJzrNaN95fbZ4H2dt2iy0sRyEZu3uUWL6/mjYofQhXHH9BFjNeA8YB7MiisCFI8RF/LTQ/ym X-Received: by 2002:a17:906:2f09:: with SMTP id v9mr8419063eji.151.1611791744306; Wed, 27 Jan 2021 15:55:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1611791744; cv=none; d=google.com; s=arc-20160816; b=X4yitjeV7W0tvKnTZSEmZ2uGrzoKOwGdGpHKI3Zj/JUrkqiML/QFxszBib8dEzMcMX ZXDYAREhHLPx/kKOHrDglG+3Mg4kN47lbEjmVG/N9POyfYRgB8KhGm7Spg0/5H0wxufB l3GC6RR+RKb7nLWP0jKWODvV+2CEhry2D4zWlXMBsbcD/eftubSvQj/wXU9seURrf5Ap vzTMv2HNfAZLtcedxjKNAu2R0/C0rqT0d6VJF8fVQtLEsRfPiP9XpO4N5Pauzirgsuz4 WOw4ViG0UeFEUC8OaHJh18+zzCi7ojKUC4mJz3SdiQeSF59Igx9MykzQijPvTcN5afp3 X5Sg== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-transfer-encoding:mime-version :references:in-reply-to:message-id:date:subject:cc:to:from; bh=Av8mzn2RSBR273muWN1JQxZLSfwScmd8bpznN+SsGDQ=; b=vhRWOAhKQHjc0HslQ5rN8fVHUt/gbGXdS+EXiNArZrWAdHXzxo7U4Dp/7GLQ0OxVBC u6NJWl88hjfkeL7bqNtUBcWulDf5U6O6KLwNFZ6bMZaReqanLHWxz2LnPhxKqE1nGUtl 4u3tGdOqWXyUXEa92efNJVOP9xeBVFx0ko7h9F2dpX1R7gDlE++AXu4J0MWcB0aIALFB uMHPwTJp8fiyP9s5rUtpOwfwtH5cTJxQLtJpi/VC+y6YPuVNvpdAUu99A5i1k2Cxzcss es4AEp5B5fURcMfC7tgQmeyhWtJtorK6T0778hsXdTNLN7QMc2M7repeWkBaI2fwEstL KMxw== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id p6si1848815edm.151.2021.01.27.15.55.19; Wed, 27 Jan 2021 15:55:44 -0800 (PST) Received-SPF: pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) client-ip=23.128.96.18; Authentication-Results: mx.google.com; spf=pass (google.com: domain of linux-kernel-owner@vger.kernel.org designates 23.128.96.18 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S237832AbhA0MTG (ORCPT + 99 others); Wed, 27 Jan 2021 07:19:06 -0500 Received: from szxga05-in.huawei.com ([45.249.212.191]:12036 "EHLO szxga05-in.huawei.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S237714AbhA0MOz (ORCPT ); Wed, 27 Jan 2021 07:14:55 -0500 Received: from DGGEMS404-HUB.china.huawei.com (unknown [172.30.72.60]) by szxga05-in.huawei.com (SkyGuard) with ESMTP id 4DQjCm6jHMzMQjY; Wed, 27 Jan 2021 20:12:36 +0800 (CST) Received: from DESKTOP-7FEPK9S.china.huawei.com (10.174.186.182) by DGGEMS404-HUB.china.huawei.com (10.3.19.204) with Microsoft SMTP Server id 14.3.498.0; Wed, 27 Jan 2021 20:13:59 +0800 From: Shenming Lu To: Marc Zyngier , Eric Auger , "Will Deacon" , , , , CC: Alex Williamson , Cornelia Huck , Lorenzo Pieralisi , , , Subject: [PATCH v3 1/4] KVM: arm64: GICv4.1: Add function to get VLPI state Date: Wed, 27 Jan 2021 20:13:34 +0800 Message-ID: <20210127121337.1092-2-lushenming@huawei.com> X-Mailer: git-send-email 2.27.0.windows.1 In-Reply-To: <20210127121337.1092-1-lushenming@huawei.com> References: <20210127121337.1092-1-lushenming@huawei.com> MIME-Version: 1.0 Content-Transfer-Encoding: 7BIT Content-Type: text/plain; charset=US-ASCII X-Originating-IP: [10.174.186.182] X-CFilter-Loop: Reflected Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org With GICv4.1 and the vPE unmapped, which indicates the invalidation of any VPT caches associated with the vPE, we can get the VLPI state by peeking at the VPT. So we add a function for this. Signed-off-by: Shenming Lu --- arch/arm64/kvm/vgic/vgic-v4.c | 19 +++++++++++++++++++ arch/arm64/kvm/vgic/vgic.h | 1 + 2 files changed, 20 insertions(+) diff --git a/arch/arm64/kvm/vgic/vgic-v4.c b/arch/arm64/kvm/vgic/vgic-v4.c index 66508b03094f..ac029ba3d337 100644 --- a/arch/arm64/kvm/vgic/vgic-v4.c +++ b/arch/arm64/kvm/vgic/vgic-v4.c @@ -203,6 +203,25 @@ void vgic_v4_configure_vsgis(struct kvm *kvm) kvm_arm_resume_guest(kvm); } +/* + * Must be called with GICv4.1 and the vPE unmapped, which + * indicates the invalidation of any VPT caches associated + * with the vPE, thus we can get the VLPI state by peeking + * at the VPT. + */ +void vgic_v4_get_vlpi_state(struct vgic_irq *irq, bool *val) +{ + struct its_vpe *vpe = &irq->target_vcpu->arch.vgic_cpu.vgic_v3.its_vpe; + int mask = BIT(irq->intid % BITS_PER_BYTE); + void *va; + u8 *ptr; + + va = page_address(vpe->vpt_page); + ptr = va + irq->intid / BITS_PER_BYTE; + + *val = !!(*ptr & mask); +} + /** * vgic_v4_init - Initialize the GICv4 data structures * @kvm: Pointer to the VM being initialized diff --git a/arch/arm64/kvm/vgic/vgic.h b/arch/arm64/kvm/vgic/vgic.h index 64fcd7511110..d8cfd360838c 100644 --- a/arch/arm64/kvm/vgic/vgic.h +++ b/arch/arm64/kvm/vgic/vgic.h @@ -317,5 +317,6 @@ bool vgic_supports_direct_msis(struct kvm *kvm); int vgic_v4_init(struct kvm *kvm); void vgic_v4_teardown(struct kvm *kvm); void vgic_v4_configure_vsgis(struct kvm *kvm); +void vgic_v4_get_vlpi_state(struct vgic_irq *irq, bool *val); #endif -- 2.19.1