Received: by 2002:a05:6a10:2785:0:0:0:0 with SMTP id ia5csp3236909pxb; Tue, 12 Jan 2021 09:31:34 -0800 (PST) X-Google-Smtp-Source: ABdhPJwUqPHy//SAy26IeAAcXWutYVxI7tnYRTWD3Ay7IFbmegJ98kREOrNuAb0NX9IQ1DSGgmkZ X-Received: by 2002:a50:becf:: with SMTP id e15mr205644edk.138.1610472694083; Tue, 12 Jan 2021 09:31:34 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1610472694; cv=none; d=google.com; s=arc-20160816; b=zegswbq0n6u4AdDNP5+rygDF1aGh58YcZKhOLt5BoiS9SGHjmI6JJyJylY6xL96XIh qnq0xfhA/BHQfhFKAeyTr/XRvM1KN0rEtkgF/xN8j/IFN07soXQCNm8X9LrwFR+A3ld5 HCVUZZBZynQ5aHjAog2Sy50lfxVYV+ReqkKguVwpWO0IiunE0eqW5pM0yBH3TpvbDOKt VLV7W2MclbTsxpbTkE0BAWA9Hm8VbgtEJBkbmUy89C2WvZatRf9tQ8qZseBcTNsvSnvg KnQ+WDBD1a50ZmhLG5bUuwfc6EePMiFiwv930o4EKrpDWjXI7EqgsB50QXm1ZEHSAsXv ecdA== 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=6yvVHS2ZYAAQlayFUlKUcG4mnk6PXBEAZrkuix7AmJY=; b=DbO7MA9kQsynEXYz/lh1/57Uu4Bf52BUHrPGv97YXjGDQDWAGR25vL5T+ToaFkdG5r kjZepl7+mU4C8LWNvHgwAFkaExBC44RkNxdTBM+Vqyl65d7Bt5FlXy+eNTzkjULSDUWM AZ7qDYeRL/hVveDiH9ywIhPoTgYCZNvlbISjzq6a7P+2UKEV1NlQxX5cK950+bizggTl Siil8KSYvDhXxxF0fWYWWLltPdABqYsClSDj96wma34zEi41fO+lBIoEc/QaT+jBwf92 gEC34P9E/DV0BGFpdRrkpQaDdA1HYuDVpW58291BmjXq8yLZOX1RApZOVhHM2vOBR/Qb cXLg== 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 j23si1373685ejy.309.2021.01.12.09.31.08; Tue, 12 Jan 2021 09:31:34 -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 S2404745AbhALR3i (ORCPT + 99 others); Tue, 12 Jan 2021 12:29:38 -0500 Received: from foss.arm.com ([217.140.110.172]:50124 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S2388300AbhALR3h (ORCPT ); Tue, 12 Jan 2021 12:29:37 -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 E72FA101E; Tue, 12 Jan 2021 09:28:51 -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 655A13F719; Tue, 12 Jan 2021 09:28:50 -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: Date: Tue, 12 Jan 2021 17:28:52 +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. If I understand your patch correctly, it is possible for the GICR_TYPER.Last bit to be transiently 1 if the register is accessed before all the redistributors regions have been configured. Arm IHI 0069F states that accesses to the GICR_TYPER register are RO. I haven't found exactly what RO means (please point me to the definition if you find it in the architecture!), but I assume it means read-only and I'm not sure how correct (from an architectural point of view) it is for two subsequent reads of this register to return different values. Maybe Marc can shed some light on this. Thanks, Alex > > 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; > > 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;