From nobody Wed Nov 27 19:51:03 2024 Delivered-To: importer@patchew.org Authentication-Results: mx.zohomail.com; dkim=pass header.i=@intel.com; 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=intel.com ARC-Seal: i=1; a=rsa-sha256; t=1697446163; cv=none; d=zohomail.com; s=zohoarc; b=Un21jZULfY0qPNr0G7moUyjuKwAxbK6JvNpkqPYvlFjvZV/Wv77gZxbpeypKEyuCeoo/xEEAGbGyJAAOEgyO0bz3p6D78K6ZmzBLOEGssF0JzYpvOgJzeldPhVKupd4tz8/jEPMIHBbXoHQpcQqKMmsWY+JNK2IizFN0XsYyzD8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1697446163; h=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=8TjLlwtOX5Qxad8/4CNLtSxki2o4UUsrzLnZsa7usDo=; b=JK0YdywW1Rk7jcQsypOrcDAjjRkNy/cMAQDUM72NJJNPIwnjbRpeJRGDxJ04DxU4zdoaM4J1sXDFk7B9e6OprG+1fYMuXFwQTetJlLaJOLzrD5FhS9UH67zyn7vXo7Nty0jLXS0eY9jwMNMYidIg/H1Wt4tPaapgBcIT7a9gq0A= ARC-Authentication-Results: i=1; mx.zohomail.com; dkim=pass header.i=@intel.com; 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 169744616375388.01823663702339; Mon, 16 Oct 2023 01:49:23 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1qsJGW-0007iZ-43; Mon, 16 Oct 2023 04:47:56 -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 1qsJGU-0007hu-Jg for qemu-devel@nongnu.org; Mon, 16 Oct 2023 04:47:54 -0400 Received: from mgamail.intel.com ([192.55.52.151]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1qsJGS-0001Al-E3 for qemu-devel@nongnu.org; Mon, 16 Oct 2023 04:47:54 -0400 Received: from orsmga007.jf.intel.com ([10.7.209.58]) by fmsmga107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Oct 2023 01:47:51 -0700 Received: from duan-server-s2600bt.bj.intel.com ([10.240.192.147]) by orsmga007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 16 Oct 2023 01:47:46 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1697446072; x=1728982072; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=yvpa3fvG/HrnClTGDpUIvnBZsd0pi9zd/hyMrUc3+q8=; b=FenwdPfN0wt/381/wO1eBZq0WDt8Fj9/rEV62VYSNaGZ4U67QVGkrelL Bb8VJKRIO9BR9XIwm1dYaVZpODIwskmJ59VOKjui+MFn3+9p4BvlJjtdV 55Ta0cQvugBlA0rUGw6r3NLfxwVEyoPIgxrLE9wZcHe02I5fteJ/xg3Sb A7sD06xwdHI+9t3ubprEtlgOq+uBwr5Jw0XDiyRIQXcLh9/PZSulEL6P+ mX2gp4o1/k5/Q/qLVy+s6w16wUxmBE3mNStR1EvIc7PpWTq2WZWaRilDi dz01S8J0jOpVumx/TfymUXyIuILzfHO4eDgxVDuTZKylBq8u9Whi9Uf3u g==; X-IronPort-AV: E=McAfee;i="6600,9927,10863"; a="365737577" X-IronPort-AV: E=Sophos;i="6.03,229,1694761200"; d="scan'208";a="365737577" X-ExtLoop1: 1 X-IronPort-AV: E=McAfee;i="6600,9927,10863"; a="749222828" X-IronPort-AV: E=Sophos;i="6.03,229,1694761200"; d="scan'208";a="749222828" From: Zhenzhong Duan To: qemu-devel@nongnu.org Cc: alex.williamson@redhat.com, clg@redhat.com, jgg@nvidia.com, nicolinc@nvidia.com, joao.m.martins@oracle.com, eric.auger@redhat.com, peterx@redhat.com, jasowang@redhat.com, kevin.tian@intel.com, yi.l.liu@intel.com, yi.y.sun@intel.com, chao.p.peng@intel.com, Yi Sun , Zhenzhong Duan Subject: [PATCH v2 08/27] vfio/container: Move hostwin_list in base container Date: Mon, 16 Oct 2023 16:32:04 +0800 Message-Id: <20231016083223.1519410-9-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20231016083223.1519410-1-zhenzhong.duan@intel.com> References: <20231016083223.1519410-1-zhenzhong.duan@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable 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=192.55.52.151; envelope-from=zhenzhong.duan@intel.com; helo=mgamail.intel.com X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, 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 @intel.com) X-ZM-MESSAGEID: 1697446165197100003 Content-Type: text/plain; charset="utf-8" From: Eric Auger Move hostwin_list in base container. This conducts to passing a base container to vfio_host_win_add/del and vfio_find_hostwin. No fucntional change intended. Signed-off-by: Eric Auger Signed-off-by: Yi Liu Signed-off-by: Yi Sun Signed-off-by: Zhenzhong Duan --- include/hw/vfio/vfio-common.h | 12 ++---------- include/hw/vfio/vfio-container-base.h | 8 ++++++++ hw/vfio/common.c | 18 +++++++++--------- hw/vfio/container-base.c | 8 ++++++++ hw/vfio/container.c | 18 +++++------------- 5 files changed, 32 insertions(+), 32 deletions(-) diff --git a/include/hw/vfio/vfio-common.h b/include/hw/vfio/vfio-common.h index b83ae4b3b6..85dbda296a 100644 --- a/include/hw/vfio/vfio-common.h +++ b/include/hw/vfio/vfio-common.h @@ -88,7 +88,6 @@ typedef struct VFIOLegacyContainer { uint64_t max_dirty_bitmap_size; unsigned long pgsizes; unsigned int dma_max_mappings; - QLIST_HEAD(, VFIOHostDMAWindow) hostwin_list; QLIST_HEAD(, VFIOGroup) group_list; QLIST_HEAD(, VFIORamDiscardListener) vrdl_list; QLIST_HEAD(, VFIODevice) device_list; @@ -104,13 +103,6 @@ typedef struct VFIORamDiscardListener { QLIST_ENTRY(VFIORamDiscardListener) next; } VFIORamDiscardListener; =20 -typedef struct VFIOHostDMAWindow { - hwaddr min_iova; - hwaddr max_iova; - uint64_t iova_pgsizes; - QLIST_ENTRY(VFIOHostDMAWindow) hostwin_next; -} VFIOHostDMAWindow; - typedef struct VFIODeviceOps VFIODeviceOps; =20 typedef struct VFIODevice { @@ -185,10 +177,10 @@ typedef struct VFIODisplay { } dmabuf; } VFIODisplay; =20 -void vfio_host_win_add(VFIOLegacyContainer *container, +void vfio_host_win_add(VFIOContainer *bcontainer, hwaddr min_iova, hwaddr max_iova, uint64_t iova_pgsizes); -int vfio_host_win_del(VFIOLegacyContainer *container, hwaddr min_iova, +int vfio_host_win_del(VFIOContainer *bcontainer, hwaddr min_iova, hwaddr max_iova); VFIOAddressSpace *vfio_get_address_space(AddressSpace *as); void vfio_put_address_space(VFIOAddressSpace *space); diff --git a/include/hw/vfio/vfio-container-base.h b/include/hw/vfio/vfio-c= ontainer-base.h index 1f6d5fd229..03bffbff73 100644 --- a/include/hw/vfio/vfio-container-base.h +++ b/include/hw/vfio/vfio-container-base.h @@ -47,6 +47,13 @@ typedef struct VFIOGuestIOMMU { QLIST_ENTRY(VFIOGuestIOMMU) giommu_next; } VFIOGuestIOMMU; =20 +typedef struct VFIOHostDMAWindow { + hwaddr min_iova; + hwaddr max_iova; + uint64_t iova_pgsizes; + QLIST_ENTRY(VFIOHostDMAWindow) hostwin_next; +} VFIOHostDMAWindow; + typedef struct { unsigned long *bitmap; hwaddr size; @@ -60,6 +67,7 @@ struct VFIOContainer { VFIOIOMMUBackendOpsClass *ops; VFIOAddressSpace *space; QLIST_HEAD(, VFIOGuestIOMMU) giommu_list; + QLIST_HEAD(, VFIOHostDMAWindow) hostwin_list; QLIST_ENTRY(VFIOContainer) next; }; =20 diff --git a/hw/vfio/common.c b/hw/vfio/common.c index 49cb5b6958..511f538c00 100644 --- a/hw/vfio/common.c +++ b/hw/vfio/common.c @@ -252,12 +252,12 @@ bool vfio_devices_all_running_and_mig_active(VFIOLega= cyContainer *container) return true; } =20 -void vfio_host_win_add(VFIOLegacyContainer *container, hwaddr min_iova, +void vfio_host_win_add(VFIOContainer *bcontainer, hwaddr min_iova, hwaddr max_iova, uint64_t iova_pgsizes) { VFIOHostDMAWindow *hostwin; =20 - QLIST_FOREACH(hostwin, &container->hostwin_list, hostwin_next) { + QLIST_FOREACH(hostwin, &bcontainer->hostwin_list, hostwin_next) { if (ranges_overlap(hostwin->min_iova, hostwin->max_iova - hostwin->min_iova + 1, min_iova, @@ -271,15 +271,15 @@ void vfio_host_win_add(VFIOLegacyContainer *container= , hwaddr min_iova, hostwin->min_iova =3D min_iova; hostwin->max_iova =3D max_iova; hostwin->iova_pgsizes =3D iova_pgsizes; - QLIST_INSERT_HEAD(&container->hostwin_list, hostwin, hostwin_next); + QLIST_INSERT_HEAD(&bcontainer->hostwin_list, hostwin, hostwin_next); } =20 -int vfio_host_win_del(VFIOLegacyContainer *container, +int vfio_host_win_del(VFIOContainer *bcontainer, hwaddr min_iova, hwaddr max_iova) { VFIOHostDMAWindow *hostwin; =20 - QLIST_FOREACH(hostwin, &container->hostwin_list, hostwin_next) { + QLIST_FOREACH(hostwin, &bcontainer->hostwin_list, hostwin_next) { if (hostwin->min_iova =3D=3D min_iova && hostwin->max_iova =3D=3D = max_iova) { QLIST_REMOVE(hostwin, hostwin_next); g_free(hostwin); @@ -540,13 +540,13 @@ static void vfio_unregister_ram_discard_listener(VFIO= LegacyContainer *container, g_free(vrdl); } =20 -static VFIOHostDMAWindow *vfio_find_hostwin(VFIOLegacyContainer *container, +static VFIOHostDMAWindow *vfio_find_hostwin(VFIOContainer *bcontainer, hwaddr iova, hwaddr end) { VFIOHostDMAWindow *hostwin; bool hostwin_found =3D false; =20 - QLIST_FOREACH(hostwin, &container->hostwin_list, hostwin_next) { + QLIST_FOREACH(hostwin, &bcontainer->hostwin_list, hostwin_next) { if (hostwin->min_iova <=3D iova && end <=3D hostwin->max_iova) { hostwin_found =3D true; break; @@ -659,7 +659,7 @@ static void vfio_listener_region_add(MemoryListener *li= stener, goto fail; } =20 - hostwin =3D vfio_find_hostwin(container, iova, end); + hostwin =3D vfio_find_hostwin(bcontainer, iova, end); if (!hostwin) { error_setg(&err, "Container %p can't map guest IOVA region" " 0x%"HWADDR_PRIx"..0x%"HWADDR_PRIx, container, iova, e= nd); @@ -842,7 +842,7 @@ static void vfio_listener_region_del(MemoryListener *li= stener, hwaddr pgmask; VFIOHostDMAWindow *hostwin; =20 - hostwin =3D vfio_find_hostwin(container, iova, end); + hostwin =3D vfio_find_hostwin(bcontainer, iova, end); assert(hostwin); /* or region_add() would have failed */ =20 pgmask =3D (1ULL << ctz64(hostwin->iova_pgsizes)) - 1; diff --git a/hw/vfio/container-base.c b/hw/vfio/container-base.c index f2a9a33465..12b256c70e 100644 --- a/hw/vfio/container-base.c +++ b/hw/vfio/container-base.c @@ -76,11 +76,13 @@ void vfio_container_init(VFIOContainer *bcontainer, bcontainer->ops =3D ops; bcontainer->space =3D space; QLIST_INIT(&bcontainer->giommu_list); + QLIST_INIT(&bcontainer->hostwin_list); } =20 void vfio_container_destroy(VFIOContainer *bcontainer) { VFIOGuestIOMMU *giommu, *tmp; + VFIOHostDMAWindow *hostwin, *next; =20 QLIST_REMOVE(bcontainer, next); =20 @@ -90,6 +92,12 @@ void vfio_container_destroy(VFIOContainer *bcontainer) QLIST_REMOVE(giommu, giommu_next); g_free(giommu); } + + QLIST_FOREACH_SAFE(hostwin, &bcontainer->hostwin_list, hostwin_next, + next) { + QLIST_REMOVE(hostwin, hostwin_next); + g_free(hostwin); + } } =20 static const TypeInfo vfio_iommu_backend_ops_type_info =3D { diff --git a/hw/vfio/container.c b/hw/vfio/container.c index 7ca61a7d36..5d111f69c9 100644 --- a/hw/vfio/container.c +++ b/hw/vfio/container.c @@ -231,7 +231,7 @@ static int vfio_legacy_add_section_window(VFIOContainer= *bcontainer, } =20 /* For now intersections are not allowed, we may relax this later */ - QLIST_FOREACH(hostwin, &container->hostwin_list, hostwin_next) { + QLIST_FOREACH(hostwin, &bcontainer->hostwin_list, hostwin_next) { if (ranges_overlap(hostwin->min_iova, hostwin->max_iova - hostwin->min_iova + 1, section->offset_within_address_space, @@ -253,7 +253,7 @@ static int vfio_legacy_add_section_window(VFIOContainer= *bcontainer, return ret; } =20 - vfio_host_win_add(container, section->offset_within_address_space, + vfio_host_win_add(bcontainer, section->offset_within_address_space, section->offset_within_address_space + int128_get64(section->size) - 1, pgsize); #ifdef CONFIG_KVM @@ -299,7 +299,7 @@ static void vfio_legacy_del_section_window(VFIOContaine= r *bcontainer, =20 vfio_spapr_remove_window(container, section->offset_within_address_space); - if (vfio_host_win_del(container, + if (vfio_host_win_del(bcontainer, section->offset_within_address_space, section->offset_within_address_space + int128_get64(section->size) - 1) < 0) { @@ -636,7 +636,6 @@ static int vfio_connect_container(VFIOGroup *group, Add= ressSpace *as, container->error =3D NULL; container->dirty_pages_supported =3D false; container->dma_max_mappings =3D 0; - QLIST_INIT(&container->hostwin_list); QLIST_INIT(&container->vrdl_list); bcontainer =3D &container->bcontainer; vfio_container_init(bcontainer, space, ops); @@ -681,7 +680,7 @@ static int vfio_connect_container(VFIOGroup *group, Add= ressSpace *as, * information to get the actual window extent rather than assume * a 64-bit IOVA address space. */ - vfio_host_win_add(container, 0, (hwaddr)-1, container->pgsizes); + vfio_host_win_add(bcontainer, 0, (hwaddr)-1, container->pgsizes); =20 break; } @@ -746,7 +745,7 @@ static int vfio_connect_container(VFIOGroup *group, Add= ressSpace *as, } else { /* The default table uses 4K pages */ container->pgsizes =3D 0x1000; - vfio_host_win_add(container, info.dma32_window_start, + vfio_host_win_add(bcontainer, info.dma32_window_start, info.dma32_window_start + info.dma32_window_size - 1, 0x1000); @@ -822,16 +821,9 @@ static void vfio_disconnect_container(VFIOGroup *group) =20 if (QLIST_EMPTY(&container->group_list)) { VFIOAddressSpace *space =3D container->bcontainer.space; - VFIOHostDMAWindow *hostwin, *next; =20 vfio_container_destroy(bcontainer); =20 - QLIST_FOREACH_SAFE(hostwin, &container->hostwin_list, hostwin_next, - next) { - QLIST_REMOVE(hostwin, hostwin_next); - g_free(hostwin); - } - trace_vfio_disconnect_container(container->fd); close(container->fd); g_free(container); --=20 2.34.1