From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-15.3 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_CR_TRAILER, INCLUDES_PATCH,MAILING_LIST_MULTI,NICE_REPLY_A,SPF_HELO_NONE,SPF_PASS, USER_AGENT_SANE_1 autolearn=unavailable autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id E2753C433ED for ; Thu, 22 Apr 2021 00:14:16 +0000 (UTC) Received: from desiato.infradead.org (desiato.infradead.org [90.155.92.199]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 5AAA1613E6 for ; Thu, 22 Apr 2021 00:14:16 +0000 (UTC) DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 5AAA1613E6 Authentication-Results: mail.kernel.org; dmarc=fail (p=none dis=none) header.from=redhat.com Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=desiato.20200630; h=Sender:Content-Type: Content-Transfer-Encoding:Reply-To:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:In-Reply-To:MIME-Version:Date: Message-ID:From:References:To:Subject:Cc:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=SpYxB9gk0yDU74OcO0sMNUlsXvBh0+8nOSRFbTz1Ums=; b=Om7vbX7sP4bSOV BmmP0u25xaJOnBSGYsT6zVUfIPJ3PUWNwifM7XqRrbkG7Of2mpt0XGRi4n+ecuwyIC9oLz7ekHz5j kbezQrjuVx4rF5hhmfblmpRZONQs0VNpSTG1kq/iU5pFbsl6IwGbs5U8Hay02EdI64jcjvGoJbGb3 PiP07bdA2bfWQcx25uHXGzDryiBCENuqpdSTvylZDAR5WvdpovC4kTqWxsE4wr4gHiOpw3mrwJzFF 1ahzA2Lw8BJtw8E7eH05ehFbdyYnKL5qYG630vAjz8TckViOvhXJ+Ab9DBEJlOeR050sKyCm2XUUy 3mNnL4CpGGFXjbvLOu8w==; Received: from localhost ([::1] helo=desiato.infradead.org) by desiato.infradead.org with esmtp (Exim 4.94 #2 (Red Hat Linux)) id 1lZMx2-00FRo6-5Z; Thu, 22 Apr 2021 00:12:12 +0000 Received: from bombadil.infradead.org ([2607:7c80:54:e::133]) by desiato.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lZMwz-00FRnp-II for linux-arm-kernel@desiato.infradead.org; Thu, 22 Apr 2021 00:12:09 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=bombadil.20210309; h=Content-Transfer-Encoding: Content-Type:In-Reply-To:MIME-Version:Date:Message-ID:From:References:To: Subject:Reply-To:Sender:Cc:Content-ID:Content-Description; bh=M/J8IWhEGs6k/tx/BlrhqUV6+bSTGhNVblRiZYUIZ5M=; b=mO5S4lh9PglvwB08Abon6kgJ7u cGHf+G+144zUcaqZCZqf92Qt1+ymbSkAY+9uLIHVmOKDHfTWkdVr7S+sqRNL7CUsz4u6heDdRZsXS yXJVFhdaEs8JR5bYmUdYvBM4Xjl/vGhd+hZC3b4Z3kxNLrcou2c1qO+kp1GSa2OX1GwgTo0/ExIWi pCR5I/6b6S/nOKQf8n5Yyk2NnqG8vsFYkMqcSIrthvA0TUZL89ygM6Za/haeJ8ARPnhMMIWDJ72mC gOdkZ0aVigaymY2jNK2Hr1bgdA6Y6GJsFZZRvfLZA5HccP+XtkNpIBRKAl9IJa+mb67wgyX7qQVrf jphH9REg==; Received: from us-smtp-delivery-124.mimecast.com ([170.10.133.124]) by bombadil.infradead.org with esmtps (Exim 4.94 #2 (Red Hat Linux)) id 1lZMww-00DHHV-Oi for linux-arm-kernel@lists.infradead.org; Thu, 22 Apr 2021 00:12:08 +0000 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1619050325; h=from:from:reply-to:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:mime-version:mime-version: content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=M/J8IWhEGs6k/tx/BlrhqUV6+bSTGhNVblRiZYUIZ5M=; b=ECAxQPvpGumouHl3DFicDVbz6SFcx9gAntdRuXeG6ZGet+r9XqdR5IgrHqUq+vui9X2DvC YRA6SrufF72ralx/hzk657We07RNsMggAi5hYIwBWqs8HjTb19yEjXkL4/grPpdHtnMGRl lpypk8mQbAwZMgqHZTAjSDwY+Snje1g= Received: from mimecast-mx01.redhat.com (mimecast-mx01.redhat.com [209.132.183.4]) (Using TLS) by relay.mimecast.com with ESMTP id us-mta-104-MmiDiyKwMmig7-nSkxAmyA-1; Wed, 21 Apr 2021 20:12:03 -0400 X-MC-Unique: MmiDiyKwMmig7-nSkxAmyA-1 Received: from smtp.corp.redhat.com (int-mx03.intmail.prod.int.phx2.redhat.com [10.5.11.13]) (using TLSv1.2 with cipher AECDH-AES256-SHA (256/256 bits)) (No client certificate requested) by mimecast-mx01.redhat.com (Postfix) with ESMTPS id 7542681746C; Thu, 22 Apr 2021 00:12:02 +0000 (UTC) Received: from [10.64.54.94] (vpn2-54-94.bne.redhat.com [10.64.54.94]) by smtp.corp.redhat.com (Postfix) with ESMTPS id 76F9060871; Thu, 22 Apr 2021 00:11:59 +0000 (UTC) Subject: Re: [PATCH v4 1/2] kvm/arm64: Remove the creation time's mapping of MMIO regions To: Keqian Zhu , linux-kernel@vger.kernel.org, linux-arm-kernel@lists.infradead.org, kvm@vger.kernel.org, kvmarm@lists.cs.columbia.edu, Marc Zyngier , Santosh Shukla References: <20210415140328.24200-1-zhukeqian1@huawei.com> <20210415140328.24200-2-zhukeqian1@huawei.com> From: Gavin Shan Message-ID: Date: Thu, 22 Apr 2021 12:12:10 +1000 User-Agent: Mozilla/5.0 (X11; Linux x86_64; rv:68.0) Gecko/20100101 Thunderbird/68.2.0 MIME-Version: 1.0 In-Reply-To: Content-Language: en-US X-Scanned-By: MIMEDefang 2.79 on 10.5.11.13 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20210421_171206_912111_66612C64 X-CRM114-Status: GOOD ( 21.68 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Reply-To: Gavin Shan Content-Transfer-Encoding: 7bit Content-Type: text/plain; charset="us-ascii"; Format="flowed" Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org Hi Keqian, On 4/21/21 4:28 PM, Keqian Zhu wrote: > On 2021/4/21 14:38, Gavin Shan wrote: >> On 4/16/21 12:03 AM, Keqian Zhu wrote: >>> The MMIO regions may be unmapped for many reasons and can be remapped >>> by stage2 fault path. Map MMIO regions at creation time becomes a >>> minor optimization and makes these two mapping path hard to sync. >>> >>> Remove the mapping code while keep the useful sanity check. >>> >>> Signed-off-by: Keqian Zhu >>> --- >>> arch/arm64/kvm/mmu.c | 38 +++----------------------------------- >>> 1 file changed, 3 insertions(+), 35 deletions(-) >>> >> >> After removing the logic to create stage2 mapping for VM_PFNMAP region, >> I think the "do { } while" loop becomes unnecessary and can be dropped >> completely. It means the only sanity check is to see if the memory slot >> overflows IPA space or not. In that case, KVM_MR_FLAGS_ONLY can be >> ignored because the memory slot's base address and length aren't changed >> when we have KVM_MR_FLAGS_ONLY. > Maybe not exactly. Here we do an important sanity check that we shouldn't > log dirty for memslots with VM_PFNMAP. > Yeah, Sorry that I missed that part. Something associated with Santosh's patch. The flag can be not existing until the page fault happened on the vma. In this case, the check could be not working properly. [PATCH] KVM: arm64: Correctly handle the mmio faulting [...] Thanks, Gavin >> >>> diff --git a/arch/arm64/kvm/mmu.c b/arch/arm64/kvm/mmu.c >>> index 8711894db8c2..c59af5ca01b0 100644 >>> --- a/arch/arm64/kvm/mmu.c >>> +++ b/arch/arm64/kvm/mmu.c >>> @@ -1301,7 +1301,6 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm, >>> { >>> hva_t hva = mem->userspace_addr; >>> hva_t reg_end = hva + mem->memory_size; >>> - bool writable = !(mem->flags & KVM_MEM_READONLY); >>> int ret = 0; >>> if (change != KVM_MR_CREATE && change != KVM_MR_MOVE && >>> @@ -1318,8 +1317,7 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm, >>> mmap_read_lock(current->mm); >>> /* >>> * A memory region could potentially cover multiple VMAs, and any holes >>> - * between them, so iterate over all of them to find out if we can map >>> - * any of them right now. >>> + * between them, so iterate over all of them. >>> * >>> * +--------------------------------------------+ >>> * +---------------+----------------+ +----------------+ >>> @@ -1330,50 +1328,20 @@ int kvm_arch_prepare_memory_region(struct kvm *kvm, >>> */ >>> do { >>> struct vm_area_struct *vma = find_vma(current->mm, hva); >>> - hva_t vm_start, vm_end; >>> if (!vma || vma->vm_start >= reg_end) >>> break; >>> - /* >>> - * Take the intersection of this VMA with the memory region >>> - */ >>> - vm_start = max(hva, vma->vm_start); >>> - vm_end = min(reg_end, vma->vm_end); >>> - >>> if (vma->vm_flags & VM_PFNMAP) { >>> - gpa_t gpa = mem->guest_phys_addr + >>> - (vm_start - mem->userspace_addr); >>> - phys_addr_t pa; >>> - >>> - pa = (phys_addr_t)vma->vm_pgoff << PAGE_SHIFT; >>> - pa += vm_start - vma->vm_start; >>> - >>> /* IO region dirty page logging not allowed */ >>> if (memslot->flags & KVM_MEM_LOG_DIRTY_PAGES) { >>> ret = -EINVAL; >>> - goto out; >>> - } >>> - >>> - ret = kvm_phys_addr_ioremap(kvm, gpa, pa, >>> - vm_end - vm_start, >>> - writable); >>> - if (ret) >>> break; >>> + } >>> } >>> - hva = vm_end; >>> + hva = min(reg_end, vma->vm_end); >>> } while (hva < reg_end); >>> - if (change == KVM_MR_FLAGS_ONLY) >>> - goto out; >>> - >>> - spin_lock(&kvm->mmu_lock); >>> - if (ret) >>> - unmap_stage2_range(&kvm->arch.mmu, mem->guest_phys_addr, mem->memory_size); >>> - else if (!cpus_have_final_cap(ARM64_HAS_STAGE2_FWB)) >>> - stage2_flush_memslot(kvm, memslot); >>> - spin_unlock(&kvm->mmu_lock); >>> -out: >>> mmap_read_unlock(current->mm); >>> return ret; >>> } >>> >> >> . >> > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel