From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from lists.gnu.org (lists.gnu.org [209.51.188.17]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 37F4FCA0FED for ; Wed, 10 Sep 2025 02:39:47 +0000 (UTC) Received: from localhost ([::1] helo=lists1p.gnu.org) by lists.gnu.org with esmtp (Exim 4.90_1) (envelope-from ) id 1uwAid-00070C-4I; Tue, 09 Sep 2025 22:37: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 1uwAiZ-0006zs-Ol for qemu-devel@nongnu.org; Tue, 09 Sep 2025 22:37:55 -0400 Received: from mgamail.intel.com ([192.198.163.13]) by eggs.gnu.org with esmtps (TLS1.2:ECDHE_RSA_AES_256_GCM_SHA384:256) (Exim 4.90_1) (envelope-from ) id 1uwAiP-0005gB-JW for qemu-devel@nongnu.org; Tue, 09 Sep 2025 22:37:55 -0400 DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1757471865; x=1789007865; h=from:to:cc:subject:date:message-id:in-reply-to: references:mime-version:content-transfer-encoding; bh=mQiyyT422oTCwhFWFR51BUCTzu/XqXJsSl9tJ8GNNIU=; b=MLuI/CkepmyJsVwvu9SgzFcuiiKeXdBWhDdWMfEviCk9329ZUsp7TzbB BYw2t82WacZ3yLYmmrQkB2y75yW8Y5m2I4jFBXLn+k00V7MjHFJb2DKMa qXkBhLcufbIT2OWoN62/d4qxY1FSdGQiE6ZrTm66lM2eidhzimsqdLJJt qBmLjph0FrDbWJfvNm2byWoRt70RTcJD1QEDH36FJOPOGLZuPwiqEKuHl AVq2b9ybf8sxL8zZdJoRUrAKJhsIUC2vz2GemtBnFr8l42lUczygx+nGz E54Xj0NDSnreQEXQiFqFWKC0Go0gVggyKsExcotqgiN78H03Gqzc9rc4I Q==; X-CSE-ConnectionGUID: Gx91fnUqSvyeiXvKNk/y5w== X-CSE-MsgGUID: YG7Qi/RUSpKmK2Yfobdq7w== X-IronPort-AV: E=McAfee;i="6800,10657,11548"; a="62402795" X-IronPort-AV: E=Sophos;i="6.18,253,1751266800"; d="scan'208";a="62402795" Received: from fmviesa002.fm.intel.com ([10.60.135.142]) by fmvoesa107.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2025 19:37:37 -0700 X-CSE-ConnectionGUID: 36X9HAdyTACBq/aJyKqQ2A== X-CSE-MsgGUID: XsxdeO6gQb+hBUZjF96CBQ== X-ExtLoop1: 1 X-IronPort-AV: E=Sophos;i="6.18,253,1751266800"; d="scan'208";a="196930562" Received: from unknown (HELO gnr-sp-2s-612.sh.intel.com) ([10.112.230.229]) by fmviesa002-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 09 Sep 2025 19:37:34 -0700 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, mark.gross@intel.com, arjan.van.de.ven@intel.com, Zhenzhong Duan Subject: [PATCH 2/5] vfio/iommufd: Query dirty bitmap before DMA unmap Date: Tue, 9 Sep 2025 22:36:58 -0400 Message-ID: <20250910023701.244356-3-zhenzhong.duan@intel.com> X-Mailer: git-send-email 2.47.1 In-Reply-To: <20250910023701.244356-1-zhenzhong.duan@intel.com> References: <20250910023701.244356-1-zhenzhong.duan@intel.com> MIME-Version: 1.0 Content-Transfer-Encoding: 8bit Received-SPF: pass client-ip=192.198.163.13; envelope-from=zhenzhong.duan@intel.com; helo=mgamail.intel.com X-Spam_score_int: -43 X-Spam_score: -4.4 X-Spam_bar: ---- X-Spam_report: (-4.4 / 5.0 requ) BAYES_00=-1.9, DKIMWL_WL_HIGH=-0.001, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, DKIM_VALID_EF=-0.1, RCVD_IN_DNSWL_MED=-2.3, RCVD_IN_VALIDITY_RPBL_BLOCKED=0.001, RCVD_IN_VALIDITY_SAFE_BLOCKED=0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001 autolearn=ham autolearn_force=no X-Spam_action: no action X-BeenThere: qemu-devel@nongnu.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org Sender: qemu-devel-bounces+qemu-devel=archiver.kernel.org@nongnu.org When a 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 Tested-by: Xudong Hao Tested-by: Giovannio Cabiddu --- hw/vfio/iommufd.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/hw/vfio/iommufd.c b/hw/vfio/iommufd.c index b5d6e54c45..0057488ce9 100644 --- a/hw/vfio/iommufd.c +++ b/hw/vfio/iommufd.c @@ -73,7 +73,13 @@ static int iommufd_cdev_unmap_one(const VFIOContainerBase *bcontainer, 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 */ + ret = vfio_container_query_dirty_bitmap(bcontainer, iova, size, + iotlb->translated_addr, + &local_err); + if (ret) { + error_report_err(local_err); + } + /* Unmap stale mapping even if query dirty bitmap fails */ return iommufd_backend_unmap_dma(be, ioas_id, iova, size); } -- 2.47.1