From nobody Fri May 17 11:58:51 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1712743491; cv=none; d=zohomail.com; s=zohoarc; b=DOviZzNSFxgFndkovLPtAM3e62ULTDuUeu7lagTk2rrEFbcX8Cxp/tSbzyh4YMgOnUpdY35aToQoAcLROR9hL89XSIMZk2oWuieZWJI1x8NndVTEXEYUScDT+Xc+UwKzaxd1l/neLEjDb1MVJPSR1JW7JlD4nuEEae6hmGtT0FM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1712743491; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=VYQeA+wWYtJQ0eyYnnv+4qhKcpC9BVa2JlqlKNbRL3U=; b=DaYZtlyJgHRiBX0cUifJa8Zmzyz470+iLtoI0DGEAwbe7X+0WaNqIyoCAKLGwGRXFeIRhk2LJUhxQOrFYhV6XeOEdaQrJ6Y5alm9DsXoNTodL739Kn67hA12Fk4IgzWdgGxIyHSOwAKPTdIPjwUbhniTDwt+eYHxa/64ChXRHKc= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 171274349149536.10447715261819; Wed, 10 Apr 2024 03:04:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ruUoC-0007II-SG; Wed, 10 Apr 2024 06:04:00 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ruUoB-0007I0-Nd for qemu-devel@nongnu.org; Wed, 10 Apr 2024 06:03:59 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ruUoA-0005EU-2P for qemu-devel@nongnu.org; Wed, 10 Apr 2024 06:03:59 -0400 Received: from mimecast-mx02.redhat.com (mx-ext.redhat.com [66.187.233.73]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-189-JNGWog0ZPIq90kljcBcMdw-1; Wed, 10 Apr 2024 06:03:55 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id F294E29ABA0D; Wed, 10 Apr 2024 10:03:54 +0000 (UTC) Received: from eperezma-thinkpadt480s.rmtes.csb (unknown [10.39.192.136]) by smtp.corp.redhat.com (Postfix) with ESMTP id 2B148C04227; Wed, 10 Apr 2024 10:03:53 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1712743436; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=VYQeA+wWYtJQ0eyYnnv+4qhKcpC9BVa2JlqlKNbRL3U=; b=B9Zo0lF2GiE+zM+GU34j5e3UT0IjSt0LzHdEz9eL56Wzh95ap9wyohhU01lToxOwe5ChwC 44v1bUc6MQFPBhRDg3UFou/jxLVyzgsxrEnZGjy0MZZZFfSJDtGPeY+92wpQVN7D/v1Cgx bR1jOA/KdDeNQ5jqiqUu2a36MnlfImI= X-MC-Unique: JNGWog0ZPIq90kljcBcMdw-1 From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= To: qemu-devel@nongnu.org Cc: Si-Wei Liu , "Michael S. Tsirkin" , Lei Yang , Peter Xu , Jonah Palmer , Dragos Tatulea , Jason Wang Subject: [RFC 1/2] iova_tree: add an id member to DMAMap Date: Wed, 10 Apr 2024 12:03:44 +0200 Message-ID: <20240410100345.389462-2-eperezma@redhat.com> In-Reply-To: <20240410100345.389462-1-eperezma@redhat.com> References: <20240410100345.389462-1-eperezma@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.8 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=eperezma@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.701, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1712743492850100001 IOVA tree is also used to track the mappings of virtio-net shadow virtqueue. This mappings may not match with the GPA->HVA ones. This causes a problem when overlapped regions (different GPA but same translated HVA) exists in the tree, as looking them by HVA will return them twice. To solve this, create an id member so we can assign unique identifiers (GPA) to the maps. Signed-off-by: Eugenio P=C3=A9rez --- include/qemu/iova-tree.h | 5 +++-- util/iova-tree.c | 3 ++- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/include/qemu/iova-tree.h b/include/qemu/iova-tree.h index 2a10a7052e..34ee230e7d 100644 --- a/include/qemu/iova-tree.h +++ b/include/qemu/iova-tree.h @@ -36,6 +36,7 @@ typedef struct DMAMap { hwaddr iova; hwaddr translated_addr; hwaddr size; /* Inclusive */ + uint64_t id; IOMMUAccessFlags perm; } QEMU_PACKED DMAMap; typedef gboolean (*iova_tree_iterator)(DMAMap *map); @@ -100,8 +101,8 @@ const DMAMap *iova_tree_find(const IOVATree *tree, cons= t DMAMap *map); * @map: the mapping to search * * Search for a mapping in the iova tree that translated_addr overlaps wit= h the - * mapping range specified. Only the first found mapping will be - * returned. + * mapping range specified and map->id is equal. Only the first found + * mapping will be returned. * * Return: DMAMap pointer if found, or NULL if not found. Note that * the returned DMAMap pointer is maintained internally. User should diff --git a/util/iova-tree.c b/util/iova-tree.c index 536789797e..0863e0a3b8 100644 --- a/util/iova-tree.c +++ b/util/iova-tree.c @@ -97,7 +97,8 @@ static gboolean iova_tree_find_address_iterator(gpointer = key, gpointer value, =20 needle =3D args->needle; if (map->translated_addr + map->size < needle->translated_addr || - needle->translated_addr + needle->size < map->translated_addr) { + needle->translated_addr + needle->size < map->translated_addr || + needle->id !=3D map->id) { return false; } =20 --=20 2.44.0 From nobody Fri May 17 11:58:51 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass(p=none dis=none) header.from=redhat.com ARC-Seal: i=1; a=rsa-sha256; t=1712743491; cv=none; d=zohomail.com; s=zohoarc; b=BSE5N4p07Eo9HIrWzI2ZM3Ss0dYXiqsTXnqgElovcyIvwPCq95mukGb45YDh97GvxMW8Rfxf0Qr1JP0uFpEhPlOJ0tbREMsZ7G/9l6VNiHOrh9I1VuJqLO22upTfN0D32A8iMsK+W0bsrY+ujuV9VJf8tSbEv3wBBAostwPqXlM= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1712743491; h=Content-Type:Content-Transfer-Encoding:Cc:Cc:Date:Date:From:From:In-Reply-To:List-Subscribe:List-Post:List-Id:List-Archive:List-Help:List-Unsubscribe:MIME-Version:Message-ID:References:Sender:Subject:Subject:To:To:Message-Id:Reply-To; bh=knHvep8Bq+MN/mk6ErFC7gj0BiOb4fkSCh0kPtg06fI=; b=j2ekOdeiit92TM0ujP0kaCBRmcBAxHQg5X0lbd09Jg7oIBX56q15OTOPVAqQFE2UGVapXCwNgEGvWBTjx41lDKWWksws6jWUr25+wSdoN/uAfKw1UUliUkSyrDCGlQwthzQ/miHm77D8BP/P3OvM9Z4oygOREZvm0eInu+X3Uw8= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass; spf=pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) smtp.mailfrom=qemu-devel-bounces+importer=patchew.org@nongnu.org; dmarc=pass header.from= (p=none dis=none) Return-Path: Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) by mx.zohomail.com with SMTPS id 1712743491815651.3017968962647; Wed, 10 Apr 2024 03:04:51 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1ruUoG-0007J3-Nf; Wed, 10 Apr 2024 06:04:04 -0400 Received: from eggs.gnu.org ([2001:470:142:3::10]) by lists.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ruUoE-0007It-Um for qemu-devel@nongnu.org; Wed, 10 Apr 2024 06:04:02 -0400 Received: from us-smtp-delivery-124.mimecast.com ([170.10.129.124]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1ruUoD-0005HI-Eh for qemu-devel@nongnu.org; Wed, 10 Apr 2024 06:04:02 -0400 Received: from mimecast-mx02.redhat.com (mimecast-mx02.redhat.com [66.187.233.88]) by relay.mimecast.com with ESMTP with STARTTLS (version=TLSv1.3, cipher=TLS_AES_256_GCM_SHA384) id us-mta-331-f6VAVTcXOVCTBBMarXhobA-1; Wed, 10 Apr 2024 06:03:57 -0400 Received: from smtp.corp.redhat.com (int-mx08.intmail.prod.int.rdu2.redhat.com [10.11.54.8]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits) server-digest SHA256) (No client certificate requested) by mimecast-mx02.redhat.com (Postfix) with ESMTPS id 11261806602; Wed, 10 Apr 2024 10:03:57 +0000 (UTC) Received: from eperezma-thinkpadt480s.rmtes.csb (unknown [10.39.192.136]) by smtp.corp.redhat.com (Postfix) with ESMTP id 3E1D9C0157E; Wed, 10 Apr 2024 10:03:55 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=redhat.com; s=mimecast20190719; t=1712743440; h=from:from:reply-to:subject:subject:date:date:message-id:message-id: to:to:cc:cc:mime-version:mime-version:content-type:content-type: content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references; bh=knHvep8Bq+MN/mk6ErFC7gj0BiOb4fkSCh0kPtg06fI=; b=BogQNFUUyOCuTdlWog4E/VUG0VaOWa8T5oVXNHQxOBN3SGP2IYpnAC7wFKk5/dqFVVbKac mqsABFkd5WR9dufvqiTYzJG0IPn7S8UVUgamkjxbZRh9zIMBcPpp7wFColGIjFMnf/IZ8o ePojgtrigr4BDcO+UFFox1mgdV1RVvs= X-MC-Unique: f6VAVTcXOVCTBBMarXhobA-1 From: =?UTF-8?q?Eugenio=20P=C3=A9rez?= To: qemu-devel@nongnu.org Cc: Si-Wei Liu , "Michael S. Tsirkin" , Lei Yang , Peter Xu , Jonah Palmer , Dragos Tatulea , Jason Wang Subject: [RFC 2/2] vdpa: identify aliased maps in iova_tree Date: Wed, 10 Apr 2024 12:03:45 +0200 Message-ID: <20240410100345.389462-3-eperezma@redhat.com> In-Reply-To: <20240410100345.389462-1-eperezma@redhat.com> References: <20240410100345.389462-1-eperezma@redhat.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable X-Scanned-By: MIMEDefang 3.4.1 on 10.11.54.8 Received-SPF: pass (zohomail.com: domain of gnu.org designates 209.51.188.17 as permitted sender) client-ip=209.51.188.17; envelope-from=qemu-devel-bounces+importer=patchew.org@nongnu.org; helo=lists.gnu.org; Received-SPF: pass client-ip=170.10.129.124; envelope-from=eperezma@redhat.com; helo=us-smtp-delivery-124.mimecast.com X-Spam_score_int: -37 X-Spam_score: -3.8 X-Spam_bar: --- X-Spam_report: (-3.8 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-1.701, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_NONE=-0.0001, RCVD_IN_MSPIKE_H4=0.001, RCVD_IN_MSPIKE_WL=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+importer=patchew.org@nongnu.org Sender: qemu-devel-bounces+importer=patchew.org@nongnu.org X-ZohoMail-DKIM: pass (identity @redhat.com) X-ZM-MESSAGEID: 1712743492856100003 The guest may have overlapped memory regions, where different GPA leads to the same HVA. This causes a problem when overlapped regions (different GPA but same translated HVA) exists in the tree, as looking them by HVA will return them twice. To solve this, track GPA in the DMA entry that acs as unique identifiers to the maps. When the map needs to be removed, iova tree is able to find the right one. Users that does not go to this extra layer of indirection can use the iova tree as usual, with id =3D 0. Signed-off-by: Eugenio P=C3=A9rez --- hw/virtio/vhost-vdpa.c | 2 ++ 1 file changed, 2 insertions(+) diff --git a/hw/virtio/vhost-vdpa.c b/hw/virtio/vhost-vdpa.c index e827b9175f..90adff597c 100644 --- a/hw/virtio/vhost-vdpa.c +++ b/hw/virtio/vhost-vdpa.c @@ -361,6 +361,7 @@ static void vhost_vdpa_listener_region_add(MemoryListen= er *listener, mem_region.translated_addr =3D (hwaddr)(uintptr_t)vaddr, mem_region.size =3D int128_get64(llsize) - 1, mem_region.perm =3D IOMMU_ACCESS_FLAG(true, section->readonly), + mem_region.id =3D iova; =20 r =3D vhost_iova_tree_map_alloc(s->iova_tree, &mem_region); if (unlikely(r !=3D IOVA_OK)) { @@ -443,6 +444,7 @@ static void vhost_vdpa_listener_region_del(MemoryListen= er *listener, DMAMap mem_region =3D { .translated_addr =3D (hwaddr)(uintptr_t)vaddr, .size =3D int128_get64(llsize) - 1, + .id =3D iova, }; =20 result =3D vhost_iova_tree_find_iova(s->iova_tree, &mem_region); --=20 2.44.0