From nobody Mon Oct 27 13:52:29 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=1761271900; cv=none; d=zohomail.com; s=zohoarc; b=nY0XoywIlz0tJemZFt/ivw3XH9r8TKqEWL/MFtSKw8tEI2wRRU9dho8fuWKCbVGzHQnZ/JJbjNjBR57iy3yNymH8y3+b3bTCgn/m8cB2P/Brb9HHuEawv8ONXMyDwKkmB4lAhQI8bRBGnhjslkqc3a/71aYCKdA+96mNdABuwbs= ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=zohomail.com; s=zohoarc; t=1761271900; 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=jsZHM4wjUaLuijIPhuxmBpR07+JbLPduQJOOy5Omsgr7j9dou/5FvEDHYkih0Xo8X8fP7ZLv8sstIoVAjm4zkfnY6Qjq/+fz9qKFoSDVssXW9j6OY57O/2BbNfwoarOmSbSXMDo3KurrihkCMimITxnhWr5NjykncrjcMqBI7e8= 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 1761271900773137.64915562870658; Thu, 23 Oct 2025 19:11:40 -0700 (PDT) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1vC7Fj-0004d8-6g; Thu, 23 Oct 2025 22:10:03 -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 1vC7Fc-0004bo-8g for qemu-devel@nongnu.org; Thu, 23 Oct 2025 22:09:56 -0400 Received: from mgamail.intel.com ([192.198.163.18]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1vC7Fa-0006Ox-O6 for qemu-devel@nongnu.org; Thu, 23 Oct 2025 22:09:56 -0400 Received: from orviesa005.jf.intel.com ([10.64.159.145]) by fmvoesa112.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 23 Oct 2025 19:09:52 -0700 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; 23 Oct 2025 19:09:48 -0700 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1761271795; x=1792807795; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=93oEgf+zdiZpD+biukGcjZo4Huny7L8LpmDi2MZ++qY=; b=j7M+pd18OnDp7TvFjoNftfYA+1IDrE6gcpOgtLDfqHP5UjooJWIHeYpf VvkiBR1BulSRbJe00GaeahLXY8Yu4CGrdS4knn281UvFZEX85uWVGUkTT ey0bayCGkxVyWBGgDweFRSkuKpGB4duTknrnAj12mkyR4162EozYB34+W FvOnG8WZQopN5fIWoueZonFdpbe3PR+u9hXyYVoBKMsMcXBW18hD4lDdj N85L2ZStl4wYPdg0aQuRc0AFroHu+IjraE6ysQ9WCvFhNivjT55p7SO4y p2Z795bi8hIFWoi034ydlMbWh0F+hdsvPEwdwOXsgJBxtjLM3jn6SPEWl Q==; X-CSE-ConnectionGUID: 2CoMF3YeQRum2cfFKFueAA== X-CSE-MsgGUID: hcUBVpYSQyuWIvZCXOB6OQ== X-IronPort-AV: E=McAfee;i="6800,10657,11586"; a="62662143" X-IronPort-AV: E=Sophos;i="6.19,251,1754982000"; d="scan'208";a="62662143" X-CSE-ConnectionGUID: Q9jlzG/4Sa2OSRaaflcyfA== X-CSE-MsgGUID: x/EZ7/rFTnCqMY7iRhbmCA== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.19,251,1754982000"; d="scan'208";a="189440755" From: Zhenzhong Duan To: qemu-devel@nongnu.org Cc: alex.williamson@redhat.com, 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 v3 2/8] vfio/iommufd: Query dirty bitmap before DMA unmap Date: Thu, 23 Oct 2025 22:09:16 -0400 Message-ID: <20251024020922.13053-3-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20251024020922.13053-1-zhenzhong.duan@intel.com> References: <20251024020922.13053-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=192.198.163.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_MSPIKE_H2=0.001, 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: 1761271904502158500 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