From patchwork Mon Mar 27 09:30:58 2017 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Eric Auger X-Patchwork-Id: 9646309 Return-Path: Received: from mail.wl.linuxfoundation.org (pdx-wl-mail.web.codeaurora.org [172.30.200.125]) by pdx-korg-patchwork.web.codeaurora.org (Postfix) with ESMTP id E5F85602BF for ; Mon, 27 Mar 2017 10:09:00 +0000 (UTC) Received: from mail.wl.linuxfoundation.org (localhost [127.0.0.1]) by mail.wl.linuxfoundation.org (Postfix) with ESMTP id CFF52228C9 for ; Mon, 27 Mar 2017 10:09:00 +0000 (UTC) Received: by mail.wl.linuxfoundation.org (Postfix, from userid 486) id C4B8D2833B; Mon, 27 Mar 2017 10:09:00 +0000 (UTC) X-Spam-Checker-Version: SpamAssassin 3.3.1 (2010-03-16) on pdx-wl-mail.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-1.9 required=2.0 tests=BAYES_00,DKIM_SIGNED, DKIM_VALID autolearn=unavailable version=3.3.1 Received: from bombadil.infradead.org (bombadil.infradead.org [65.50.211.133]) (using TLSv1.2 with cipher AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.wl.linuxfoundation.org (Postfix) with ESMTPS id 4D3FE228C9 for ; Mon, 27 Mar 2017 10:09:00 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20170209; h=Sender: Content-Transfer-Encoding:Content-Type:MIME-Version:Cc:List-Subscribe: List-Help:List-Post:List-Archive:List-Unsubscribe:List-Id:References: In-Reply-To:Message-Id:Date:Subject:To:From:Reply-To:Content-ID: Content-Description:Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc :Resent-Message-ID:List-Owner; bh=Ljtaa74LfY0WVDjAAQ3V0x4576rGmg4tiiu2xxgfXOc=; b=igBDAlfTU8mnHNqo+HquuCM1Rp s/bsMwBi+iJR8EfSsgqJkeno91K/LaxTozaRyTVhM5eKjGYGRO5vTcWzntXgv6H+bzLQISCIsBiQd 0UoHixkfP0WhtMgzAQ6Dr2wQwl1hOUTLk8dyp0IoiJJSNCpfAb1n2ryJZ6jHR1VFuHv+QFZ0yYLge HqPgI8B/j/Aj3lMytkSEyiIU7M6NfSfkfgzKj5l/PwASQZ7txW3vCi+h9lZyWsxlDWycbNFRXLy3U qZ1QgeGesqkLILtJP6WfuzYu5//BHfInnb5Sc0l+/D1+eDm0pmtCf6+9thjA3WF4PXdthY2NQ8enu oYpcjXNw==; Received: from localhost ([127.0.0.1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.87 #1 (Red Hat Linux)) id 1csRa5-0007c5-Q4; Mon, 27 Mar 2017 10:08:57 +0000 Received: from merlin.infradead.org ([2001:4978:20e::2]) by bombadil.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1csRVp-0002f9-Hz for linux-arm-kernel@bombadil.infradead.org; Mon, 27 Mar 2017 10:04:33 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=merlin.20170209; h=References:In-Reply-To:Message-Id:Date: Subject:Cc:To:From:Sender:Reply-To:MIME-Version:Content-Type: Content-Transfer-Encoding:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Id: List-Help:List-Unsubscribe:List-Subscribe:List-Post:List-Owner:List-Archive; bh=gRIrLiNcC88+nlFXJ99C/qCAx6KIbMJHp1OojYmrdQo=; b=oiJ4x9oHXqab3zS/Miae/ETNW 7THvnsxEi00FLR20ughG0EZGhPEkakrroVX+W+TvFO/vvmN/IlnrgxjDbhIVodL3if+Ur00sm/dIO GSUfzZt6YZCeP+aFpgUqdzHyG3GC0YOrlDM9v/JWT2T/OdLvDBSYBWHUX31UtaMV3bJNB6ie5KwVK MaHZ7EbZdFiNWLUqHCoIf3a+Zod6sSlWc6RBaTeayljk10DeJVD1gw7hQxjndviXW8HKqMzLeXnPg HYYKyl3f9eMDnhB591fcxWH9k/UmF0EOIvZ54OjqSYQukZRfkn1J7hx8dTV5QjcaurWtLE1LAKZ1d porM21MFA==; Received: from mx1.redhat.com ([209.132.183.28]) by merlin.infradead.org with esmtps (Exim 4.87 #1 (Red Hat Linux)) id 1csR0h-0006rK-Mg for linux-arm-kernel@lists.infradead.org; Mon, 27 Mar 2017 09:32:24 +0000 Received: from smtp.corp.redhat.com (int-mx05.intmail.prod.int.phx2.redhat.com [10.5.11.15]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mx1.redhat.com (Postfix) with ESMTPS id 4A37FC04BD27; Mon, 27 Mar 2017 09:32:01 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mx1.redhat.com 4A37FC04BD27 Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; dmarc=none (p=none dis=none) header.from=redhat.com Authentication-Results: ext-mx07.extmail.prod.ext.phx2.redhat.com; spf=pass smtp.mailfrom=eric.auger@redhat.com DKIM-Filter: OpenDKIM Filter v2.11.0 mx1.redhat.com 4A37FC04BD27 Received: from localhost.localdomain.com (ovpn-117-27.ams2.redhat.com [10.36.117.27]) by smtp.corp.redhat.com (Postfix) with ESMTP id 35D2C17C46; Mon, 27 Mar 2017 09:31:56 +0000 (UTC) From: Eric Auger To: eric.auger.pro@gmail.com, eric.auger@redhat.com, marc.zyngier@arm.com, christoffer.dall@linaro.org, andre.przywara@arm.com, vijayak@caviumnetworks.com, Vijaya.Kumar@cavium.com, peter.maydell@linaro.org, linux-arm-kernel@lists.infradead.org, kvmarm@lists.cs.columbia.edu, kvm@vger.kernel.org Subject: [PATCH v4 08/22] KVM: arm64: ITS: Implement vgic_mmio_uaccess_write_its_iidr Date: Mon, 27 Mar 2017 11:30:58 +0200 Message-Id: <1490607072-21610-9-git-send-email-eric.auger@redhat.com> In-Reply-To: <1490607072-21610-1-git-send-email-eric.auger@redhat.com> References: <1490607072-21610-1-git-send-email-eric.auger@redhat.com> X-Scanned-By: MIMEDefang 2.79 on 10.5.11.15 X-Greylist: Sender IP whitelisted, not delayed by milter-greylist-4.5.16 (mx1.redhat.com [10.5.110.31]); Mon, 27 Mar 2017 09:32:01 +0000 (UTC) X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20170327_053223_862416_B8F4B231 X-CRM114-Status: GOOD ( 17.49 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.21 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Prasun.Kapoor@cavium.com, drjones@redhat.com, quintela@redhat.com, dgilbert@redhat.com, pbonzini@redhat.com MIME-Version: 1.0 Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+patchwork-linux-arm=patchwork.kernel.org@lists.infradead.org X-Virus-Scanned: ClamAV using ClamSMTP The GITS_IIDR revision field is used to encode the version of the table layout (ABI). So we need to restore it to check the table layout to be restored is compatible with the destination vITS. The user selected revision is stored in the user_revision field. It will be compared against the REV num at table restoration time. Signed-off-by: Eric Auger --- v4: creation --- include/kvm/arm_vgic.h | 2 ++ virt/kvm/arm/vgic/vgic-its.c | 24 +++++++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/include/kvm/arm_vgic.h b/include/kvm/arm_vgic.h index b72dd2a..41b71ca 100644 --- a/include/kvm/arm_vgic.h +++ b/include/kvm/arm_vgic.h @@ -162,6 +162,8 @@ struct vgic_its { u32 creadr; u32 cwriter; + u32 user_revision; + /* Protects the device and collection lists */ struct mutex its_lock; struct list_head device_list; diff --git a/virt/kvm/arm/vgic/vgic-its.c b/virt/kvm/arm/vgic/vgic-its.c index a5f3abe..169b486 100644 --- a/virt/kvm/arm/vgic/vgic-its.c +++ b/virt/kvm/arm/vgic/vgic-its.c @@ -33,6 +33,9 @@ #include "vgic.h" #include "vgic-mmio.h" +/* ITS Table Layout ABI Revision */ +#define REV 0x1 + /* * Creates a new (reference to a) struct vgic_irq for a given LPI. * If this LPI is already mapped on another ITS, we increase its refcount @@ -384,7 +387,19 @@ static unsigned long vgic_mmio_read_its_iidr(struct kvm *kvm, struct vgic_its *its, gpa_t addr, unsigned int len) { - return (PRODUCT_ID_KVM << 24) | (IMPLEMENTER_ARM << 0); + return (PRODUCT_ID_KVM << 24) | (REV << 12) | IMPLEMENTER_ARM; +} + +static void vgic_mmio_uaccess_write_its_iidr(struct kvm *kvm, + struct vgic_its *its, + gpa_t addr, unsigned int len, + unsigned long val) +{ + u64 tmp = 0; + + tmp = update_64bit_reg(tmp, addr & 3, len, val); + tmp = (tmp & GENMASK(15, 12)) >> 12; + its->user_revision = tmp; } static unsigned long vgic_mmio_read_its_idregs(struct kvm *kvm, @@ -1359,8 +1374,9 @@ static struct vgic_register_region its_registers[] = { REGISTER_ITS_DESC(GITS_CTLR, vgic_mmio_read_its_ctlr, vgic_mmio_write_its_ctlr, 4, VGIC_ACCESS_32bit), - REGISTER_ITS_DESC(GITS_IIDR, - vgic_mmio_read_its_iidr, its_mmio_write_wi, 4, + REGISTER_ITS_DESC_UACCESS(GITS_IIDR, + vgic_mmio_read_its_iidr, its_mmio_write_wi, + vgic_mmio_uaccess_write_its_iidr, 4, VGIC_ACCESS_32bit), REGISTER_ITS_DESC(GITS_TYPER, vgic_mmio_read_its_typer, its_mmio_write_wi, 8, @@ -1458,6 +1474,8 @@ static int vgic_its_create(struct kvm_device *dev, u32 type) ((u64)GITS_BASER_TYPE_COLLECTION << GITS_BASER_TYPE_SHIFT); dev->kvm->arch.vgic.propbaser = INITIAL_PROPBASER_VALUE; + its->user_revision = 0; + dev->private = its; return 0;