Received: by 2002:a05:6a10:2785:0:0:0:0 with SMTP id ia5csp3217396pxb; Tue, 12 Jan 2021 09:06:01 -0800 (PST) X-Google-Smtp-Source: ABdhPJyg2iUT2NsQ8WFPGJMo2pyJJe+spf5gR9PF/tC8sklq+ZOL/cya5BWQeW5DAD5zz1Avck6q X-Received: by 2002:a50:b742:: with SMTP id g60mr83537ede.113.1610471161115; Tue, 12 Jan 2021 09:06:01 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1610471161; cv=none; d=google.com; s=arc-20160816; b=F0d47t18eT20WWg36BNpolrtrqMOzWLnmWuq39ceJ1gouSeXpzLlhY8wRUnP6eoLhX D72ShZQyz+JML0zpaZzueyaE8wWDqogH7FcGUxMcDdfIilOWiVuvVEfqC6swoE2cIRw8 Sa8ayzGNdo4RYTe4iGpxAX2csISW7AWpnxbpBY7itMhlQagg9s5u0ZDW1UAnnFFqQtND hX9F6TfuriFhgpv8pgVHa/8p52c7IIRjnkyGtXTWammKKKkQyQaFZcEazvsdiSAjyqTk frC/94Jd1Jml12jA7wN/gznaNQd+f2pMrVp/NcteLSWqadyJ6qcmXx0HxSIS5fSHuYvA Tsaw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:content-language:content-transfer-encoding :in-reply-to:mime-version:user-agent:date:message-id:from:references :cc:to:subject; bh=9BRUaPf1uvxS2SJPdNHpZ77brbnjwC0/gh+D6Gve5f4=; b=zOEeOirZaP8fxCtzOd7rGFcgFag3NMIT8glAfHXBdovVQ/LYsfTpvi0Oz4WzsZKda1 L4mc0C4YsxwWF7PUXtvOLYT34Mm/kTy83COkFZYOKSKMJ43gSVuPCvoyr+/UcAvNnZgJ iKadAPkMya0j3oc0gqre166cXABPYMN0Iw1C0Pk3aM6UTcF8pP4MHsrPlDN/ld+UzD+g vOKgVUVhINxGNVZH5lW4tTMsnehDK93YhCU3MY9Uk9zTxVhkMFm4enjhRpfoiRxicxHK 4A5aWFSFcUO2aezVG2xBZAwxOsdVTWC9/qeJ3LXkWi3rf7I48BM86a2J3uT+Uer7zxrE MhjA== 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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Return-Path: Received: from vger.kernel.org (vger.kernel.org. [23.128.96.18]) by mx.google.com with ESMTP id j25si1521912edy.380.2021.01.12.09.05.36; Tue, 12 Jan 2021 09:06:01 -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; dmarc=fail (p=NONE sp=NONE dis=NONE) header.from=arm.com Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S2391852AbhALRDW (ORCPT + 99 others); Tue, 12 Jan 2021 12:03:22 -0500 Received: from foss.arm.com ([217.140.110.172]:49878 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2390860AbhALRDV (ORCPT ); Tue, 12 Jan 2021 12:03:21 -0500 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 D9557101E; Tue, 12 Jan 2021 09:02:35 -0800 (PST) Received: from [192.168.0.110] (unknown [172.31.20.19]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPSA id D4C213F719; Tue, 12 Jan 2021 09:02:33 -0800 (PST) Subject: Re: [PATCH 8/9] KVM: arm64: vgic-v3: Expose GICR_TYPER.Last for userspace To: Eric Auger , eric.auger.pro@gmail.com, linux-kernel@vger.kernel.org, kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu, maz@kernel.org, drjones@redhat.com Cc: james.morse@arm.com, julien.thierry.kdev@gmail.com, suzuki.poulose@arm.com, shuah@kernel.org, pbonzini@redhat.com References: <20201212185010.26579-1-eric.auger@redhat.com> <20201212185010.26579-9-eric.auger@redhat.com> From: Alexandru Elisei Message-ID: <45a364ec-eac6-a04b-9654-e97970186839@arm.com> Date: Tue, 12 Jan 2021 17:02:36 +0000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:78.0) Gecko/20100101 Thunderbird/78.6.0 MIME-Version: 1.0 In-Reply-To: <20201212185010.26579-9-eric.auger@redhat.com> Content-Type: text/plain; charset=utf-8 Content-Transfer-Encoding: 7bit Content-Language: en-US Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Hi Eric, On 12/12/20 6:50 PM, Eric Auger wrote: > Commit 23bde34771f1 ("KVM: arm64: vgic-v3: Drop the > reporting of GICR_TYPER.Last for userspace") temporarily fixed > a bug identified when attempting to access the GICR_TYPER > register before the redistributor region setting but dropped > the support of the LAST bit. This patch restores its > support (if the redistributor region was set) while keeping the > code safe. I suppose the reason for emulating GICR_TYPER.Last is for architecture compliance, right? I think that should be in the commit message. > > Signed-off-by: Eric Auger > --- > arch/arm64/kvm/vgic/vgic-mmio-v3.c | 7 ++++++- > include/kvm/arm_vgic.h | 1 + > 2 files changed, 7 insertions(+), 1 deletion(-) > > diff --git a/arch/arm64/kvm/vgic/vgic-mmio-v3.c b/arch/arm64/kvm/vgic/vgic-mmio-v3.c > index 581f0f490000..2f9ef6058f6e 100644 > --- a/arch/arm64/kvm/vgic/vgic-mmio-v3.c > +++ b/arch/arm64/kvm/vgic/vgic-mmio-v3.c > @@ -277,6 +277,8 @@ static unsigned long vgic_uaccess_read_v3r_typer(struct kvm_vcpu *vcpu, > gpa_t addr, unsigned int len) > { > unsigned long mpidr = kvm_vcpu_get_mpidr_aff(vcpu); > + struct vgic_cpu *vgic_cpu = &vcpu->arch.vgic_cpu; > + struct vgic_redist_region *rdreg = vgic_cpu->rdreg; > int target_vcpu_id = vcpu->vcpu_id; > u64 value; > > @@ -286,7 +288,9 @@ static unsigned long vgic_uaccess_read_v3r_typer(struct kvm_vcpu *vcpu, > if (vgic_has_its(vcpu->kvm)) > value |= GICR_TYPER_PLPIS; > > - /* reporting of the Last bit is not supported for userspace */ > + if (rdreg && (vgic_cpu->rdreg_index == (rdreg->free_index - 1))) > + value |= GICR_TYPER_LAST; > + > return extract_bytes(value, addr & 7, len); > } > > @@ -714,6 +718,7 @@ int vgic_register_redist_iodev(struct kvm_vcpu *vcpu) > return -EINVAL; > > vgic_cpu->rdreg = rdreg; > + vgic_cpu->rdreg_index = rdreg->free_index; What happens if the next redistributor region we register has the base address adjacent to this one? I'm really not familiar with the code, but is it not possible to create two Redistributor regions (via KVM_DEV_ARM_VGIC_GRP_ADDR(KVM_VGIC_V3_ADDR_TYPE_REDIST)) where the second Redistributor region start address is immediately after the last Redistributor in the preceding region? Thanks, Alex > > rd_base = rdreg->base + rdreg->free_index * KVM_VGIC_V3_REDIST_SIZE; > > diff --git a/include/kvm/arm_vgic.h b/include/kvm/arm_vgic.h > index a8d8fdcd3723..596c069263a7 100644 > --- a/include/kvm/arm_vgic.h > +++ b/include/kvm/arm_vgic.h > @@ -322,6 +322,7 @@ struct vgic_cpu { > */ > struct vgic_io_device rd_iodev; > struct vgic_redist_region *rdreg; > + u32 rdreg_index; > > /* Contains the attributes and gpa of the LPI pending tables. */ > u64 pendbaser;