From nobody Fri Nov 14 18:19:08 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=1761731795; cv=none; d=zohomail.com; s=zohoarc; b=nk/nXnqlPlVIJsEN7Kv5JAr8BilYcdIM/jkGvMUp6Aict0D4LjyBvEBB8d79gx6ItCxVlqHbTm2n95CiTTSpiQB+jGbjDrjroaPPgr2TtoFYcJfUJgcR9ThVvvgYw7SqWeRoIY7I8BtGTItIZUiQyE7jKvfGQR8OiEvtIl5pl04= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761731795; 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=scR8PE1fsG3U3I6Xj41zaZWi83b5NauIuaN2OyDZcKA=; b=NnAhK9HGpYBwXcrnCJuIuJXSkGwjumT+w8tbYH28aCB+qpZiEF69TfAvDzg3WJk+oCp8Nl+bbMMrqAjmW3x5sh8Yoq2pEJWgOPjXrae3AuLQh+q6vWlnncQdcaKZ5zGwH+77jxM6+yuzrcSYK0wYxu4spMfY7+ldam6MiNlt840= 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 1761731795782406.40353252780824; Wed, 29 Oct 2025 02:56:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vE2tA-0005t9-Hc; Wed, 29 Oct 2025 05:54:44 -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 1vE2t2-0005sX-7H for qemu-devel@nongnu.org; Wed, 29 Oct 2025 05:54:36 -0400 Received: from mgamail.intel.com ([198.175.65.14]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vE2su-0002mo-Ua for qemu-devel@nongnu.org; Wed, 29 Oct 2025 05:54:35 -0400 Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Oct 2025 02:54:26 -0700 Received: from unknown (HELO gnr-sp-2s-612.sh.intel.com) ([10.112.230.229]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Oct 2025 02:54:22 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1761731669; x=1793267669; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=aXealZqoCDQZO4te8ikEnzt6rDBgqqvMht5T/9+zSDU=; b=AskRNlhDErkwJKg9tPoiPCpKtlPj56JNzSaCvVJw6+mrOj9h8DYHLUit vyB2fbGsMTYJEuX+iG4lPkEsCPVL4vj8B8ywQExY+skhfUVHv5WFw5H3I o6tOFDy4h7TSG4W0EyD6rBCA7L7fAc9kgR/GRfkHWKSU89fyA4d5bjeRK tunRht+qi1zchkJNwKkOdIHBfhalcmdqRPa0ksbhgm3DB33IHGfVrsfeS 8kzXvAKy9gAsrFHufngvSFXWwVL8jlEcZxGOr2mQcVPGCzkkryma3DFwO 1fVod3QyLBXO1tkFqPjxrfUIx7uy36S8gNPUiBGGa/+hAPLTdPYUo0Z4e w==; X-CSE-ConnectionGUID: TrpWEtCeR0emzKbAb4UB5A== X-CSE-MsgGUID: Rhnwg3rjTR+XC62lT5ka2w== X-IronPort-AV: E=McAfee;i="6800,10657,11531"; a="67685115" X-IronPort-AV: E=Sophos;i="6.17,312,1747724400"; d="scan'208";a="67685115" X-CSE-ConnectionGUID: XdC0fLTzRHi+Gm10oFioRQ== X-CSE-MsgGUID: 7WuIbyj4QbOBabNUEf9tdg== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.19,263,1754982000"; d="scan'208";a="185529833" 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 v4 01/10] vfio/iommufd: Add framework code to support getting dirty bitmap before unmap Date: Wed, 29 Oct 2025 05:53:44 -0400 Message-ID: <20251029095354.56305-2-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20251029095354.56305-1-zhenzhong.duan@intel.com> References: <20251029095354.56305-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.14; 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_CERTIFIED_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: 1761731798498154100 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 bb5775aa71..806ca6ef14 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 Nov 14 18:19:08 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=1761731795; cv=none; d=zohomail.com; s=zohoarc; b=Yg01S3n+/Gv5vnaoyynO7HgYOCCw8z4fknYPwEvKWot7C1ZlGBs2Bdlu5Ehp1vDHQRfAVe3ID1dYQB6UNFcA0LznbOtg+18V2SebGGMjTknEksrUPtL3fIPtPxok65tTxalkNleuPNaOPLI47q3CkdVYD94cQayJK6/9r56749U= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761731795; 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=spt412zQYNGi/hrHUjHvLMRl5u6uTYRQKMYeov8BBeA=; b=TgFzyW5M034On0gsgRwQX+zNQzBky4ssN7URJxfbfDHVbxP3P9ylpyC9prg99EGSWkNQ+6MqGrkD0n/a2iyiMuJOJHjU+a5jFqwX0YozXB1dVGbVUTrMwJ5lN9m/Pbu33RWh+Ur/jcptFMGRFF/iVloEYGCLM+5+wMVlbhFzsTA= 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 1761731795214793.0904143997464; Wed, 29 Oct 2025 02:56:35 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vE2tC-0005tr-Gu; Wed, 29 Oct 2025 05:54:46 -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 1vE2t5-0005sy-0R for qemu-devel@nongnu.org; Wed, 29 Oct 2025 05:54:40 -0400 Received: from mgamail.intel.com ([198.175.65.14]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vE2sz-0002n9-6S for qemu-devel@nongnu.org; Wed, 29 Oct 2025 05:54:37 -0400 Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Oct 2025 02:54:29 -0700 Received: from unknown (HELO gnr-sp-2s-612.sh.intel.com) ([10.112.230.229]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Oct 2025 02:54:25 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1761731674; x=1793267674; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=93oEgf+zdiZpD+biukGcjZo4Huny7L8LpmDi2MZ++qY=; b=hrzSPr9Q9/NMoiW0vqsVTB54LGB+6txe9r8TRKHtznp+gTcmZPDkTGJ9 g1wBuoT7JWkkkxdrBkwXSKAvaP4RwS+fovG85tSdpLrnt6qnYt2yYrB8o YcVL2MbLwAGjUVXTzJywWjMe+pyO5VKG/JA41qneBVOcAqYYR/MAEebSW amSI6UbwSAO69XYR1ggeGwTk5DTDxTkYMN5cXcAV+bDeA42PQCtGK5M1z A4nbVky8e/jxjypyIeKPu4Opx4U+P2YVt35igCPx/ZAwNrPxHozC5Cixm zqBe2+O6L5W/mPlFkmsZ2NLmZGWfapFVR/BMZupm0FYQzQNebPZ/UAHSW Q==; X-CSE-ConnectionGUID: K57uD0BoR7urpla12vZW7g== X-CSE-MsgGUID: HzJNGKQ4Q/eXG2acx2qqXQ== X-IronPort-AV: E=McAfee;i="6800,10657,11531"; a="67685120" X-IronPort-AV: E=Sophos;i="6.17,312,1747724400"; d="scan'208";a="67685120" X-CSE-ConnectionGUID: YP/212vDSwaDfcFpds8OJA== X-CSE-MsgGUID: Db9iR0PQSM61xHD4tJaTgw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.19,263,1754982000"; d="scan'208";a="185529838" 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 v4 02/10] vfio/iommufd: Query dirty bitmap before DMA unmap Date: Wed, 29 Oct 2025 05:53:45 -0400 Message-ID: <20251029095354.56305-3-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20251029095354.56305-1-zhenzhong.duan@intel.com> References: <20251029095354.56305-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.14; 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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1761731800758158500 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 806ca6ef14..5f96a41246 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 Nov 14 18:19:08 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=1761731757; cv=none; d=zohomail.com; s=zohoarc; b=QMv0QLIWVBW3SxdKR7sIbXc6NHhrdl8C1r2/4EzcOBWlDRQoZ676aJBzIHIbmXz0CqWNvzE8gSHYLsmDplhYKwgkwpHPu4C+BDcEHGrIqABO2w7q6P9byS7pbACjrH/NgB+sJmpPzFHmdVKqBiypuwXBJO5LJECurLzjSyY9WAA= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761731757; 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=SKgRrqwhbswjRMlatDd+vO5hXOVOMYJRpJlBgn8YN/Y=; b=TMTAwkVkrlBSjGO8l3ika0oDW59vbDbnSDS+dI6rZwhP5aOOnfAAwIoHGI8N3iBWCGkK3a4bM41h6IRJIKfERPZkRPCybLqP+3zRyMlfPAO0HoUA4MA0FkXw1wd+pGS0QHAuSEQ0ajqvcIc/5EtgVsq5sJ5l4EZuTbb55DRx53k= 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 1761731757247161.588978042348; Wed, 29 Oct 2025 02:55:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vE2tG-0005uN-MZ; Wed, 29 Oct 2025 05:54:50 -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 1vE2t7-0005tB-RG for qemu-devel@nongnu.org; Wed, 29 Oct 2025 05:54:42 -0400 Received: from mgamail.intel.com ([198.175.65.14]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vE2t1-0002mX-BK for qemu-devel@nongnu.org; Wed, 29 Oct 2025 05:54:41 -0400 Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Oct 2025 02:54:33 -0700 Received: from unknown (HELO gnr-sp-2s-612.sh.intel.com) ([10.112.230.229]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Oct 2025 02:54:29 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1761731676; x=1793267676; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=sWFP8vLQRxvAEHPHjVjl5GexzADnjgDNlD5EWccfP88=; b=YvzRSacsrL5FXrMpDNnlJTGAeY8HOMIE5hbfIxMd5wtwhaI+vxz06c6G LCvm8tEKAjJkNXKR8ZQUmHJoBjJWvaahzRX7A+oJ25XS/Fpa9EHcH+UGR SsPePuwWIxOFX/QHnLz/xIqOFzcjMIL18Hnixh3Hig0ygKfGleG/XbauB Q7ahQIsn8+gyekoogzxN6dWfIOSoO5KD/Mp2bt7Y7HkjCTmuSCkz2/uxN hE7P8gkYxMTnCGEtw+M4DV3w9n4VXY4jAkQkGKEx2WKMzr7deRpYrTUAK hJu4TNRqfa68M/fR9HIxZQAb42g7QGmESkqQUFSaYEKrUpIe7cYRkTdfr w==; X-CSE-ConnectionGUID: xZiSQoYqS1m3S0yP0mXuSA== X-CSE-MsgGUID: LIeVGMgwRvqJYwpJVbZQXQ== X-IronPort-AV: E=McAfee;i="6800,10657,11531"; a="67685131" X-IronPort-AV: E=Sophos;i="6.17,312,1747724400"; d="scan'208";a="67685131" X-CSE-ConnectionGUID: llzC8py9Tz60Ri2K4fbuuA== X-CSE-MsgGUID: HFxvXqPQSNyJ0WIiBe4xJQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.19,263,1754982000"; d="scan'208";a="185529849" 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 v4 03/10] vfio/container-legacy: rename vfio_dma_unmap_bitmap() to vfio_legacy_dma_unmap_get_dirty_bitmap() Date: Wed, 29 Oct 2025 05:53:46 -0400 Message-ID: <20251029095354.56305-4-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20251029095354.56305-1-zhenzhong.duan@intel.com> References: <20251029095354.56305-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.14; 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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1761731762149158500 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 8e9639603e..b7e3b892b9 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 Nov 14 18:19:08 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=1761731837; cv=none; d=zohomail.com; s=zohoarc; b=UGUF3yB+wBui6qewOmKtmzo25HJvrDMVxq059estp1eEvzwfkE7rEt1W4/Bu/dsuLQNYiWq17TIX2W9bf28zdcHthUp93/0ScZF1Ma7JQsme8eD0lgLQIXasVHXZKg6dTFHkKOukPqIe0Xxdyi7/E7HuMIccUi8jX0mBZ/e+X94= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761731837; 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=0zZtJVvaKHwzjX/miju4XEHz93dCP/WHZ7Ud+b7Ww+s=; b=mT8AtSiWLPUDb5QiRSARKKCJojtGNfZS3Kj2y9CbBB6cxpEMqDmnudb19OlI0+1uwqroYW1y6MVMRcr+PhrqafEUpG+fusw97ZF3vYtCPVC6Ya2ZjfMd5n23RAECLR68eRjg7JzrfFHorqndqsCAY1+EI5AGeQjeIkx+05yIHs0= 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 1761731837361868.1453942684873; Wed, 29 Oct 2025 02:57:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vE2tH-0005ud-8F; Wed, 29 Oct 2025 05:54:51 -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 1vE2t7-0005tA-MN for qemu-devel@nongnu.org; Wed, 29 Oct 2025 05:54:42 -0400 Received: from mgamail.intel.com ([198.175.65.14]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vE2t4-0002mo-SM for qemu-devel@nongnu.org; Wed, 29 Oct 2025 05:54:41 -0400 Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Oct 2025 02:54:37 -0700 Received: from unknown (HELO gnr-sp-2s-612.sh.intel.com) ([10.112.230.229]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Oct 2025 02:54:33 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1761731679; x=1793267679; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=uESL6J226lu7w756/0wvfdMdWkKxtHNzGnOAHbi93zQ=; b=E0IrNR0Ur86MQqnpxbZ955LfaUlYakoM7qr7VjHh61MRLveG0dskdtte +Dd1exFz1T3SVT5xNFGtwqjxRiqcNxns5M/mRY/6OYlnCl7dsEHjKbY8W af64ZFoSQPTXOQfARNI4iR6hwBowonRztL+fvHtQm9fO0NgYW23ZevIkx Ik/g6rc8x++dIKzsNgAN/eIfta3KPn58eVIG8XbGMRzvdylD59lpnNAwA AbD5/4PXFCLk2Rf4P/zpWAlPfENiVyU6xtJ28qtORXBFnPEnvasovZiQE 6PEm8KPUOzeEpp6PI+/+6/e8fXOUT2viUxAN42X1UtGcyafdOlsTCUo3G w==; X-CSE-ConnectionGUID: OXtb9X8ORW6KrsoSBk5snA== X-CSE-MsgGUID: PB0ZJWAWTYCtUJRxBmhV8A== X-IronPort-AV: E=McAfee;i="6800,10657,11531"; a="67685134" X-IronPort-AV: E=Sophos;i="6.17,312,1747724400"; d="scan'208";a="67685134" X-CSE-ConnectionGUID: OxDBAQWWR72L9TVEsbZTUw== X-CSE-MsgGUID: crnB1RxVQXWNZ8bKPa3MaA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.19,263,1754982000"; d="scan'208";a="185529858" 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 v4 04/10] vfio: Introduce a helper vfio_device_dirty_pages_disabled() Date: Wed, 29 Oct 2025 05:53:47 -0400 Message-ID: <20251029095354.56305-5-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20251029095354.56305-1-zhenzhong.duan@intel.com> References: <20251029095354.56305-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.14; 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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1761731838848154100 Content-Type: text/plain; charset="utf-8" Introduce a helper vfio_device_dirty_pages_disabled() to check if device dirty tracking will be used for a VFIO device. Use it to replace existing code, it will also be used in subsequent patches. No functional change intended. Signed-off-by: Zhenzhong Duan Reviewed-by: Yi Liu --- include/hw/vfio/vfio-device.h | 10 ++++++++++ hw/vfio/container.c | 5 +---- hw/vfio/device.c | 6 ++++++ hw/vfio/migration.c | 3 +-- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/include/hw/vfio/vfio-device.h b/include/hw/vfio/vfio-device.h index 0fe6c60ba2..a0b8fc2eb6 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 9ddec300e3..077eb57304 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 8b63e765ac..5ed3103e72 100644 --- a/hw/vfio/device.c +++ b/hw/vfio/device.c @@ -411,6 +411,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 4c06e3db93..3d819eb87e 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -1183,8 +1183,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, --=20 2.47.1 From nobody Fri Nov 14 18:19:08 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=1761731757; cv=none; d=zohomail.com; s=zohoarc; b=BYhA/byl+cwjMHjtguBJ/OTZZvzLf3xy5k3UJSd3JNbi267qu52AIISuA4HqJEUfcIlaaX92cjTOtNKmlksN7pQ81FUM4TWNmAMCZv85bmCN7frOx1Io6g68dT7H1mQ2TJN14kC1ELApAF096Gvo3yV/dEH/M4zpa2nQnJn/Ij8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761731757; 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=/qQ3P8dgs6ZvI/ZFW/h0d1nwbL3X061ZCSfh60DHMhg=; b=X/ZNJqcPC6VTxfLjivKdmvWbD6GoOAuUM/fscQCHqH3+y/3nVQdKjt6RNLxgfDz4yoC2Qyp8oito8f43P0de30GBoreoCSOtst7p0KxR2xaZrQZUDceSTrLe4DSqluDTZyTlpIWAkTd2Qd77BfPTjHOlE8Z0NknWJ3u+UuUGRC0= 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 1761731757748694.7839380960163; Wed, 29 Oct 2025 02:55:57 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vE2tJ-0005vV-93; Wed, 29 Oct 2025 05:54:53 -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 1vE2tH-0005ug-HU for qemu-devel@nongnu.org; Wed, 29 Oct 2025 05:54:51 -0400 Received: from mgamail.intel.com ([198.175.65.14]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vE2t9-0002n9-CK for qemu-devel@nongnu.org; Wed, 29 Oct 2025 05:54:51 -0400 Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Oct 2025 02:54:41 -0700 Received: from unknown (HELO gnr-sp-2s-612.sh.intel.com) ([10.112.230.229]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Oct 2025 02:54:37 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1761731684; x=1793267684; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=6P6yO+u2QX/lC6J5Yi0noo+C0Q2ZwTahNm0T+k9kjA4=; b=lnmXsweHd1adV1Dyn1WDFLgGLSyrwleuXyXMiS2z+LLs4nXw3sxBexv/ /LyGM6yqU092AWlLJpEaxp93Lq/btlNwnMZFbsDALCZLJcQuXqP3m+luU Stg0SOU7LnYw3EBlGpRN+O75SajcS8sY8HO32F55kABNiK/45/TlpmzYx QB7D16YPPG7bJuEbGHDz6rbwej8lzbEVZArvLRN5W6VgYBs+3QcH7rO7O Pb6r/jUqXxS1WLY1SRc3TRpSfpdZ8ttFemcF5y9IlwQpoiz+hgKJNcX5U E0yMHblxUqPNgZ/oZbi2AQFWu/0XCjgS4I8xMPOGvqmyQrSZ087ceUBnD w==; X-CSE-ConnectionGUID: RVK5lTHeQMKRC7BQtw4hLg== X-CSE-MsgGUID: Oep80UafRhWXlCkaJxJJJQ== X-IronPort-AV: E=McAfee;i="6800,10657,11531"; a="67685137" X-IronPort-AV: E=Sophos;i="6.17,312,1747724400"; d="scan'208";a="67685137" X-CSE-ConnectionGUID: WryMEIwWRCKpZ90JNnhT2Q== X-CSE-MsgGUID: OoNIWB+dQPe1FWiBTbIBzw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.19,263,1754982000"; d="scan'208";a="185529865" 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 v4 05/10] vfio: Add a backend_flag parameter to vfio_contianer_query_dirty_bitmap() Date: Wed, 29 Oct 2025 05:53:48 -0400 Message-ID: <20251029095354.56305-6-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20251029095354.56305-1-zhenzhong.duan@intel.com> References: <20251029095354.56305-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.14; 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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1761731760916158500 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 e45192fef6..3ce6ea12db 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 b7e3b892b9..dd9c4a6a5a 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 077eb57304..8879da78c8 100644 --- a/hw/vfio/container.c +++ b/hw/vfio/container.c @@ -210,13 +210,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( @@ -244,7 +244,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); @@ -271,7 +273,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) { @@ -282,8 +284,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 5f96a41246..b59a8639c6 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 Nov 14 18:19:08 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=1761731837; cv=none; d=zohomail.com; s=zohoarc; b=O5d6faiqrNAGTIMhGz/TxKfoe9GneUdsh/y6QFnb/tgoil31qFINA8cnMttu9ru4Pzuo0dhtu+WG4U95khZJWn86xOdOEfaHvKMhJwr+O76nysep0x27DfUqjV1Y4HCJpaevRhQuWwLNw78FOQkSePDelWrn6qFgjS+w9qAQPgs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761731837; 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=7vDNxVp/Pn2U86OVRp7iN6j5U8JD7x0sshPagiP02s4=; b=Avc+D9IahBuu6cmTcesIfmxHJYw+XdCozwjXn7svwGPYqvy+59nzVbCc8qyackzFuSeK7H21t09JRVvi56/zccX8T6IQo8NkZkwN2ytsXhlW8H7Q27CmV+v/lafr76EjHszpcR6RiuuHtzvPOEPBB4dtqW2yseZXaS+v/wXtKiA= 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 176173183713430.750712448223; Wed, 29 Oct 2025 02:57:17 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vE2tK-0005vh-1I; Wed, 29 Oct 2025 05:54:54 -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 1vE2tI-0005vH-1o for qemu-devel@nongnu.org; Wed, 29 Oct 2025 05:54:52 -0400 Received: from mgamail.intel.com ([198.175.65.14]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vE2tD-0002pI-Gz for qemu-devel@nongnu.org; Wed, 29 Oct 2025 05:54:51 -0400 Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Oct 2025 02:54:45 -0700 Received: from unknown (HELO gnr-sp-2s-612.sh.intel.com) ([10.112.230.229]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Oct 2025 02:54:41 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1761731688; x=1793267688; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=OMRpVOoiVE3Dm3Nr2INaBpvRrtJigy0sE2j643DhDEE=; b=eOPy3nHto5NwaU2k8GgemU5p5mcK7nL7QSFPvsM/OmSgISmGbVAUJili VbqmwKx5yZiQvdAcizIzTR72ZTeyhlmTqQRqOz7qbe/8t1wPo3RL21YOG iI8575KC+8j46KSFmf/Z+IM64YqjhDQ15vXtBXjjsLd6vYDWjYlbf0gGt 1Xb7W71rIojycAKbUjwPJ2I0f9yLZS4Z37o+FJ/giDnC5AXz0awsHE3wW fCxIEGBAUjLB8onPX8+JaM4mMiIVMcHzAGVhWVcpatV3drFhcXvPteP4e Os3HaTAEn0kwVkpJ6x2zckE7Cuei0+cmBuBjepSdEhJeK3jS12aQEWtsJ g==; X-CSE-ConnectionGUID: 9xqWEVdgSDKYhYXkys36fQ== X-CSE-MsgGUID: UF0dzTYEQn+OEaOaOowOuw== X-IronPort-AV: E=McAfee;i="6800,10657,11531"; a="67685138" X-IronPort-AV: E=Sophos;i="6.17,312,1747724400"; d="scan'208";a="67685138" X-CSE-ConnectionGUID: DnMpgC12Skqd9x+G3FrjEA== X-CSE-MsgGUID: uHRT3ud6QiievjJJMz41Xw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.19,263,1754982000"; d="scan'208";a="185529878" 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 v4 06/10] vfio/iommufd: Add IOMMU_HWPT_GET_DIRTY_BITMAP_NO_CLEAR flag support Date: Wed, 29 Oct 2025 05:53:49 -0400 Message-ID: <20251029095354.56305-7-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20251029095354.56305-1-zhenzhong.duan@intel.com> References: <20251029095354.56305-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.14; 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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1761731841078158500 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 b59a8639c6..ba5c6b6586 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 Nov 14 18:19:08 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=1761731797; cv=none; d=zohomail.com; s=zohoarc; b=EPCebc/nGQ8CYIvbswp7UyvNB2afBKXgwG4dvoecYkfrG+8+B1ZX7o/+LVt+nM4cwekJqbKax0rfvpUj11OJSVKZ3KPZGs+TjxGPtc4j6heVKLHKX+0+RxZXx55PuePFvwOfDbaSwlrT/tLW19DQx7SlP1WYIdgc4xBtTNo0oP8= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761731797; 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=xb22QLzQn5g9FCp3P3GwAG27YMzeAL1vnCKbal5zJMM=; b=SD+NTkrom0jOKcpQFDs6Cdp+Btpiu0VGcCCyTf4R6P83BZgL2bD3PdwDPtGH7kLQldxmKSJYkLtegQKxR4lvYRmGSj5ouYa4ZOtgOJE1pJ422kWBRSazGiaRw6q4FXuxGxygaYwnjxc2Y4L44e6NXDiiz8IqmzWnUX/ukIYS6jg= 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 1761731797657986.7905977989544; Wed, 29 Oct 2025 02:56:37 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vE2tP-0005x0-Od; Wed, 29 Oct 2025 05:54:59 -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 1vE2tN-0005wH-U1 for qemu-devel@nongnu.org; Wed, 29 Oct 2025 05:54:57 -0400 Received: from mgamail.intel.com ([198.175.65.14]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vE2tI-0002n9-1m for qemu-devel@nongnu.org; Wed, 29 Oct 2025 05:54:57 -0400 Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Oct 2025 02:54:49 -0700 Received: from unknown (HELO gnr-sp-2s-612.sh.intel.com) ([10.112.230.229]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Oct 2025 02:54:45 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1761731692; x=1793267692; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=lq5YlZsXi79CCeK0nauOZ3bVXvHplXnalGhdh+p16z8=; b=Gc2WUiryacGf+gdGZF7V2R9uzSHyD1xgU0x52BfZaPZjPrTXEgsp+jXG /elcJ6+odoOM2KkzIkPHWzSRfr/cSUEtpxGGjdau1lVm5GQv8flUHfsUV VOjpIKhIghqQGAm/bZK2we2+/0LQHRWs1w56KZPRL/QmIT8QphUkGU6zo iDcGPerqzlJueneChLVglYnT/kSsmsqLJb6ICFdNLfcA5WB4gzB0ijJ+y Eo5WP/TV6yp1diG2TUORM+cRai5j5Q1gO6psY7q/CH0kaWtcI+xh+j2/H cdE/sOK1I8G7IVGVPBTEo7mBYwkMjBdwJnowdxM4jWZbxdWOcl6ZKS8tP Q==; X-CSE-ConnectionGUID: RXbVp/nBTGK+1+Ytt787SQ== X-CSE-MsgGUID: ENvV/VmsQPODFGZL9h+Piw== X-IronPort-AV: E=McAfee;i="6800,10657,11531"; a="67685140" X-IronPort-AV: E=Sophos;i="6.17,312,1747724400"; d="scan'208";a="67685140" X-CSE-ConnectionGUID: Lmw+k4u9RLeqD3H7NiYIdg== X-CSE-MsgGUID: T4gJ606VRTutf+4pcUPVRw== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.19,263,1754982000"; d="scan'208";a="185529892" 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 v4 07/10] intel_iommu: Fix unmap_bitmap failure with legacy VFIO backend Date: Wed, 29 Oct 2025 05:53:50 -0400 Message-ID: <20251029095354.56305-8-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20251029095354.56305-1-zhenzhong.duan@intel.com> References: <20251029095354.56305-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.14; 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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, SPF_HELO_NONE=0.001, T_SPF_TEMPERROR=0.01 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: 1761731800776158500 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. Fix it by iterating over DMAMap list to unmap each range with active mapping when migration is active. If migration is not active, unmapping the whole address space in one go is optimal. There is no such limitation with iommufd backend, but it's still not optimal to allocate large bitmap, e.g., there may be large hole between IOVA ranges, allocating large bitmap and dirty tracking on the hole is time consuming and useless work. 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 c402643b56..b00fdecaf8 100644 --- a/hw/i386/intel_iommu.c +++ b/hw/i386/intel_iommu.c @@ -37,6 +37,7 @@ #include "system/system.h" #include "hw/i386/apic_internal.h" #include "kvm/kvm_i386.h" +#include "migration/misc.h" #include "migration/vmstate.h" #include "trace.h" =20 @@ -4695,6 +4696,42 @@ static void vtd_dev_unset_iommu_device(PCIBus *bus, = void *opaque, int devfn) vtd_iommu_unlock(s); } =20 +/* + * Unmapping a large range in one go is not optimal during migration becau= se + * a large dirty bitmap needs to be allocated while there may be only small + * mappings, iterate over DMAMap list to unmap each range with active mapp= ing. + */ +static void vtd_address_space_unmap_in_migration(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 meaningless for unmap */ + event.entry.translated_addr =3D 0; + 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) { @@ -4704,6 +4741,11 @@ static void vtd_address_space_unmap(VTDAddressSpace = *as, IOMMUNotifier *n) IntelIOMMUState *s =3D as->iommu_state; DMAMap map; =20 + if (migration_is_running()) { + vtd_address_space_unmap_in_migration(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 Nov 14 18:19:08 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=1761731785; cv=none; d=zohomail.com; s=zohoarc; b=MxC7Nl4SsOaSiE+++4sgo5yRBJPVbupOY1uifR3bnif6DHDdUKNlvfXxTOGDag9EKoilKTIJWh8wfa7B18TlHcCCtKMrc6hwFv72cpAQE2VjdsgdCneNmzS1xaL53fD7FT5mocguUFDcaU9z5ailobbLB+sM7gaAtusNnrzvZhc= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761731785; 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=eqUnT7JAMDv3wULnOqPonqTNEdN1OO1vyuokfTdpeyA=; b=hhWJhgHqdS1T8wrGBklwEaCBIJKiK5VMIGRVpQOsXg2YP8BGAXjo2h75amZ+adVmn7szrljor3u/ZHG3JQOKITdfTkWT1N3qMoEkQFpfg5tB+sKSiex67XOlM5KwfSwtfyrNBtxinpeZD2Myfs1zB30fJAhoyH1/J4VcamiWI+c= 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 1761731785620609.1591473615254; Wed, 29 Oct 2025 02:56:25 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vE2tW-0005yN-V2; Wed, 29 Oct 2025 05:55:07 -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 1vE2tP-0005x1-Nz for qemu-devel@nongnu.org; Wed, 29 Oct 2025 05:54:59 -0400 Received: from mgamail.intel.com ([198.175.65.14]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vE2tN-0002pk-9q for qemu-devel@nongnu.org; Wed, 29 Oct 2025 05:54:59 -0400 Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Oct 2025 02:54:53 -0700 Received: from unknown (HELO gnr-sp-2s-612.sh.intel.com) ([10.112.230.229]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Oct 2025 02:54:49 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1761731698; x=1793267698; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=INo9zFVHFO7PnVTAEL7U6nieTC6v0bt514H4r0YlqN0=; b=a3bXT+jPosCrAVF858XIayBB0LhV0pK6NBnMArdzO0x+XIJ1ae1q4BJr kHjr6hIayOcsjTr6yg5QbIR0O2dMn+Kd/fM2T2xmWNeqHx/+ehnsRcsdN ypKhaW5bxM70Rbz1dWPailUtaiHXosrXoIVv5S3+vNcKkEPskPB49DkK4 B4qKD+ik31FVQie4d/aegc32g3c46gEMgLyootIVBENcy5LTpPIDmIN9I YJevzUzwK2+miT89s8zHYVsaWJDDKxImHg+sUs2a5VxvyndRhnuITn7DK /Qn0VwCl5CFJC/2hZ3p+6LOD4CYdLI9BUER8ZpmGeGVywGqdD3MK3OehQ w==; X-CSE-ConnectionGUID: fzA+bfKnQyqN0XG7fjHbiA== X-CSE-MsgGUID: 8ys0FL9GQraZSfAnLlK7MQ== X-IronPort-AV: E=McAfee;i="6800,10657,11531"; a="67685146" X-IronPort-AV: E=Sophos;i="6.17,312,1747724400"; d="scan'208";a="67685146" X-CSE-ConnectionGUID: lkHz89efQBqT/UNKHyOUew== X-CSE-MsgGUID: LecCX/G6T1e4nO4X0X1RRA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.19,263,1754982000"; d="scan'208";a="185529902" 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 v4 08/10] vfio/migration: Fix a check on vbasedev->iommu_dirty_tracking Date: Wed, 29 Oct 2025 05:53:51 -0400 Message-ID: <20251029095354.56305-9-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20251029095354.56305-1-zhenzhong.duan@intel.com> References: <20251029095354.56305-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.14; 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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1761731790549158500 Content-Type: text/plain; charset="utf-8" VFIO IOMMU type1 claims to support IOMMU dirty tracking by setting bcontainer->dirty_pages_supported, but in vfio_migration_realize() vbasedev->iommu_dirty_tracking is checked, we should pass bcontainer->dirty_pages_supported to vbasedev->iommu_dirty_tracking in legacy backend so that the check is accurate. Fixes: 30b916778517 ("vfio/common: Allow disabling device dirty page tracki= ng") Signed-off-by: Zhenzhong Duan --- hw/vfio/container-legacy.c | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/hw/vfio/container-legacy.c b/hw/vfio/container-legacy.c index dd9c4a6a5a..fa726a2733 100644 --- a/hw/vfio/container-legacy.c +++ b/hw/vfio/container-legacy.c @@ -845,6 +845,7 @@ static bool vfio_device_get(VFIOGroup *group, const cha= r *name, VFIODevice *vbasedev, Error **errp) { g_autofree struct vfio_device_info *info =3D NULL; + VFIOContainer *bcontainer =3D VFIO_IOMMU(group->container); int fd; =20 fd =3D vfio_cpr_group_get_device_fd(group->fd, name); @@ -883,7 +884,8 @@ static bool vfio_device_get(VFIOGroup *group, const cha= r *name, } } =20 - vfio_device_prepare(vbasedev, VFIO_IOMMU(group->container), info); + vfio_device_prepare(vbasedev, bcontainer, info); + vbasedev->iommu_dirty_tracking =3D bcontainer->dirty_pages_supported; =20 vbasedev->fd =3D fd; vbasedev->group =3D group; --=20 2.47.1 From nobody Fri Nov 14 18:19:08 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=1761731767; cv=none; d=zohomail.com; s=zohoarc; b=BaaAAcmb+IkD1BCJAuWqPlqG7ld9ZpcasBIdAp80/e/Ulb6chus3vuddfZWToLwqUJPjs1UKqIdqkrKle1FWTDskvDSyBQ00s1bdXV3lwyK6eICf7l1LBE7d0tQAKdfGIbEgB5SZe5xvGtoQt4gNofY+5G0RQpJ2kdV6kpvRsSY= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761731767; 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=7s4KqxlUTSOVHxikgZonhB2bs06unTmhsHe15Zu43Qs=; b=jriHTeKt1GKp9FvrP8wLKLYHaF5UpVIzie1isdIDVlyagwbk9+VwgEq75swTxwCbhHYihJk2on96MQjc2ZRyvk6KQr0OR35Yc2Z+DjQ5p14zwpUyOyzJqu1yIcH/7+hmoR1bEswRDhx2ZeCyl51SOcBjYwCkdHZL+xk19yA8gko= 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 1761731767095339.10247370137506; Wed, 29 Oct 2025 02:56:07 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vE2tZ-00064U-Ag; Wed, 29 Oct 2025 05:55:10 -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 1vE2tT-0005yk-Ow for qemu-devel@nongnu.org; Wed, 29 Oct 2025 05:55:06 -0400 Received: from mgamail.intel.com ([198.175.65.14]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vE2tP-0002n9-Ko for qemu-devel@nongnu.org; Wed, 29 Oct 2025 05:55:02 -0400 Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Oct 2025 02:54:57 -0700 Received: from unknown (HELO gnr-sp-2s-612.sh.intel.com) ([10.112.230.229]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Oct 2025 02:54:53 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1761731700; x=1793267700; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=xIePEUHN6MNvv4wku67sYuOEq8f7ZF75gXyrZc8VzUI=; b=J92nKARe5jQgdPPc3ytedfsAT5/76KAEHyukza3vSbk9RJRtgPrw61kJ njU8lsbaBdK+rmFoXaP0QEr/bO+ttATqcguID4JZwaBC2O53l9c1XOFYm io+w8hdIKTQxEHPzrEKxHbc51VhkT08iGK37tCAx6NOPuCDQwCoC5D7v+ DQS7aYQr0DAa0rVIw1vItXIq2MSPW0SR2EroSuSAoz4d2YY8JjETK+UlA Z8sdoVN6LJS1IP3ACu836WTYN+XzPox3BTSYpn8vo5O2EQnAIuRCmHTn6 PXySWK93QDJkkrdpkAUhwLfHARVBLs93NCe3Kc05EBLchUBPLo+u/fHG5 A==; X-CSE-ConnectionGUID: YrK1M4bwTnmLmyjSmVo19w== X-CSE-MsgGUID: 6+OuHfWxRkSU6Ypfcqq+HQ== X-IronPort-AV: E=McAfee;i="6800,10657,11531"; a="67685157" X-IronPort-AV: E=Sophos;i="6.17,312,1747724400"; d="scan'208";a="67685157" X-CSE-ConnectionGUID: qwHPvGZdQHuDEQx821ynHQ== X-CSE-MsgGUID: Lmf4LWPZR46FbP0wI4dpow== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.19,263,1754982000"; d="scan'208";a="185529921" 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 v4 09/10] vfio/migration: Add migration blocker if VM memory is too large to cause unmap_bitmap failure Date: Wed, 29 Oct 2025 05:53:52 -0400 Message-ID: <20251029095354.56305-10-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20251029095354.56305-1-zhenzhong.duan@intel.com> References: <20251029095354.56305-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.14; 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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1761731772729158500 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 IOMMUFD backed device if there is a need to migration such large VM. Suggested-by: Yi Liu Signed-off-by: Zhenzhong Duan --- hw/vfio/iommufd.c | 5 +++++ hw/vfio/migration.c | 29 +++++++++++++++++++++++++++++ 2 files changed, 34 insertions(+) diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c index ba5c6b6586..8de765c769 100644 --- a/hw/vfio/iommufd.c +++ b/hw/vfio/iommufd.c @@ -633,6 +633,11 @@ skip_ioas_alloc: QLIST_INIT(&container->hwpt_list); =20 bcontainer =3D VFIO_IOMMU(container); + + /* There is no limitation on dirty bitmap size in IOMMUFD */ + bcontainer->max_dirty_bitmap_size =3D UINT64_MAX; + bcontainer->dirty_pgsizes =3D qemu_real_host_page_size(); + vfio_address_space_insert(space, bcontainer); =20 if (!iommufd_cdev_attach_container(vbasedev, container, errp)) { diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index 3d819eb87e..0a1d8cac2c 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,28 @@ 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; + + /* + * 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 @@ -1194,6 +1217,12 @@ bool vfio_migration_realize(VFIODevice *vbasedev, Er= ror **errp) =20 warn_report("%s: VFIO device doesn't support device and " "IOMMU dirty tracking", vbasedev->name); + } else if (vfio_device_dirty_pages_disabled(vbasedev) && + vfio_dirty_tracking_exceed_limit(vbasedev)) { + error_setg(&err, "%s: Migration is currently not supported with la= rge " + "memory VM due to dirty tracking limitation in backend", + vbasedev->name); + goto add_blocker; } =20 ret =3D vfio_block_multiple_devices_migration(vbasedev, errp); --=20 2.47.1 From nobody Fri Nov 14 18:19:08 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=1761731789; cv=none; d=zohomail.com; s=zohoarc; b=A8b4KjVe8L3k9IAwEEk3XSV2FUawAaYpMkcDQtLHemjjN1zRGuK46Qu76vSrYfttjiVAotWgwbFUUFlo+p+tYNRvJ8Tyd3x2Gkfvv5u6ILZd4ddCZsCQNEVXSg9s0NSeEE7kIr/e6lxeFptTOYeppAD+HcnFeJnuG8PTOsPOBiE= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761731789; 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=gBVPkFDs80W9FI9E8i19hWEhXOMbUz0Sf2ylu6X+Ieg=; b=Ih/E/aG+8sUddTT9wJaZrPuUdMJD2PN0rq1d7aYaHQCW1K7qg4hx7ynSW/lEgh1ayltr7GaffLw43VwZobwOIj2UdQ4+wiU+PPI+O2BrwTAtLgpz3IAx/PDlSGoThZZ4FXy3ixucClFx3vSu+d50lTsjQWusd+SBSwUZ8xuRZZ4= 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 1761731789531437.3353349111277; Wed, 29 Oct 2025 02:56:29 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vE2tb-000658-6o; Wed, 29 Oct 2025 05:55:11 -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 1vE2tY-00063x-Ci for qemu-devel@nongnu.org; Wed, 29 Oct 2025 05:55:08 -0400 Received: from mgamail.intel.com ([198.175.65.14]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vE2tV-0002qs-6A for qemu-devel@nongnu.org; Wed, 29 Oct 2025 05:55:07 -0400 Received: from orviesa007.jf.intel.com ([10.64.159.147]) by orvoesa106.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Oct 2025 02:55:01 -0700 Received: from unknown (HELO gnr-sp-2s-612.sh.intel.com) ([10.112.230.229]) by orviesa007-auth.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 29 Oct 2025 02:54:57 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1761731705; x=1793267705; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=27Kzqt4KNnkxv05PFDVsUqXyUhhKvyijxvUko4OI5iI=; b=H83AUPYje8kMNen5sHQfkOL6C8Qc4yIGXuysSO0agA7L33l/A+j/TA+l Me76NRHGMD1BYSjsIhaEZ9TwGWScQ4knFR1rorYh3k0KQXmX5nMf/7Biq /0wmQIa6lY/YFHh+eMG2yNi/A3SgYq/fi6I8HGEJbZYAq2VWK8/SIqG/s C8aRF3HwSGrZ6A1SfnHAW4XEvO3NW/dgd69mWvJGeWqfCWFrRsC6A3YG9 o6bMyNn/B0rzv9mszYkj+g97b8lXULkwRMib944sr+1B765hu4WzycApU eip5rdKEgvPfte0+XnlrvgApKBgGBHw3pjeD74h+IDQ2VxSRVppM/ylul g==; X-CSE-ConnectionGUID: cgQqXPfgSWuaQmAAmS3gDg== X-CSE-MsgGUID: El09PmXcSza2aa+FYKPBqQ== X-IronPort-AV: E=McAfee;i="6800,10657,11531"; a="67685164" X-IronPort-AV: E=Sophos;i="6.17,312,1747724400"; d="scan'208";a="67685164" X-CSE-ConnectionGUID: 8g5uNG2dQWSwRbfaOrBeuA== X-CSE-MsgGUID: Z10q+nCnR0e7Xj9MLFogDA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.19,263,1754982000"; d="scan'208";a="185529932" 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 v4 10/10] vfio/migration: Allow live migration with vIOMMU without VFs using device dirty tracking Date: Wed, 29 Oct 2025 05:53:53 -0400 Message-ID: <20251029095354.56305-11-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20251029095354.56305-1-zhenzhong.duan@intel.com> References: <20251029095354.56305-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.14; 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_CERTIFIED_BLOCKED=0.001, RCVD_IN_VALIDITY_RPBL_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: 1761731790550158500 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 --- hw/vfio/migration.c | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/hw/vfio/migration.c b/hw/vfio/migration.c index 0a1d8cac2c..40f337b798 100644 --- a/hw/vfio/migration.c +++ b/hw/vfio/migration.c @@ -1230,7 +1230,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