From nobody Fri Dec 19 14:21:06 2025 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=1766039279; cv=none; d=zohomail.com; s=zohoarc; b=FRfdSAiuurmJLX++Df6crqnD7AiCRp7N/yv78NSNBMHimMJPKDdAzBgR3Tj8k9gtJ2O9K0sYoGzJV33ovR5iABjL8ri4++htL3HE5Xta3G0ga9TPMfdDBo0l1LX3wHA9NItrz9G/DlwihgzWJ1EPocEcBr7xVhaowSWYKbxc7Io= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1766039279; 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=om6VO618eIcqFFG8nW9fkNBF54tj0GeDdhzmTMg3TsA=; b=gbQ29c9W5l1Vx4yZicVffvf0B7tctr/oRXxDNV6xwJqhM/PybIoWvEl9bOvxPBbuJazu9h/NhIoOhg5fl1aRmWo5zkWiAV3fnzf2YjARCo4eMnvfiXeywF8pNClT3IHVs5PcqHXaOeh2qX/AEu6wN05vr+k4GMgsftnuB9WpnMw= 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 1766039279498882.1459201488981; Wed, 17 Dec 2025 22:27:59 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vW7Ty-0003Kx-LW; Thu, 18 Dec 2025 01:27:26 -0500 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 1vW7Tx-0003KW-6A for qemu-devel@nongnu.org; Thu, 18 Dec 2025 01:27:25 -0500 Received: from mgamail.intel.com ([198.175.65.18]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vW7Tu-00015T-Ld for qemu-devel@nongnu.org; Thu, 18 Dec 2025 01:27:24 -0500 Received: from orviesa005.jf.intel.com ([10.64.159.145]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Dec 2025 22:27:19 -0800 Received: from unknown (HELO gnr-sp-2s-612.sh.intel.com) ([10.112.230.229]) by orviesa005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Dec 2025 22:27:17 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1766039242; x=1797575242; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=QdZ1ubBQIL/oXabO9On2Or1ttJr/IWvuDU6xXkUi2/c=; b=fakLYqLJ6McWm7+Zvj3vJAGoRJOkzFUNrIoniKyT7cG8ALoir6oNTGNI sNK2YlXs6BnfBqEKstHkgfwPPXgnNx7VhdOaLQrHddG/n3aw8hEl3SCr+ UppmLldpgWDCXYbBw6ma6Zpt0F4sJlGMlDmdhpqaLP/6gF9BUL2Q+FxT3 Tp176jR8g9IOGbytztnwC00nuviJg1+BfSl5cEmj0BOadxqmsFRgxiZKM XYYBfmvdw5lk5ikORctUjhY2l4HEbuL/qQ3ASlo6OppnHcwbK9Yumvbhr nsATVJb0zMzQ+f2VNaYDd78jEBrqvgbIrgpYkoTmKXMgfnURL0SA4Hqu+ Q==; X-CSE-ConnectionGUID: i9aX1W84SzSJTbEQy+a9ug== X-CSE-MsgGUID: ZsqwsqvnT9ypMw+5mPZHKQ== X-IronPort-AV: E=McAfee;i="6800,10657,11645"; a="68028499" X-IronPort-AV: E=Sophos;i="6.21,156,1763452800"; d="scan'208";a="68028499" X-CSE-ConnectionGUID: cXArXbc+SiC75uqlxnMlpg== X-CSE-MsgGUID: /C2ySSYGSJ2hfn6gDv+L7Q== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,156,1763452800"; d="scan'208";a="203569840" From: Zhenzhong Duan To: qemu-devel@nongnu.org Cc: alex@shazbot.org, clg@redhat.com, mst@redhat.com, jasowang@redhat.com, yi.l.liu@intel.com, clement.mathieu--drif@eviden.com, eric.auger@redhat.com, joao.m.martins@oracle.com, avihaih@nvidia.com, xudong.hao@intel.com, giovanni.cabiddu@intel.com, rohith.s.r@intel.com, mark.gross@intel.com, arjan.van.de.ven@intel.com, Zhenzhong Duan Subject: [PATCH v6 1/9] vfio/iommufd: Add framework code to support getting dirty bitmap before unmap Date: Thu, 18 Dec 2025 01:26:22 -0500 Message-ID: <20251218062643.624796-2-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20251218062643.624796-1-zhenzhong.duan@intel.com> References: <20251218062643.624796-1-zhenzhong.duan@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 (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=198.175.65.18; 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=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 @intel.com) X-ZM-MESSAGEID: 1766039281226158500 Currently we support device and iommu dirty tracking, device dirty tracking is preferred. Add the framework code in iommufd_cdev_unmap() to choose either device or iommu dirty tracking, just like vfio_legacy_dma_unmap_one(). Signed-off-by: Zhenzhong Duan Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Yi Liu Tested-by: Xudong Hao Tested-by: Giovannio Cabiddu Tested-by: Rohith S R --- hw/vfio/iommufd.c | 34 +++++++++++++++++++++++++++++++--- 1 file changed, 31 insertions(+), 3 deletions(-) diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c index ca8a6b7029..b527c7d1eb 100644 --- a/hw/vfio/iommufd.c +++ b/hw/vfio/iommufd.c @@ -61,14 +61,42 @@ static int iommufd_cdev_unmap(const VFIOContainer *bcon= tainer, IOMMUTLBEntry *iotlb, bool unmap_all) { const VFIOIOMMUFDContainer *container =3D VFIO_IOMMU_IOMMUFD(bcontaine= r); + IOMMUFDBackend *be =3D container->be; + uint32_t ioas_id =3D container->ioas_id; + bool need_dirty_sync =3D false; + Error *local_err =3D NULL; + int ret; =20 if (unmap_all) { size =3D UINT64_MAX; } =20 - /* TODO: Handle dma_unmap_bitmap with iotlb args (migration) */ - return iommufd_backend_unmap_dma(container->be, - container->ioas_id, iova, size); + if (iotlb && vfio_container_dirty_tracking_is_started(bcontainer)) { + if (!vfio_container_devices_dirty_tracking_is_supported(bcontainer= ) && + bcontainer->dirty_pages_supported) { + /* TODO: query dirty bitmap before DMA unmap */ + return iommufd_backend_unmap_dma(be, ioas_id, iova, size); + } + + need_dirty_sync =3D true; + } + + ret =3D iommufd_backend_unmap_dma(be, ioas_id, iova, size); + if (ret) { + return ret; + } + + if (need_dirty_sync) { + ret =3D vfio_container_query_dirty_bitmap(bcontainer, iova, size, + iotlb->translated_addr, + &local_err); + if (ret) { + error_report_err(local_err); + return ret; + } + } + + return 0; } =20 static bool iommufd_cdev_kvm_device_add(VFIODevice *vbasedev, Error **errp) --=20 2.47.1 From nobody Fri Dec 19 14:21:06 2025 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=1766039360; cv=none; d=zohomail.com; s=zohoarc; b=Bh91UOq5wnvmDxXU1ihr5Rtd/U95FlqZkEbEQ04ufgwLf+WVefwhZDJewtbrE8Wb8oV4U20qoYcUnOeEC+MAw9rcdcH3DHVFp5cYxRx2bNq/i86OvKZRUBpVjDhQMLK7aS+U6gRssumQl5aSPhMh4ISwzOZWfv6o+prOOpaHomY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1766039360; 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=HFRLE/BGHeTnnri1kXBT8o5tzCeBTHl0XqVw4Gxqe/Q=; b=DRuoNDw2+Y06jK3wGLKW2trkK8SwuTkWB29J+3pmu0X8xVJiuPgahiGXYylE2t8JoLWxL68jhOmjjgafIHD8jnmSU1u5NFG3FVRtOuRjmW3bzKYv/CLPkMCmo+gwt5CkryKD5oqV08EI2oqXs6Nxy5BmikVlb9k6QtDvbVtvmEI= 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 1766039360535760.3471832904597; Wed, 17 Dec 2025 22:29:20 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vW7U1-0003LQ-32; Thu, 18 Dec 2025 01:27:29 -0500 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 1vW7Ty-0003Kt-EO for qemu-devel@nongnu.org; Thu, 18 Dec 2025 01:27:26 -0500 Received: from mgamail.intel.com ([198.175.65.18]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vW7Tw-00014o-I7 for qemu-devel@nongnu.org; Thu, 18 Dec 2025 01:27:26 -0500 Received: from orviesa005.jf.intel.com ([10.64.159.145]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Dec 2025 22:27:23 -0800 Received: from unknown (HELO gnr-sp-2s-612.sh.intel.com) ([10.112.230.229]) by orviesa005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Dec 2025 22:27:20 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1766039244; x=1797575244; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=2RmlAOwmak+jh/vEC9lQi7dmQiq57S7kEx9cPD7O4Y4=; b=fP8HEZvw4m1DCU41woRtdgv7/e5MSbJwTtBGEoZ+MtpoV0FkB+7daiW1 LmDlCh4IiA3wXSCCm7io63OkxbvjPGHHQWA4FtyzUX9y+vE6SP1totg64 EyxwXokJ91xVrkNdWtSoBYZOhwAcVq9JsmRZXxshO1X+ei9apCmrlZm+K sxWCrfxyKDHYnC2ggtl5bO/Klor7/EgzGVgtKCXF7db42b8zyPKhzYSpH LAzf9tRxMwcepA1jrud+/+pQhB8NlZdGaDTQ7S7qh7NTeQ8WSZd1PmpY7 dszB/ctciU1ZuZMTlUa1vkhpfpNO0yA0q6z2jeW/QmowhKUk/Cq6TmSf/ Q==; X-CSE-ConnectionGUID: JfOxL8HHQTWs9hoE9UN3Aw== X-CSE-MsgGUID: GK0LWO6rQxKWCoZBmrkCgg== X-IronPort-AV: E=McAfee;i="6800,10657,11645"; a="68028506" X-IronPort-AV: E=Sophos;i="6.21,156,1763452800"; d="scan'208";a="68028506" X-CSE-ConnectionGUID: iwyPK4GtRXyityKfcGC8rA== X-CSE-MsgGUID: mlbfKuN/Q7enNesuARylYA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,156,1763452800"; d="scan'208";a="203569851" From: Zhenzhong Duan To: qemu-devel@nongnu.org Cc: alex@shazbot.org, clg@redhat.com, mst@redhat.com, jasowang@redhat.com, yi.l.liu@intel.com, clement.mathieu--drif@eviden.com, eric.auger@redhat.com, joao.m.martins@oracle.com, avihaih@nvidia.com, xudong.hao@intel.com, giovanni.cabiddu@intel.com, rohith.s.r@intel.com, mark.gross@intel.com, arjan.van.de.ven@intel.com, Zhenzhong Duan Subject: [PATCH v6 2/9] vfio/iommufd: Query dirty bitmap before DMA unmap Date: Thu, 18 Dec 2025 01:26:23 -0500 Message-ID: <20251218062643.624796-3-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20251218062643.624796-1-zhenzhong.duan@intel.com> References: <20251218062643.624796-1-zhenzhong.duan@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=198.175.65.18; 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=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 @intel.com) X-ZM-MESSAGEID: 1766039362204154100 When an existing mapping is unmapped, there could already be dirty bits which need to be recorded before unmap. If query dirty bitmap fails, we still need to do unmapping or else there is stale mapping and it's risky to guest. Co-developed-by: Joao Martins Signed-off-by: Joao Martins Signed-off-by: Zhenzhong Duan Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Yi Liu Tested-by: Xudong Hao Tested-by: Giovannio Cabiddu Tested-by: Rohith S R --- hw/vfio/iommufd.c | 19 ++++++++++++++++--- 1 file changed, 16 insertions(+), 3 deletions(-) diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c index b527c7d1eb..75e1bde2dd 100644 --- a/hw/vfio/iommufd.c +++ b/hw/vfio/iommufd.c @@ -65,7 +65,7 @@ static int iommufd_cdev_unmap(const VFIOContainer *bconta= iner, uint32_t ioas_id =3D container->ioas_id; bool need_dirty_sync =3D false; Error *local_err =3D NULL; - int ret; + int ret, unmap_ret; =20 if (unmap_all) { size =3D UINT64_MAX; @@ -74,8 +74,21 @@ static int iommufd_cdev_unmap(const VFIOContainer *bcont= ainer, if (iotlb && vfio_container_dirty_tracking_is_started(bcontainer)) { if (!vfio_container_devices_dirty_tracking_is_supported(bcontainer= ) && bcontainer->dirty_pages_supported) { - /* TODO: query dirty bitmap before DMA unmap */ - return iommufd_backend_unmap_dma(be, ioas_id, iova, size); + ret =3D vfio_container_query_dirty_bitmap(bcontainer, iova, si= ze, + iotlb->translated_addr, + &local_err); + if (ret) { + error_report_err(local_err); + } + /* Unmap stale mapping even if query dirty bitmap fails */ + unmap_ret =3D iommufd_backend_unmap_dma(be, ioas_id, iova, siz= e); + + /* + * If dirty tracking fails, return the failure to VFIO core to + * fail the migration, or else there will be dirty pages missed + * to be migrated. + */ + return unmap_ret ? : ret; } =20 need_dirty_sync =3D true; --=20 2.47.1 From nobody Fri Dec 19 14:21:06 2025 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=1766039279; cv=none; d=zohomail.com; s=zohoarc; b=X8U+7PrC/B2eDpwxEYmCnb29ka/dXlZUw/60/D79Kp57dK86eDgY1uW9u4Fi5pIrE62V7aWpAPPjMcd6OrpRG/9MNl9mz942ebTqLCnQZk+6swKbIw7gWfKIzJlM26m1Viir5LfhIUZ7xXPvkBdkI1dTylwSjf9XKSRDYmtGujc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1766039279; 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=BIjhrEsOQFJhBWGPZ05wG5Qpll2bx5NwaI/KgB7tCxY=; b=YZRlyxvjQmdrFoaadTyO6W4a9WxTtd21KV/f/ZEBmxFevT4Kt882E4x8GP4FxOTYm7UBfcU82QM8LKFIDlg995YahlPJSL+OtEwBNWr23xSPS+W2Jl55CQao4EPtE++nSvBIe9iI79z5m/1Cyx7A5Ky6ihJceRH1SZJZc7mhehE= 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 1766039279852856.3817136874039; Wed, 17 Dec 2025 22:27:59 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vW7U6-0003M9-DN; Thu, 18 Dec 2025 01:27:34 -0500 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 1vW7U3-0003Li-L5 for qemu-devel@nongnu.org; Thu, 18 Dec 2025 01:27:31 -0500 Received: from mgamail.intel.com ([198.175.65.18]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vW7U1-000176-RU for qemu-devel@nongnu.org; Thu, 18 Dec 2025 01:27:31 -0500 Received: from orviesa005.jf.intel.com ([10.64.159.145]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Dec 2025 22:27:27 -0800 Received: from unknown (HELO gnr-sp-2s-612.sh.intel.com) ([10.112.230.229]) by orviesa005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Dec 2025 22:27:24 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1766039250; x=1797575250; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=LfyNeuhUqgjGJ24g/CHR2kKYmIwQdqe2lRcUCbGnYFY=; b=a164f+6iHiEWXZxc8t+h5teB96YTeLXQYYLkhg+0mtiQRffvTFZNVVPs JNGRMA0kN91eQOgrYFZp2iyTAEHaki4bx8tCORbM9U5LiezEE5n9rQYPT VoZq1/Fb/8k3RS3aUHadsSmHEHIqlYjYtxCs22yhQlgD91SpK8LkkH7FX y1rnw+HZn0dmaoKpdcSdc/jAR/Qs7OkYtKO20b8+3gMT6GiV5+NoY5FoU RNiHEd7+7cvRAfsd5/oVZH3ZVm7RBujgYQmOZlyxRBHfUJKRVp1MCfn4g EmHIPuC85Z6F3gUXcSCxFPe6j8j5AzliP9K+dZNeo8gbGe5C44bcjjW5K A==; X-CSE-ConnectionGUID: SlWRCxEjS+6QH3IZb0KmgQ== X-CSE-MsgGUID: CDh0CAKkSi+quGftjllx0g== X-IronPort-AV: E=McAfee;i="6800,10657,11645"; a="68028517" X-IronPort-AV: E=Sophos;i="6.21,156,1763452800"; d="scan'208";a="68028517" X-CSE-ConnectionGUID: 7fxD/4gpRs26NYBg4nu2Aw== X-CSE-MsgGUID: vnUEN+cCRSmCZZUxpxLSTg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,156,1763452800"; d="scan'208";a="203569860" From: Zhenzhong Duan To: qemu-devel@nongnu.org Cc: alex@shazbot.org, clg@redhat.com, mst@redhat.com, jasowang@redhat.com, yi.l.liu@intel.com, clement.mathieu--drif@eviden.com, eric.auger@redhat.com, joao.m.martins@oracle.com, avihaih@nvidia.com, xudong.hao@intel.com, giovanni.cabiddu@intel.com, rohith.s.r@intel.com, mark.gross@intel.com, arjan.van.de.ven@intel.com, Zhenzhong Duan Subject: [PATCH v6 3/9] vfio/container-legacy: rename vfio_dma_unmap_bitmap() to vfio_legacy_dma_unmap_get_dirty_bitmap() Date: Thu, 18 Dec 2025 01:26:24 -0500 Message-ID: <20251218062643.624796-4-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20251218062643.624796-1-zhenzhong.duan@intel.com> References: <20251218062643.624796-1-zhenzhong.duan@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=198.175.65.18; 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=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 @intel.com) X-ZM-MESSAGEID: 1766039281740154100 This is to follow naming style in container-legacy.c to have low level func= tions with vfio_legacy_ prefix. No functional changes. Suggested-by: C=C3=A9dric Le Goater Signed-off-by: Zhenzhong Duan Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Yi Liu --- hw/vfio/container-legacy.c | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/hw/vfio/container-legacy.c b/hw/vfio/container-legacy.c index 32c260b345..48bcbc0264 100644 --- a/hw/vfio/container-legacy.c +++ b/hw/vfio/container-legacy.c @@ -68,9 +68,10 @@ static int vfio_ram_block_discard_disable(VFIOLegacyCont= ainer *container, } } =20 -static int vfio_dma_unmap_bitmap(const VFIOLegacyContainer *container, - hwaddr iova, uint64_t size, - IOMMUTLBEntry *iotlb) +static int +vfio_legacy_dma_unmap_get_dirty_bitmap(const VFIOLegacyContainer *containe= r, + hwaddr iova, uint64_t size, + IOMMUTLBEntry *iotlb) { const VFIOContainer *bcontainer =3D VFIO_IOMMU(container); struct vfio_iommu_type1_dma_unmap *unmap; @@ -141,7 +142,8 @@ static int vfio_legacy_dma_unmap_one(const VFIOLegacyCo= ntainer *container, if (iotlb && vfio_container_dirty_tracking_is_started(bcontainer)) { if (!vfio_container_devices_dirty_tracking_is_supported(bcontainer= ) && bcontainer->dirty_pages_supported) { - return vfio_dma_unmap_bitmap(container, iova, size, iotlb); + return vfio_legacy_dma_unmap_get_dirty_bitmap(container, iova,= size, + iotlb); } =20 need_dirty_sync =3D true; --=20 2.47.1 From nobody Fri Dec 19 14:21:06 2025 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=1766039324; cv=none; d=zohomail.com; s=zohoarc; b=hvov5B8Vf/dBzsRSpSDRJ5mT2qxNsheLtu/8I9Yc+A3VjdHkFouMb507+C5OM4rX1zaZMYP6O55Y3xYoapG1GtzJ67fQXr+CLiOX/m3g9EO14rFeuMqRQjPnOGp7TWY/kPduHukZHXtcomiD+IEHZgPgUd7MlaK5w18D4iWIYB4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1766039324; 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=rZsN0ekykHPYeYFHifGWwZLROd+dZd9uAcnXnEevXAs=; b=OOB0em9gJWB0WXBW0jd0uXzAT6TAwbzSDgsHb01jmSvFtWif9V+ZlwWxFXcJvz6Ff9bst7ivBY7uLekATi4qQb+98sJ5ZEP2LfstE1SygisZl1y1nTXc2C1Ni/YJQ2vjVa8CJS5BrUS4cQUBVKc+bk006Bc1/JWLMZnq7MFtQ30= 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 1766039324378798.9941919386865; Wed, 17 Dec 2025 22:28:44 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vW7UC-0003N4-VZ; Thu, 18 Dec 2025 01:27:40 -0500 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 1vW7UA-0003MV-GW for qemu-devel@nongnu.org; Thu, 18 Dec 2025 01:27:38 -0500 Received: from mgamail.intel.com ([198.175.65.18]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vW7U6-000176-QH for qemu-devel@nongnu.org; Thu, 18 Dec 2025 01:27:38 -0500 Received: from orviesa005.jf.intel.com ([10.64.159.145]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Dec 2025 22:27:31 -0800 Received: from unknown (HELO gnr-sp-2s-612.sh.intel.com) ([10.112.230.229]) by orviesa005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Dec 2025 22:27:28 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1766039255; x=1797575255; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=IvXEmSNu0PX150S/HGAeY/lno3zLNlPaSflzbXCKu7Y=; b=jFBdcqxXoEOX/DqzWcl8ps/TH92NFTBev5AbuXidD1dN92JH9i7EyjEs rtv17RJNBWAPWP661NeVxDRnpZYBMT/lf20wpJQSXYjTugQkx2ahu4jHI OKRzV5vVkUpu1JXkfhIcyBJla1TQnQzvrnGlLx2fNZz4gcGP/cFklnYiI nT+U1cVFfqXj9fnvcTV7Ktz1DyOXGEE5OT3Ev4kkpJueYGxv8gNxncrJS FevAzuXs5GgD2Fh+nK1W1reErlNKjUcQLeGT3xF8gkcibdsj/nGm8/XSM V8I1hcSEhuWuvFvyahsS30gBCun1yoASRekNGXlOdI7Jf0inIOAgW+X9G A==; X-CSE-ConnectionGUID: 0y2bSxmbSeir+2l3GFySSw== X-CSE-MsgGUID: Etny4RW5RS+vRUO45ZBKpw== X-IronPort-AV: E=McAfee;i="6800,10657,11645"; a="68028529" X-IronPort-AV: E=Sophos;i="6.21,156,1763452800"; d="scan'208";a="68028529" X-CSE-ConnectionGUID: jbf3YcdRRGujABfDwAnf7Q== X-CSE-MsgGUID: N6h0hIfLQl6Af2TOMTGlSw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,156,1763452800"; d="scan'208";a="203569885" From: Zhenzhong Duan To: qemu-devel@nongnu.org Cc: alex@shazbot.org, clg@redhat.com, mst@redhat.com, jasowang@redhat.com, yi.l.liu@intel.com, clement.mathieu--drif@eviden.com, eric.auger@redhat.com, joao.m.martins@oracle.com, avihaih@nvidia.com, xudong.hao@intel.com, giovanni.cabiddu@intel.com, rohith.s.r@intel.com, mark.gross@intel.com, arjan.van.de.ven@intel.com, Zhenzhong Duan Subject: [PATCH v6 4/9] vfio: Add a backend_flag parameter to vfio_contianer_query_dirty_bitmap() Date: Thu, 18 Dec 2025 01:26:25 -0500 Message-ID: <20251218062643.624796-5-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20251218062643.624796-1-zhenzhong.duan@intel.com> References: <20251218062643.624796-1-zhenzhong.duan@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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 (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=198.175.65.18; 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=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 @intel.com) X-ZM-MESSAGEID: 1766039325014158500 From: Joao Martins This new parameter will be used in following patch, currently 0 is passed. Signed-off-by: Joao Martins Signed-off-by: Zhenzhong Duan Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Yi Liu Tested-by: Giovannio Cabiddu Tested-by: Rohith S R --- include/hw/vfio/vfio-container.h | 8 ++++++-- hw/vfio-user/container.c | 5 +++-- hw/vfio/container-legacy.c | 5 +++-- hw/vfio/container.c | 15 +++++++++------ hw/vfio/iommufd.c | 7 ++++--- hw/vfio/listener.c | 6 +++--- hw/vfio/trace-events | 2 +- 7 files changed, 29 insertions(+), 19 deletions(-) diff --git a/include/hw/vfio/vfio-container.h b/include/hw/vfio/vfio-contai= ner.h index c4b58d664b..9f6e8cedfc 100644 --- a/include/hw/vfio/vfio-container.h +++ b/include/hw/vfio/vfio-container.h @@ -99,7 +99,9 @@ bool vfio_container_devices_dirty_tracking_is_supported( const VFIOContainer *bcontainer); int vfio_container_query_dirty_bitmap(const VFIOContainer *bcontainer, uint64_t iova, uint64_t size, - hwaddr translated_addr, Error **errp= ); + uint64_t backend_flag, + hwaddr translated_addr, + Error **errp); =20 GList *vfio_container_get_iova_ranges(const VFIOContainer *bcontainer); =20 @@ -253,12 +255,14 @@ struct VFIOIOMMUClass { * @vbmap: #VFIOBitmap internal bitmap structure * @iova: iova base address * @size: size of iova range + * @backend_flag: flags for backend, opaque to upper layer container * @errp: pointer to Error*, to store an error if it happens. * * Returns zero to indicate success and negative for error. */ int (*query_dirty_bitmap)(const VFIOContainer *bcontainer, - VFIOBitmap *vbmap, hwaddr iova, hwaddr size, Error **errp); + VFIOBitmap *vbmap, hwaddr iova, hwaddr size, + uint64_t backend_flag, Error **errp); /* PCI specific */ int (*pci_hot_reset)(VFIODevice *vbasedev, bool single); =20 diff --git a/hw/vfio-user/container.c b/hw/vfio-user/container.c index dab7a23224..c51127111d 100644 --- a/hw/vfio-user/container.c +++ b/hw/vfio-user/container.c @@ -162,8 +162,9 @@ vfio_user_set_dirty_page_tracking(const VFIOContainer *= bcontainer, } =20 static int vfio_user_query_dirty_bitmap(const VFIOContainer *bcontainer, - VFIOBitmap *vbmap, hwaddr iova, - hwaddr size, Error **errp) + VFIOBitmap *vbmap, hwaddr iova, + hwaddr size, uint64_t backend_flag, + Error **errp) { error_setg_errno(errp, ENOTSUP, "Not supported"); return -ENOTSUP; diff --git a/hw/vfio/container-legacy.c b/hw/vfio/container-legacy.c index 48bcbc0264..625f151364 100644 --- a/hw/vfio/container-legacy.c +++ b/hw/vfio/container-legacy.c @@ -154,7 +154,7 @@ static int vfio_legacy_dma_unmap_one(const VFIOLegacyCo= ntainer *container, } =20 if (need_dirty_sync) { - ret =3D vfio_container_query_dirty_bitmap(bcontainer, iova, size, + ret =3D vfio_container_query_dirty_bitmap(bcontainer, iova, size, = 0, iotlb->translated_addr, &local_err); if (ret) { error_report_err(local_err); @@ -255,7 +255,8 @@ vfio_legacy_set_dirty_page_tracking(const VFIOContainer= *bcontainer, } =20 static int vfio_legacy_query_dirty_bitmap(const VFIOContainer *bcontainer, - VFIOBitmap *vbmap, hwaddr iova, hwaddr size, Error *= *errp) + VFIOBitmap *vbmap, hwaddr iova, hwaddr = size, + uint64_t backend_flag, Error **errp) { const VFIOLegacyContainer *container =3D VFIO_IOMMU_LEGACY(bcontainer); struct vfio_iommu_type1_dirty_bitmap *dbitmap; diff --git a/hw/vfio/container.c b/hw/vfio/container.c index 013a691bc5..db6f36b952 100644 --- a/hw/vfio/container.c +++ b/hw/vfio/container.c @@ -213,13 +213,13 @@ static int vfio_device_dma_logging_report(VFIODevice = *vbasedev, hwaddr iova, =20 static int vfio_container_iommu_query_dirty_bitmap( const VFIOContainer *bcontainer, VFIOBitmap *vbmap, hwaddr iova, - hwaddr size, Error **errp) + hwaddr size, uint64_t backend_flag, Error **errp) { VFIOIOMMUClass *vioc =3D VFIO_IOMMU_GET_CLASS(bcontainer); =20 g_assert(vioc->query_dirty_bitmap); return vioc->query_dirty_bitmap(bcontainer, vbmap, iova, size, - errp); + backend_flag, errp); } =20 static int vfio_container_devices_query_dirty_bitmap( @@ -247,7 +247,9 @@ static int vfio_container_devices_query_dirty_bitmap( =20 int vfio_container_query_dirty_bitmap(const VFIOContainer *bcontainer, uint64_t iova, uint64_t size, - hwaddr translated_addr, Error **errp) + uint64_t backend_flag, + hwaddr translated_addr, + Error **errp) { bool all_device_dirty_tracking =3D vfio_container_devices_dirty_tracking_is_supported(bcontainer); @@ -274,7 +276,7 @@ int vfio_container_query_dirty_bitmap(const VFIOContain= er *bcontainer, errp); } else { ret =3D vfio_container_iommu_query_dirty_bitmap(bcontainer, &vbmap= , iova, size, - errp); + backend_flag, errp); } =20 if (ret) { @@ -285,8 +287,9 @@ int vfio_container_query_dirty_bitmap(const VFIOContain= er *bcontainer, translated_addr, vbmap.pages); =20 - trace_vfio_container_query_dirty_bitmap(iova, size, vbmap.size, - translated_addr, dirty_pages); + trace_vfio_container_query_dirty_bitmap(iova, size, backend_flag, + vbmap.size, translated_addr, + dirty_pages); out: g_free(vbmap.bitmap); =20 diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c index 75e1bde2dd..7eaa8b3372 100644 --- a/hw/vfio/iommufd.c +++ b/hw/vfio/iommufd.c @@ -74,7 +74,7 @@ static int iommufd_cdev_unmap(const VFIOContainer *bconta= iner, if (iotlb && vfio_container_dirty_tracking_is_started(bcontainer)) { if (!vfio_container_devices_dirty_tracking_is_supported(bcontainer= ) && bcontainer->dirty_pages_supported) { - ret =3D vfio_container_query_dirty_bitmap(bcontainer, iova, si= ze, + ret =3D vfio_container_query_dirty_bitmap(bcontainer, iova, si= ze, 0, iotlb->translated_addr, &local_err); if (ret) { @@ -100,7 +100,7 @@ static int iommufd_cdev_unmap(const VFIOContainer *bcon= tainer, } =20 if (need_dirty_sync) { - ret =3D vfio_container_query_dirty_bitmap(bcontainer, iova, size, + ret =3D vfio_container_query_dirty_bitmap(bcontainer, iova, size, = 0, iotlb->translated_addr, &local_err); if (ret) { @@ -216,7 +216,8 @@ err: =20 static int iommufd_query_dirty_bitmap(const VFIOContainer *bcontainer, VFIOBitmap *vbmap, hwaddr iova, - hwaddr size, Error **errp) + hwaddr size, uint64_t backend_flag, + Error **errp) { VFIOIOMMUFDContainer *container =3D VFIO_IOMMU_IOMMUFD(bcontainer); unsigned long page_size =3D qemu_real_host_page_size(); diff --git a/hw/vfio/listener.c b/hw/vfio/listener.c index 2d7d3a4645..2109101158 100644 --- a/hw/vfio/listener.c +++ b/hw/vfio/listener.c @@ -1083,7 +1083,7 @@ static void vfio_iommu_map_dirty_notify(IOMMUNotifier= *n, IOMMUTLBEntry *iotlb) translated_addr =3D memory_region_get_ram_addr(mr) + xlat; =20 ret =3D vfio_container_query_dirty_bitmap(bcontainer, iova, iotlb->add= r_mask + 1, - translated_addr, &local_err); + 0, translated_addr, &local_err); if (ret) { error_prepend(&local_err, "vfio_iommu_map_dirty_notify(%p, 0x%"HWADDR_PRIx", " @@ -1119,7 +1119,7 @@ static int vfio_ram_discard_query_dirty_bitmap(Memory= RegionSection *section, * Sync the whole mapped region (spanning multiple individual mappings) * in one go. */ - ret =3D vfio_container_query_dirty_bitmap(vrdl->bcontainer, iova, size, + ret =3D vfio_container_query_dirty_bitmap(vrdl->bcontainer, iova, size= , 0, translated_addr, &local_err); if (ret) { error_report_err(local_err); @@ -1204,7 +1204,7 @@ static int vfio_sync_dirty_bitmap(VFIOContainer *bcon= tainer, =20 return vfio_container_query_dirty_bitmap(bcontainer, REAL_HOST_PAGE_ALIGN(section->offset_within_address_spa= ce), - int128_get64(section->size), translated_addr, errp); + int128_get64(section->size), 0, translated_addr, errp); } =20 static void vfio_listener_log_sync(MemoryListener *listener, diff --git a/hw/vfio/trace-events b/hw/vfio/trace-events index 1e895448cd..3c62bab764 100644 --- a/hw/vfio/trace-events +++ b/hw/vfio/trace-events @@ -105,7 +105,7 @@ vfio_device_dirty_tracking_start(int nr_ranges, uint64_= t min32, uint64_t max32, vfio_iommu_map_dirty_notify(uint64_t iova_start, uint64_t iova_end) "iommu= dirty @ 0x%"PRIx64" - 0x%"PRIx64 =20 # container.c -vfio_container_query_dirty_bitmap(uint64_t iova, uint64_t size, uint64_t b= itmap_size, uint64_t translated_addr, uint64_t dirty_pages) "iova=3D0x%"PRI= x64" size=3D 0x%"PRIx64" bitmap_size=3D0x%"PRIx64" gpa=3D0x%"PRIx64" dirty_= pages=3D%"PRIu64 +vfio_container_query_dirty_bitmap(uint64_t iova, uint64_t size, uint64_t b= ackend_flag, uint64_t bitmap_size, uint64_t translated_addr, uint64_t dirty= _pages) "iova=3D0x%"PRIx64" size=3D0x%"PRIx64" backend_flag=3D0x%"PRIx64" b= itmap_size=3D0x%"PRIx64" gpa=3D0x%"PRIx64" dirty_pages=3D%"PRIu64 =20 # container-legacy.c vfio_container_disconnect(int fd) "close container->fd=3D%d" --=20 2.47.1 From nobody Fri Dec 19 14:21:06 2025 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=1766039355; cv=none; d=zohomail.com; s=zohoarc; b=UDtA7DbzwE9vdh8q+JLGzxtVqtJJVMr24kPnfDb+C/CC3QPqRrpqmGezKM38C2ZMNZOXbb74q004n30SW9vpT0gOxZ5kc4hQ5d2nWgyKYsWP6KrPmWd6eF9FEXxodcZydjTvAZ7g42q+hajCJ1/aWPrUccixuFbCc4pHOwY9cKw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1766039355; 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=9D8jzOugCu2/kFNRtNCUNmVEZlNAQV1N8xdgFPoZsiY=; b=UHQPau2uITHHyO6iecb2HISD6hk+nnnNFL3IK5bxUdbzflC5l8UnyKKVE0AbU2rttVdAgaKCdKbjtFLSZ25pVitKfVZAfglCuwFd+da5g+L5jADF07zGucidOKhkFlnpF++NBE+KvrQ96oCGRoo6acIlOVOxAkD/89J70q3DmEM= 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 1766039355218954.054307069053; Wed, 17 Dec 2025 22:29:15 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vW7UG-0003NO-M6; Thu, 18 Dec 2025 01:27:44 -0500 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 1vW7UC-0003N2-6j for qemu-devel@nongnu.org; Thu, 18 Dec 2025 01:27:40 -0500 Received: from mgamail.intel.com ([198.175.65.18]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vW7UA-00018G-Dk for qemu-devel@nongnu.org; Thu, 18 Dec 2025 01:27:39 -0500 Received: from orviesa005.jf.intel.com ([10.64.159.145]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Dec 2025 22:27:35 -0800 Received: from unknown (HELO gnr-sp-2s-612.sh.intel.com) ([10.112.230.229]) by orviesa005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Dec 2025 22:27:32 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1766039258; x=1797575258; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=8pHmfZaBwbWLgM/IjiqWNY/mA7gOe1aG5iy7P69PVJA=; b=Sf6ijzydBgiArtM1g9DGLZEvRZuLy0caBrNpspRyLcZhhrl0Ob/gBBot pWc0kisJxLLkbmULgTsQ1OoAUMVnTtTQGDyW/rJXeXOPxszRRcCYe01C0 dtcw6/vitzojKoDxo5nmJnenAjRltZH6dQMgC2+OULb2CHhMqCAWn7Qgx DKaxtrFrsOt4HaM7Di3NEp1Ce0zlEyg336Dw+yjLhwtp4H/cpBEHJF58/ gzpedSCRnJO4nRQCmso0UiCM/9XWhL1scWx237bFRgeFH/vhQIVWCeWDb EYQ42KSN9ys5v2ho75YL47iGRJgWAqnwMot/gUI2GcXYV3bf73KzMU2J0 g==; X-CSE-ConnectionGUID: +SAvyB0zSp2wS52q9aJUjA== X-CSE-MsgGUID: UCRi5kOjQW6EKwWgWKxDBA== X-IronPort-AV: E=McAfee;i="6800,10657,11645"; a="68028539" X-IronPort-AV: E=Sophos;i="6.21,156,1763452800"; d="scan'208";a="68028539" X-CSE-ConnectionGUID: /hWPKtPdQi20cxkh9I19lQ== X-CSE-MsgGUID: FJsvAo1aQtWgjcunhR3Cfw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,156,1763452800"; d="scan'208";a="203569894" From: Zhenzhong Duan To: qemu-devel@nongnu.org Cc: alex@shazbot.org, clg@redhat.com, mst@redhat.com, jasowang@redhat.com, yi.l.liu@intel.com, clement.mathieu--drif@eviden.com, eric.auger@redhat.com, joao.m.martins@oracle.com, avihaih@nvidia.com, xudong.hao@intel.com, giovanni.cabiddu@intel.com, rohith.s.r@intel.com, mark.gross@intel.com, arjan.van.de.ven@intel.com, Zhenzhong Duan Subject: [PATCH v6 5/9] vfio/iommufd: Add IOMMU_HWPT_GET_DIRTY_BITMAP_NO_CLEAR flag support Date: Thu, 18 Dec 2025 01:26:26 -0500 Message-ID: <20251218062643.624796-6-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20251218062643.624796-1-zhenzhong.duan@intel.com> References: <20251218062643.624796-1-zhenzhong.duan@intel.com> MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" 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=198.175.65.18; 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=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 @intel.com) X-ZM-MESSAGEID: 1766039358158154100 Pass IOMMU_HWPT_GET_DIRTY_BITMAP_NO_CLEAR when doing the last dirty bitmap query right before unmap, no PTEs flushes. This accelerates the query without issue because unmap will tear down the mapping anyway. Co-developed-by: Joao Martins Signed-off-by: Joao Martins Signed-off-by: Zhenzhong Duan Reviewed-by: C=C3=A9dric Le Goater Reviewed-by: Yi Liu Tested-by: Xudong Hao Tested-by: Giovannio Cabiddu Tested-by: Rohith S R --- include/system/iommufd.h | 2 +- backends/iommufd.c | 5 +++-- hw/vfio/iommufd.c | 5 +++-- backends/trace-events | 2 +- 4 files changed, 8 insertions(+), 6 deletions(-) diff --git a/include/system/iommufd.h b/include/system/iommufd.h index a659f36a20..767a8e4cb6 100644 --- a/include/system/iommufd.h +++ b/include/system/iommufd.h @@ -64,7 +64,7 @@ bool iommufd_backend_set_dirty_tracking(IOMMUFDBackend *b= e, uint32_t hwpt_id, bool iommufd_backend_get_dirty_bitmap(IOMMUFDBackend *be, uint32_t hwpt_id, uint64_t iova, ram_addr_t size, uint64_t page_size, uint64_t *data, - Error **errp); + uint64_t flags, Error **errp); bool iommufd_backend_invalidate_cache(IOMMUFDBackend *be, uint32_t id, uint32_t data_type, uint32_t entry_l= en, uint32_t *entry_num, void *data, diff --git a/backends/iommufd.c b/backends/iommufd.c index fdfb7c9d67..086bd67aea 100644 --- a/backends/iommufd.c +++ b/backends/iommufd.c @@ -361,7 +361,7 @@ bool iommufd_backend_get_dirty_bitmap(IOMMUFDBackend *b= e, uint32_t hwpt_id, uint64_t iova, ram_addr_t size, uint64_t page_size, uint64_t *data, - Error **errp) + uint64_t flags, Error **errp) { int ret; struct iommu_hwpt_get_dirty_bitmap get_dirty_bitmap =3D { @@ -371,11 +371,12 @@ bool iommufd_backend_get_dirty_bitmap(IOMMUFDBackend = *be, .length =3D size, .page_size =3D page_size, .data =3D (uintptr_t)data, + .flags =3D flags, }; =20 ret =3D ioctl(be->fd, IOMMU_HWPT_GET_DIRTY_BITMAP, &get_dirty_bitmap); trace_iommufd_backend_get_dirty_bitmap(be->fd, hwpt_id, iova, size, - page_size, ret ? errno : 0); + flags, page_size, ret ? errno := 0); if (ret) { error_setg_errno(errp, errno, "IOMMU_HWPT_GET_DIRTY_BITMAP (iova: 0x%"HWADDR_PR= Ix diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c index 7eaa8b3372..63f8442865 100644 --- a/hw/vfio/iommufd.c +++ b/hw/vfio/iommufd.c @@ -74,7 +74,8 @@ static int iommufd_cdev_unmap(const VFIOContainer *bconta= iner, if (iotlb && vfio_container_dirty_tracking_is_started(bcontainer)) { if (!vfio_container_devices_dirty_tracking_is_supported(bcontainer= ) && bcontainer->dirty_pages_supported) { - ret =3D vfio_container_query_dirty_bitmap(bcontainer, iova, si= ze, 0, + ret =3D vfio_container_query_dirty_bitmap(bcontainer, iova, si= ze, + IOMMU_HWPT_GET_DIRTY_B= ITMAP_NO_CLEAR, iotlb->translated_addr, &local_err); if (ret) { @@ -231,7 +232,7 @@ static int iommufd_query_dirty_bitmap(const VFIOContain= er *bcontainer, if (!iommufd_backend_get_dirty_bitmap(container->be, hwpt->hwpt_id, iova, size, page_size, (uint64_t *)vbmap->bitmap, - errp)) { + backend_flag, errp)) { return -EINVAL; } } diff --git a/backends/trace-events b/backends/trace-events index 56132d3fd2..e1992ba12f 100644 --- a/backends/trace-events +++ b/backends/trace-events @@ -19,5 +19,5 @@ iommufd_backend_alloc_ioas(int iommufd, uint32_t ioas) " = iommufd=3D%d ioas=3D%d" iommufd_backend_alloc_hwpt(int iommufd, uint32_t dev_id, uint32_t pt_id, u= int32_t flags, uint32_t hwpt_type, uint32_t len, uint64_t data_ptr, uint32_= t out_hwpt_id, int ret) " iommufd=3D%d dev_id=3D%u pt_id=3D%u flags=3D0x%x = hwpt_type=3D%u len=3D%u data_ptr=3D0x%"PRIx64" out_hwpt=3D%u (%d)" iommufd_backend_free_id(int iommufd, uint32_t id, int ret) " iommufd=3D%d = id=3D%d (%d)" iommufd_backend_set_dirty(int iommufd, uint32_t hwpt_id, bool start, int r= et) " iommufd=3D%d hwpt=3D%u enable=3D%d (%d)" -iommufd_backend_get_dirty_bitmap(int iommufd, uint32_t hwpt_id, uint64_t i= ova, uint64_t size, uint64_t page_size, int ret) " iommufd=3D%d hwpt=3D%u i= ova=3D0x%"PRIx64" size=3D0x%"PRIx64" page_size=3D0x%"PRIx64" (%d)" +iommufd_backend_get_dirty_bitmap(int iommufd, uint32_t hwpt_id, uint64_t i= ova, uint64_t size, uint64_t flags, uint64_t page_size, int ret) " iommufd= =3D%d hwpt=3D%u iova=3D0x%"PRIx64" size=3D0x%"PRIx64" flags=3D0x%"PRIx64" p= age_size=3D0x%"PRIx64" (%d)" iommufd_backend_invalidate_cache(int iommufd, uint32_t id, uint32_t data_t= ype, uint32_t entry_len, uint32_t entry_num, uint32_t done_num, uint64_t da= ta_ptr, int ret) " iommufd=3D%d id=3D%u data_type=3D%u entry_len=3D%u entry= _num=3D%u done_num=3D%u data_ptr=3D0x%"PRIx64" (%d)" --=20 2.47.1 From nobody Fri Dec 19 14:21:06 2025 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=1766039309; cv=none; d=zohomail.com; s=zohoarc; b=bEzi+GMguk0R8r4hxdJp5XE6036RvPPdVf8FfGs6lCQZMpMN5hu+yzDy94rm3FXhuz81sDdZEdw/AZdcAyFvDMKXIg3Oqesg4T/MYqGvhBjTRtitFvvPJss5ETb6wkqIKC0H3fgXcRsgWu6RLPS0sSFga6iTk8h3OKqLmMp0Sg0= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1766039309; 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=hX15B6RyDKY3c+yhbY3HnCG7g4684rnYPQv9XbWnnO0=; b=G2nlj4GZDa9bYzWPtItkbJnplbOwz8vo6ZgCejUtgm32MXr0o9ScRKITrDGrdvuqjlFL5n6hZkzCocgrqhv8hJP3pQPSEdVqzmtjHA22pZ2Oc0Hp9HEf/cv+LzOwgOa1NCE9DXxI5ZEC7ZCSVKnlT+D6puct32qav4+LjmaJErI= 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 1766039309413192.07378048180192; Wed, 17 Dec 2025 22:28:29 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vW7UH-0003Nr-EJ; Thu, 18 Dec 2025 01:27:45 -0500 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 1vW7UD-0003NN-RV for qemu-devel@nongnu.org; Thu, 18 Dec 2025 01:27:42 -0500 Received: from mgamail.intel.com ([198.175.65.18]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vW7UC-000176-8f for qemu-devel@nongnu.org; Thu, 18 Dec 2025 01:27:41 -0500 Received: from orviesa005.jf.intel.com ([10.64.159.145]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Dec 2025 22:27:39 -0800 Received: from unknown (HELO gnr-sp-2s-612.sh.intel.com) ([10.112.230.229]) by orviesa005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Dec 2025 22:27:36 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1766039260; x=1797575260; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=70TY9FcSVSzvfgLc9xmiUg5o1saVK6Fm05MtLWcPp/Q=; b=PoFsqDndw8Ori6XkU1V3MbT87TKuwTwjh0XcpkgMVK0onzesj7FoGSoj 7Wr0UaEtb6oTp4csW2ZH9UfVgrwW6VbmHRDhMGEXFRXvgtC4vsaYKGyrN b+Egy2V80WE5kegtbTNMF6DYa6Smb2eUs2c6X153X0837IkBAYvPLbKSX EWa/TEAH7HqF/ZaldX2BdMPn2TkDms/puWUDv6qBs7TiCYDZXJFtF3M5q 1RHFIo6RHNxuEAdqqTHoLIlUpcHk79AAppFjOBiA9jEsx3M8VgXnicE4j tzzxx0IaRYUj1AaLfWdm6tyksjo2J1jXbQ6FVj5XqhGZWiqcTl40A0SaW Q==; X-CSE-ConnectionGUID: ZvqHIlvvR/GZLcvNifWjBw== X-CSE-MsgGUID: JSCzp98gRzCEUnoQq2SjEA== X-IronPort-AV: E=McAfee;i="6800,10657,11645"; a="68028552" X-IronPort-AV: E=Sophos;i="6.21,156,1763452800"; d="scan'208";a="68028552" X-CSE-ConnectionGUID: QvEc0k+dSvKhnQo4QYbF6Q== X-CSE-MsgGUID: eV6gh4XVT+mob4bcVoTHYg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,156,1763452800"; d="scan'208";a="203569898" From: Zhenzhong Duan To: qemu-devel@nongnu.org Cc: alex@shazbot.org, clg@redhat.com, mst@redhat.com, jasowang@redhat.com, yi.l.liu@intel.com, clement.mathieu--drif@eviden.com, eric.auger@redhat.com, joao.m.martins@oracle.com, avihaih@nvidia.com, xudong.hao@intel.com, giovanni.cabiddu@intel.com, rohith.s.r@intel.com, mark.gross@intel.com, arjan.van.de.ven@intel.com, Zhenzhong Duan Subject: [PATCH v6 6/9] intel_iommu: Fix unmap_bitmap failure with legacy VFIO backend Date: Thu, 18 Dec 2025 01:26:27 -0500 Message-ID: <20251218062643.624796-7-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20251218062643.624796-1-zhenzhong.duan@intel.com> References: <20251218062643.624796-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 (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=198.175.65.18; 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=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 @intel.com) X-ZM-MESSAGEID: 1766039311212158500 Content-Type: text/plain; charset="utf-8" If a VFIO device in guest switches from IOMMU domain to block domain, vtd_address_space_unmap() is called to unmap whole address space. If that happens during migration, migration fails with legacy VFIO backend as below: Status: failed (vfio_container_dma_unmap(0x561bbbd92d90, 0x100000000000, 0x= 100000000000) =3D -7 (Argument list too long)) Because legacy VFIO limits maximum bitmap size to 256MB which maps to 8TB on 4K page system, when 16TB sized UNMAP notification is sent, unmap_bitmap ioctl fails. Normally such large UNMAP notification come from IOVA range rather than system memory. Apart from that, vtd_address_space_unmap() sends UNMAP notification with translated_addr =3D 0, because there is no valid translated_addr for unmapp= ing a whole iommu memory region. This breaks dirty tracking no matter which VFIO backend is used. Fix them all by iterating over DMAMap list to unmap each range with active mapping when global_dirty_tracking is active. global_dirty_tracking is protected by BQL, so it's safe to reference it directly. If it's not active, unmapping the whole address space in one go is optimal. Signed-off-by: Zhenzhong Duan Reviewed-by: Yi Liu Tested-by: Giovannio Cabiddu Tested-by: Rohith S R --- hw/i386/intel_iommu.c | 42 ++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 42 insertions(+) diff --git a/hw/i386/intel_iommu.c b/hw/i386/intel_iommu.c index 7220a3d9f4..7c72fbaa52 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -4764,6 +4764,43 @@ static uint64_t vtd_get_viommu_flags(void *opaque) return flags; } =20 +/* + * There is no valid translated_addr for unmapping a whole iommu memory re= gion. + * When dirty tracking is enabled, we need it to set dirty bitmaps. Iterate + * over DMAMap list to unmap each range with active mapping and translated= _addr + * value. + */ +static void vtd_address_space_unmap_in_dirty_tracking(VTDAddressSpace *as, + IOMMUNotifier *n) +{ + const DMAMap *map; + const DMAMap target =3D { + .iova =3D n->start, + .size =3D n->end, + }; + IOVATree *tree =3D as->iova_tree; + + /* + * DMAMap is created during IOMMU page table sync, it's either 4KB or = huge + * page size and always a power of 2 in size. So the range of DMAMap c= ould + * be used for UNMAP notification directly. + */ + while ((map =3D iova_tree_find(tree, &target))) { + IOMMUTLBEvent event; + + event.type =3D IOMMU_NOTIFIER_UNMAP; + event.entry.iova =3D map->iova; + event.entry.addr_mask =3D map->size; + event.entry.target_as =3D &address_space_memory; + event.entry.perm =3D IOMMU_NONE; + /* This field is needed to set dirty bigmap */ + event.entry.translated_addr =3D map->translated_addr; + memory_region_notify_iommu_one(n, &event); + + iova_tree_remove(tree, *map); + } +} + /* Unmap the whole range in the notifier's scope. */ static void vtd_address_space_unmap(VTDAddressSpace *as, IOMMUNotifier *n) { @@ -4773,6 +4810,11 @@ static void vtd_address_space_unmap(VTDAddressSpace = *as, IOMMUNotifier *n) IntelIOMMUState *s =3D as->iommu_state; DMAMap map; =20 + if (global_dirty_tracking) { + vtd_address_space_unmap_in_dirty_tracking(as, n); + return; + } + /* * Note: all the codes in this function has a assumption that IOVA * bits are no more than VTD_MGAW bits (which is restricted by --=20 2.47.1 From nobody Fri Dec 19 14:21:06 2025 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=1766039382; cv=none; d=zohomail.com; s=zohoarc; b=m6TlGVbGMZLrT8tHNQLcl0QuNaYiOnHKjJHRJo8fcCy41mdmvn+QTKux+1zdO6/mJpEN0+ti9pH+t7j+BpNczNpoGtROymPEvUsH3PNLozn/gb8LTBfm8unujnbNf880E1e2hygtKvQ6K8cFx6GAWrg++WZQd20y8TkZtCVxwOk= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1766039382; 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=5F0X95WSb1n+aYwbR9FZs44nP8eNVcRU7e4wURKO2yc=; b=aRBOPLrx/XTPBwLK+s0jgU0VGPLmvhjWKYoZQ9A8DYsjIxTHWVfw2bzLezoV6VilUsGIoEapPFIrDUaoo+nPadlb/DbIzOdcHYQfdzdP9jSQR2uCdtDG28r0VbtHdhPAw4vbdlkdVaRmLkl6GLToi/a0KFcpS33pa0vyKUQjFLo= 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 1766039382399637.2875790194485; Wed, 17 Dec 2025 22:29:42 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vW7UO-0003OX-6G; Thu, 18 Dec 2025 01:27:52 -0500 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 1vW7UJ-0003Ny-Am for qemu-devel@nongnu.org; Thu, 18 Dec 2025 01:27:47 -0500 Received: from mgamail.intel.com ([198.175.65.18]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vW7UH-00019A-9R for qemu-devel@nongnu.org; Thu, 18 Dec 2025 01:27:47 -0500 Received: from orviesa005.jf.intel.com ([10.64.159.145]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Dec 2025 22:27:43 -0800 Received: from unknown (HELO gnr-sp-2s-612.sh.intel.com) ([10.112.230.229]) by orviesa005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Dec 2025 22:27:40 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1766039265; x=1797575265; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=F94eQF5etGZnbJvv+YltI5zknPfG77G/Rv34Fp6qScQ=; b=eDnsPpkNnWelfNp4SQ+7pNn39RafWsXloPP6cZCSWUk/warJy2ICM8B2 2edCQCqts+GVrurf6/nRxiBp+dYbnk1eHxHo1iCX/MrHSn3NQ9d+jWvqR M9GMc8H50V+7oRfJyMfkWSeEGyRr2A4X6GWxqWiAbJ7h78aQrRN09oUKq nOYe2/eNdq0o6TjNrqpHSe3rwOX/b6H3aVBZNF871C25j07P6oScRVSvK RjJskP5dWjIxFQGsPFeEgyUCp+0utkFAcu4QOAiPbvvtx/6Ej5GHBC32D 6kv8ubE3hbu5kzFl7VnPg8Li+sDE9M0b4JZ7cRS2qL2zccmSWROFKlZfk g==; X-CSE-ConnectionGUID: JLZklg7MTYyt+bt2wwUfUg== X-CSE-MsgGUID: uq2ShDaqS7G31ZtZsP3vZQ== X-IronPort-AV: E=McAfee;i="6800,10657,11645"; a="68028564" X-IronPort-AV: E=Sophos;i="6.21,156,1763452800"; d="scan'208";a="68028564" X-CSE-ConnectionGUID: K7FN/OOJTmWdLM5EN2wplw== X-CSE-MsgGUID: LpbKp+Z8SAqmXx//Gw/3xg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,156,1763452800"; d="scan'208";a="203569902" From: Zhenzhong Duan To: qemu-devel@nongnu.org Cc: alex@shazbot.org, clg@redhat.com, mst@redhat.com, jasowang@redhat.com, yi.l.liu@intel.com, clement.mathieu--drif@eviden.com, eric.auger@redhat.com, joao.m.martins@oracle.com, avihaih@nvidia.com, xudong.hao@intel.com, giovanni.cabiddu@intel.com, rohith.s.r@intel.com, mark.gross@intel.com, arjan.van.de.ven@intel.com, Zhenzhong Duan Subject: [PATCH v6 7/9] vfio/listener: Add missing dirty tracking in region_del Date: Thu, 18 Dec 2025 01:26:28 -0500 Message-ID: <20251218062643.624796-8-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20251218062643.624796-1-zhenzhong.duan@intel.com> References: <20251218062643.624796-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 (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=198.175.65.18; 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=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 @intel.com) X-ZM-MESSAGEID: 1766039383138158500 Content-Type: text/plain; charset="utf-8" If a VFIO device in guest switches from passthrough(PT) domain to block domain, the whole memory address space is unmapped, but we passed a NULL iotlb entry to unmap_bitmap, then bitmap query didn't happen and we lost dirty pages. By constructing an iotlb entry with iova =3D gpa for unmap_bitmap, it can set dirty bits correctly. For IOMMU address space, we still send NULL iotlb because VFIO don't know the actual mappings in guest. It's vIOMMU's responsibility to send actual unmapping notifications, e.g., vtd_address_space_unmap_in_dirty_tracking(). Signed-off-by: Zhenzhong Duan Tested-by: Giovannio Cabiddu Reviewed-by: Yi Liu --- hw/vfio/listener.c | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/hw/vfio/listener.c b/hw/vfio/listener.c index 2109101158..35675e0ed7 100644 --- a/hw/vfio/listener.c +++ b/hw/vfio/listener.c @@ -713,14 +713,34 @@ static void vfio_listener_region_del(MemoryListener *= listener, =20 if (try_unmap) { bool unmap_all =3D false; + IOMMUTLBEntry entry =3D {}, *iotlb =3D NULL; =20 if (int128_eq(llsize, int128_2_64())) { assert(!iova); unmap_all =3D true; llsize =3D int128_zero(); } + + /* + * Fake an IOTLB entry for identity mapping which is needed by dir= ty + * tracking when switch out of PT domain. In fact, in unmap_bitmap, + * only translated_addr field is used to set dirty bitmap. + * + * Note: When switch into PT domain from DMA domain, the whole IOM= MU + * MR is deleted without iotlb, before that happen, we depend on + * vIOMMU to send unmap notification with accurate iotlb entry to + * VFIO. See vtd_address_space_unmap_in_dirty_tracking() for examp= le, + * it is triggered during switching to block domain because vtd do= es + * not support direct switching from DMA to PT domain. + */ + if (global_dirty_tracking && memory_region_is_ram(section->mr)) { + entry.iova =3D iova; + entry.translated_addr =3D iova; + iotlb =3D &entry; + } + ret =3D vfio_container_dma_unmap(bcontainer, iova, int128_get64(ll= size), - NULL, unmap_all); + iotlb, unmap_all); if (ret) { error_report("vfio_container_dma_unmap(%p, 0x%"HWADDR_PRIx", " "0x%"HWADDR_PRIx") =3D %d (%s)", --=20 2.47.1 From nobody Fri Dec 19 14:21:06 2025 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=1766039319; cv=none; d=zohomail.com; s=zohoarc; b=by29c9oXh1egpWBqj2Ifxi45aMGohRYl+nGOrDaDlMmVheCTt3JxStQOmfC/psyrF8+GteINan+VPxkou0ok0koelUVYCP5ASPsjo+HOLQRLunBWvXPfz4UF29yLg6vtQoyvhLZq1v7TJU8OXqGHSNUpapWSXJT7aWuzvY648gw= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1766039319; 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=nv6EhlN0/i775SotVmdSYfa9rqYTP/QIo3cxJTlbCM0=; b=dljuv+pUqynpTKtQE2tDbkTjXUwPZuOKcv7Vc3gi1iddZfulOgA8ePyM3w0AI3AsRjNXZl1e59DQXkGjYdaNzpVorlqlJedOL5//I2FuGINpbqZ0xNSZkGdswxF6RAKsqZe4yN8P8r1KCxT2JRUQjTv3WbvDgIReqv3AAEMm4HE= 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 1766039318980702.1663823471081; Wed, 17 Dec 2025 22:28:38 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vW7UU-0003Qs-Tf; Thu, 18 Dec 2025 01:27:58 -0500 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 1vW7UM-0003OP-BH for qemu-devel@nongnu.org; Thu, 18 Dec 2025 01:27:51 -0500 Received: from mgamail.intel.com ([198.175.65.18]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vW7UK-00019A-2L for qemu-devel@nongnu.org; Thu, 18 Dec 2025 01:27:49 -0500 Received: from orviesa005.jf.intel.com ([10.64.159.145]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Dec 2025 22:27:47 -0800 Received: from unknown (HELO gnr-sp-2s-612.sh.intel.com) ([10.112.230.229]) by orviesa005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Dec 2025 22:27:44 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1766039268; x=1797575268; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=TlYJ1Hm3YmVmGZqWoDjzErOnh3Q4DaVDlQ3gQNxQfKk=; b=jviC8cpdSxBVHtv7hxxhclqY35GmnCaJDdzKI099U3B2A4MwodRt+nAg nGENH0axJV2uVhjZfT2S/SHp2hy2GoXt3z4zuHD1SNgI0aRvH+b1boS1v 8yvEENM4EeqDtLHihlLEIbMP7kbWbwwZQKHQV8dVGSmLCTjzgookL/a1o mnsS5mD8lcPuUAw2yw3/t7irckQs/jtT/d1utYuv/lxyi2xmuJgk/AYcC 6RSnOWhhvMCTpHoBIhQjMq+EPkO0ZiPyO9YM6ojMFAq3+vipyAIUsQlJr slvv5dH6fzDQdGaoYMTb8amEkYfVOl3cN1LhLHnG05N7rOawu+4RhAMC4 w==; X-CSE-ConnectionGUID: +253xDH6QDezdvGKIRM9xg== X-CSE-MsgGUID: mm9wlPUCRhGuKtt1osZjbw== X-IronPort-AV: E=McAfee;i="6800,10657,11645"; a="68028572" X-IronPort-AV: E=Sophos;i="6.21,156,1763452800"; d="scan'208";a="68028572" X-CSE-ConnectionGUID: 37X6eWGSTNC/oUfSISmIlg== X-CSE-MsgGUID: mU/88zmpSouADmtMJEZVCQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,156,1763452800"; d="scan'208";a="203569907" From: Zhenzhong Duan To: qemu-devel@nongnu.org Cc: alex@shazbot.org, clg@redhat.com, mst@redhat.com, jasowang@redhat.com, yi.l.liu@intel.com, clement.mathieu--drif@eviden.com, eric.auger@redhat.com, joao.m.martins@oracle.com, avihaih@nvidia.com, xudong.hao@intel.com, giovanni.cabiddu@intel.com, rohith.s.r@intel.com, mark.gross@intel.com, arjan.van.de.ven@intel.com, Zhenzhong Duan Subject: [PATCH v6 8/9] vfio/migration: Add migration blocker if VM memory is too large to cause unmap_bitmap failure Date: Thu, 18 Dec 2025 01:26:29 -0500 Message-ID: <20251218062643.624796-9-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20251218062643.624796-1-zhenzhong.duan@intel.com> References: <20251218062643.624796-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=198.175.65.18; 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=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 @intel.com) X-ZM-MESSAGEID: 1766039321697154100 Content-Type: text/plain; charset="utf-8" With default config, kernel VFIO IOMMU type1 driver limits dirty bitmap to 256MB for unmap_bitmap ioctl so the maximum guest memory region is no more than 8TB size for the ioctl to succeed. Be conservative here to limit total guest memory to max value supported by unmap_bitmap ioctl or else add a migration blocker. IOMMUFD backend doesn't have such limit, one can use it if there is a need to migrate such large VM. Suggested-by: Yi Liu Signed-off-by: Zhenzhong Duan Reviewed-by: Yi Liu --- hw/vfio/migration.c | 34 ++++++++++++++++++++++++++++++++++ 1 file changed, 34 insertions(+) diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index 4c06e3db93..86e5b7ab55 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -16,6 +16,7 @@ #include =20 #include "system/runstate.h" +#include "hw/boards.h" #include "hw/vfio/vfio-device.h" #include "hw/vfio/vfio-migration.h" #include "migration/misc.h" @@ -1152,6 +1153,32 @@ static bool vfio_viommu_preset(VFIODevice *vbasedev) return vbasedev->bcontainer->space->as !=3D &address_space_memory; } =20 +static bool vfio_dirty_tracking_exceed_limit(VFIODevice *vbasedev) +{ + VFIOContainer *bcontainer =3D vbasedev->bcontainer; + uint64_t max_size, page_size; + + if (!bcontainer->dirty_pages_supported) { + return false; + } + + /* + * VFIO IOMMU type1 driver has limitation of bitmap size on unmap_bitm= ap + * ioctl(), calculate the limit and compare with guest memory size to + * catch dirty tracking failure early. + * + * This limit is 8TB with default kernel and QEMU config, we are a bit + * conservative here as VM memory layout may be nonconsecutive or VM + * can run with vIOMMU enabled so the limitation could be relaxed. One + * can also switch to use IOMMUFD backend if there is a need to migrate + * large VM. + */ + page_size =3D 1 << ctz64(bcontainer->dirty_pgsizes); + max_size =3D bcontainer->max_dirty_bitmap_size * BITS_PER_BYTE * page_= size; + + return current_machine->ram_size > max_size; +} + /* * Return true when either migration initialized or blocker registered. * Currently only return false when adding blocker fails which will @@ -1193,6 +1220,13 @@ bool vfio_migration_realize(VFIODevice *vbasedev, Er= ror **errp) goto add_blocker; } =20 + if (vfio_dirty_tracking_exceed_limit(vbasedev)) { + error_setg(&err, "%s: Migration is currently not supported wit= h " + "large memory VM due to dirty tracking limitation i= n " + "backend", vbasedev->name); + goto add_blocker; + } + warn_report("%s: VFIO device doesn't support device and " "IOMMU dirty tracking", vbasedev->name); } --=20 2.47.1 From nobody Fri Dec 19 14:21:06 2025 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=1766039373; cv=none; d=zohomail.com; s=zohoarc; b=D7Qq3iMgIuiADslxdM4NnOcLmTnrj+sY94rUoyXRRl3qnQLGInq3drEXEG0i4up6Y2MDF6J4AQSXVRcbbiRMB3L+ZJqELb9DLVlN8ZSl919jrS0gdHy8P5f076L8UIcX1EPY42uz2VQYU3dNiPFwsoZKc/k4aC7uZbjrM2PzQB4= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1766039373; 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=c0tkB3wrI6XB6mqLUKRRZHxAYOryzFwnCZrNNQkAxRo=; b=UsBupzff8O9vs0zh56WVvlYM1xQ4i/3jz3Y4CUFifs3pymwHYMpcCyTevFQBPb8OCTCU38462UnzcbFJicH5dx6QvQrD7kmi5WeG8NBqicObttu9l8zrgax+LLw32e7MdmoeXQ5E2Z+4RoBKPyGMXBDprySMU6bn1yIahL+hxX0= 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 1766039373265716.3220965657629; Wed, 17 Dec 2025 22:29:33 -0800 (PST) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vW7Uv-0003ih-TH; Thu, 18 Dec 2025 01:28:25 -0500 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 1vW7UP-0003Of-JV for qemu-devel@nongnu.org; Thu, 18 Dec 2025 01:27:54 -0500 Received: from mgamail.intel.com ([198.175.65.18]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vW7UN-00019A-Vl for qemu-devel@nongnu.org; Thu, 18 Dec 2025 01:27:53 -0500 Received: from orviesa005.jf.intel.com ([10.64.159.145]) by orvoesa110.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Dec 2025 22:27:51 -0800 Received: from unknown (HELO gnr-sp-2s-612.sh.intel.com) ([10.112.230.229]) by orviesa005-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 17 Dec 2025 22:27:48 -0800 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1766039272; x=1797575272; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=UWCtB3mKmhaGb5ZJgV5RoDC7vPwTn6VCYeJxGiLsv24=; b=Wt2tGr5tH4EEJwM2TNobibAm9UDQGpQlNc7aOcRxdCKFTObpbj+qfml4 p2sj3SbZkaNSyxr6IJPJNUFNC4S9xzSlcFflMh4KPGgZO4f3VLqMY0pJr VRcWXpqkh4ks5OOkeNdOrMgOb79NOalfnkFDQJgLjf1T6thm3F4PlDx+I H7GW7hrweMBX5OHye7cqwqMpe4VULwJ+14HXZnhDfsHGTK8co8VDIVm7R WaHMLymCLVQxB37AUyftt9x03pCS/KYDD5UB3jecAlB4P1jO0wQSXy9zV 67x9yGpmPuJ+0NYcIoagpdNtZ0N4wqCDPzausd8YLYCEs9tIwE9X8Hizi A==; X-CSE-ConnectionGUID: clq2ynbeSlq+ZQu+Rzb9bA== X-CSE-MsgGUID: Y8ErS0gKSJOhzv57OoAQeg== X-IronPort-AV: E=McAfee;i="6800,10657,11645"; a="68028580" X-IronPort-AV: E=Sophos;i="6.21,156,1763452800"; d="scan'208";a="68028580" X-CSE-ConnectionGUID: 6Tud3Db/RdC+Hxjm4CXuKw== X-CSE-MsgGUID: NNwQ0riHSYeKlRKMJV9UhQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.21,156,1763452800"; d="scan'208";a="203569921" From: Zhenzhong Duan To: qemu-devel@nongnu.org Cc: alex@shazbot.org, clg@redhat.com, mst@redhat.com, jasowang@redhat.com, yi.l.liu@intel.com, clement.mathieu--drif@eviden.com, eric.auger@redhat.com, joao.m.martins@oracle.com, avihaih@nvidia.com, xudong.hao@intel.com, giovanni.cabiddu@intel.com, rohith.s.r@intel.com, mark.gross@intel.com, arjan.van.de.ven@intel.com, Zhenzhong Duan , Jason Zeng Subject: [PATCH v6 9/9] vfio/migration: Allow live migration with vIOMMU without VFs using device dirty tracking Date: Thu, 18 Dec 2025 01:26:30 -0500 Message-ID: <20251218062643.624796-10-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20251218062643.624796-1-zhenzhong.duan@intel.com> References: <20251218062643.624796-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 (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=198.175.65.18; 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, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=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 @intel.com) X-ZM-MESSAGEID: 1766039375412158500 Content-Type: text/plain; charset="utf-8" Commit e46883204c38 ("vfio/migration: Block migration with vIOMMU") introduces a migration blocker when vIOMMU is enabled, because we need to calculate the IOVA ranges for device dirty tracking. But this is unnecessary for iommu dirty tracking. Limit the vfio_viommu_preset() check to those devices which use device dirty tracking. This allows live migration with VFIO devices which use iommu dirty tracking. Suggested-by: Jason Zeng Co-developed-by: Joao Martins Signed-off-by: Joao Martins Signed-off-by: Zhenzhong Duan Reviewed-by: Yi Liu Tested-by: Xudong Hao Tested-by: Giovannio Cabiddu Tested-by: Rohith S R --- include/hw/vfio/vfio-device.h | 10 ++++++++++ hw/vfio/container.c | 5 +---- hw/vfio/device.c | 6 ++++++ hw/vfio/migration.c | 6 +++--- 4 files changed, 20 insertions(+), 7 deletions(-) diff --git a/include/hw/vfio/vfio-device.h b/include/hw/vfio/vfio-device.h index 0bc877ff62..48d00c7bc4 100644 --- a/include/hw/vfio/vfio-device.h +++ b/include/hw/vfio/vfio-device.h @@ -148,6 +148,16 @@ bool vfio_device_irq_set_signaling(VFIODevice *vbasede= v, int index, int subindex =20 void vfio_device_reset_handler(void *opaque); bool vfio_device_is_mdev(VFIODevice *vbasedev); +/** + * vfio_device_dirty_pages_disabled: Check if device dirty tracking will be + * used for a VFIO device + * + * @vbasedev: The VFIODevice to transform + * + * Return: true if either @vbasedev doesn't support device dirty tracking = or + * is forcedly disabled from command line, otherwise false. + */ +bool vfio_device_dirty_pages_disabled(VFIODevice *vbasedev); bool vfio_device_hiod_create_and_realize(VFIODevice *vbasedev, const char *typename, Error **err= p); bool vfio_device_attach(char *name, VFIODevice *vbasedev, diff --git a/hw/vfio/container.c b/hw/vfio/container.c index db6f36b952..e7eae5cd83 100644 --- a/hw/vfio/container.c +++ b/hw/vfio/container.c @@ -178,10 +178,7 @@ bool vfio_container_devices_dirty_tracking_is_supporte= d( VFIODevice *vbasedev; =20 QLIST_FOREACH(vbasedev, &bcontainer->device_list, container_next) { - if (vbasedev->device_dirty_page_tracking =3D=3D ON_OFF_AUTO_OFF) { - return false; - } - if (!vbasedev->dirty_pages_supported) { + if (vfio_device_dirty_pages_disabled(vbasedev)) { return false; } } diff --git a/hw/vfio/device.c b/hw/vfio/device.c index eff5aab207..71eb069eb6 100644 --- a/hw/vfio/device.c +++ b/hw/vfio/device.c @@ -412,6 +412,12 @@ bool vfio_device_is_mdev(VFIODevice *vbasedev) return subsys && (strcmp(subsys, "/sys/bus/mdev") =3D=3D 0); } =20 +bool vfio_device_dirty_pages_disabled(VFIODevice *vbasedev) +{ + return (!vbasedev->dirty_pages_supported || + vbasedev->device_dirty_page_tracking =3D=3D ON_OFF_AUTO_OFF); +} + bool vfio_device_hiod_create_and_realize(VFIODevice *vbasedev, const char *typename, Error **err= p) { diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index 86e5b7ab55..c0b7d3434f 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -1210,8 +1210,7 @@ bool vfio_migration_realize(VFIODevice *vbasedev, Err= or **errp) return !vfio_block_migration(vbasedev, err, errp); } =20 - if ((!vbasedev->dirty_pages_supported || - vbasedev->device_dirty_page_tracking =3D=3D ON_OFF_AUTO_OFF) && + if (vfio_device_dirty_pages_disabled(vbasedev) && !vbasedev->iommu_dirty_tracking) { if (vbasedev->enable_migration =3D=3D ON_OFF_AUTO_AUTO) { error_setg(&err, @@ -1236,7 +1235,8 @@ bool vfio_migration_realize(VFIODevice *vbasedev, Err= or **errp) goto out_deinit; } =20 - if (vfio_viommu_preset(vbasedev)) { + if (!vfio_device_dirty_pages_disabled(vbasedev) && + vfio_viommu_preset(vbasedev)) { error_setg(&err, "%s: Migration is currently not supported " "with vIOMMU enabled", vbasedev->name); goto add_blocker; --=20 2.47.1