Received: by 2002:a25:d7c1:0:0:0:0:0 with SMTP id o184csp4789006ybg; Tue, 29 Oct 2019 12:24:25 -0700 (PDT) X-Google-Smtp-Source: APXvYqx5gGsZvdvePj4j9ZEPTvMArBLTF8jbeoQD3PWAIUaZAdDsDXxQZWnrTOEtdDZlfiz6HYq+ X-Received: by 2002:a17:906:9618:: with SMTP id s24mr5071484ejx.185.1572377065560; Tue, 29 Oct 2019 12:24:25 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1572377065; cv=none; d=google.com; s=arc-20160816; b=mkddXftvA1Ox9pAZG6IEffAJZy6JW8VOpo4WUXE35JJZXa0KwUDPxxkueoqOGl2NeT FSE2/gMhHu42b0c1Y/q7KuHzpCGQlBYSSFWaYKL5H4IFrZlGs1ITL3GZPt19bnnjYziP 9Xnjz/0UpemYK1zSZ1JXHmKy1uvEinFv3x2q7P1wtvMn3o5+4BrrVumLv94tHaP47AiI breNAMf1jOIiK/sgSn6UmdUvQ4ch/SEDx6TnAxx6HvsR42BMkrGxmzufDActtiT42fNA fTEhwtR7+Fq1jSJtKK+5Y384WYw+FPWmm69Dmat6qQJfeDC21igG9f7ki5PL2do6DnN7 JZzQ== 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 :content-language:in-reply-to:mime-version:user-agent:date :message-id:from:references:cc:to:subject; bh=4raVPFyxBD8Kxb7uspZLpT53pz7iLTLZTW2K82iVNc0=; b=EzEl5uQJ8THw3WIafYLM6/iUlDMEdChJYFGIvG55CzuyveChs7vIr8E6+GT7pryQPc tu7OfXl93ttjWaDD8jzTsq7oMjP9ZeAwUw6UnSuNs5550jJAtGvndhrXlPkxCiOELGJ5 Ob5DQd0zSPNHTCN+t1CA06+VbLaH5yN0i8hm+PkCD5aM8ZCqiEqHLPGUwqDNZtPS4zSz cFegAVi+QLXzhs3ikQjLT1XljweXktTf9W3l1taUSzl4EWLbR3ea4dC/1c6W6HfuuiTq fxrJAssAgEqGE9/OqMO/oIne2fRc4AAswy02WQ+GnEHGB6TgDhvVtqWY313H79Pnw5gN j9uQ== ARC-Authentication-Results: i=1; mx.google.com; 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 Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id z2si10531043edd.140.2019.10.29.12.24.02; Tue, 29 Oct 2019 12:24:25 -0700 (PDT) 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; 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 Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1730760AbfJ2Mao (ORCPT + 99 others); Tue, 29 Oct 2019 08:30:44 -0400 Received: from szxga06-in.huawei.com ([45.249.212.32]:40428 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S1726362AbfJ2Mao (ORCPT ); Tue, 29 Oct 2019 08:30:44 -0400 Received: from DGGEMS402-HUB.china.huawei.com (unknown [172.30.72.60]) by Forcepoint Email with ESMTP id 836A69BEE590D4A6CFA9; Tue, 29 Oct 2019 20:30:41 +0800 (CST) Received: from [127.0.0.1] (10.173.222.27) by DGGEMS402-HUB.china.huawei.com (10.3.19.202) with Microsoft SMTP Server id 14.3.439.0; Tue, 29 Oct 2019 20:30:32 +0800 Subject: Re: [PATCH 3/3] KVM: arm/arm64: vgic: Don't rely on the wrong pending table To: Auger Eric , , , , CC: , , , References: <20191029071919.177-1-yuzenghui@huawei.com> <20191029071919.177-4-yuzenghui@huawei.com> <5e4d1a2f-7107-efe3-9dde-626662e31ac5@redhat.com> From: Zenghui Yu Message-ID: <825b87df-618f-7f2d-0fe9-4cec240c88bf@huawei.com> Date: Tue, 29 Oct 2019 20:30:32 +0800 User-Agent: Mozilla/5.0 (Windows NT 10.0; WOW64; rv:68.0) Gecko/20100101 Thunderbird/68.2.0 MIME-Version: 1.0 In-Reply-To: <5e4d1a2f-7107-efe3-9dde-626662e31ac5@redhat.com> Content-Type: text/plain; charset="utf-8"; format=flowed Content-Language: en-US Content-Transfer-Encoding: 7bit X-Originating-IP: [10.173.222.27] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org On 2019/10/29 20:17, Auger Eric wrote: > Hi Zenghui, Marc, > > On 10/29/19 8:19 AM, Zenghui Yu wrote: >> It's possible that two LPIs locate in the same "byte_offset" but target >> two different vcpus, where their pending status are indicated by two >> different pending tables. In such a scenario, using last_byte_offset >> optimization will lead KVM relying on the wrong pending table entry. >> Let us use last_ptr instead, which can be treated as a byte index into >> a pending table and also, can be vcpu specific. >> >> Signed-off-by: Zenghui Yu >> --- >> >> If this patch has done the right thing, we can even add the: >> >> Fixes: 280771252c1b ("KVM: arm64: vgic-v3: KVM_DEV_ARM_VGIC_SAVE_PENDING_TABLES") >> >> But to be honest, I'm not clear about what has this patch actually fixed. >> Pending tables should contain all zeros before we flush vgic_irq's pending >> status into guest's RAM (thinking that guest should never write anything >> into it). So the pending table entry we've read from the guest memory >> seems always be zero. And we will always do the right thing even if we >> rely on the wrong pending table entry. >> >> I think I must have some misunderstanding here... Please fix me. >> >> virt/kvm/arm/vgic/vgic-v3.c | 6 +++--- >> 1 file changed, 3 insertions(+), 3 deletions(-) >> >> diff --git a/virt/kvm/arm/vgic/vgic-v3.c b/virt/kvm/arm/vgic/vgic-v3.c >> index 5ef93e5041e1..7cd2e2f81513 100644 >> --- a/virt/kvm/arm/vgic/vgic-v3.c >> +++ b/virt/kvm/arm/vgic/vgic-v3.c >> @@ -363,8 +363,8 @@ int vgic_v3_lpi_sync_pending_status(struct kvm *kvm, struct vgic_irq *irq) >> int vgic_v3_save_pending_tables(struct kvm *kvm) >> { >> struct vgic_dist *dist = &kvm->arch.vgic; >> - int last_byte_offset = -1; >> struct vgic_irq *irq; >> + gpa_t last_ptr = -1; >> int ret; >> u8 val; >> >> @@ -384,11 +384,11 @@ int vgic_v3_save_pending_tables(struct kvm *kvm) >> bit_nr = irq->intid % BITS_PER_BYTE; >> ptr = pendbase + byte_offset; >> >> - if (byte_offset != last_byte_offset) { >> + if (ptr != last_ptr) { >> ret = kvm_read_guest_lock(kvm, ptr, &val, 1); >> if (ret) >> return ret; >> - last_byte_offset = byte_offset; >> + last_ptr = ptr; >> } >> >> stored = val & (1U << bit_nr); >> > Acked-by: Eric Auger Thanks Eric, Zenghui