From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from smtp.kernel.org (aws-us-west-2-korg-mail-1.web.codeaurora.org [10.30.226.201]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 35DCA2E62C4; Wed, 11 Mar 2026 19:09:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=10.30.226.201 ARC-Seal:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773256164; cv=none; b=slSUUojRqrlLaT5GkvtfCTeBJJeuRatTS6JeDqRQ0p8BavW4DyBV56RfvUkVh/hFG/CrWmBoQoB3lwUnBOXHFuMIIZWri4j2ltFcn9+vsF13aZPFEHbxPvKpr1w+fHalDiIgNRd0EdLLmhFV+Qzr7V0Dm5JpgTKDWKu/K24R3Fo= ARC-Message-Signature:i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1773256164; c=relaxed/simple; bh=0UoS5bXBagSWSjZg7zeW+3A+vnJkjeQqWbOv9i9THFE=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version:Content-Type; b=UCDdqz9wHcL8f4P9ZC+8kAHacF/zwC1SfsS6Dju6Nk+YkMtflGtbzM4TsrjPbjVA/p8+Kr7Cez67ALGKCulnyzINsjaIfftK7DmLYo0rRFswz5+jrwcVi/79FBGq9Zd8VdeIwF69wteaMErMM53VVen+HB0aIsZNWGOS+6I12cE= ARC-Authentication-Results:i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=LbG1uNUg; arc=none smtp.client-ip=10.30.226.201 Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b="LbG1uNUg" Received: by smtp.kernel.org (Postfix) with ESMTPSA id 11621C4CEF7; Wed, 11 Mar 2026 19:09:23 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1773256163; bh=0UoS5bXBagSWSjZg7zeW+3A+vnJkjeQqWbOv9i9THFE=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=LbG1uNUgq/sPRE98pW+ZT3GTFULJ3gWkdpAIhlzPdLfdX5pxbYb4ITlF1lhbKP6iq MQghWEVT49xo+z6Jd1VwWinJTQF25MNokpn8ET2N3EwR8syaKhSSHoWafZm52xyvQM 0KkhwoP8HpVYEKOfw6TefQuqKlcbeGxQQdMP7j/xhwru4WpEu1Rq/0kN0tmpmcvwCU K2zLd56Qbc+IV0Qp0sp9JYawQz8u83W38bdwA8Pab+Bwk2cIXDM+qCJB+/qWhFf4sT 3aEVAVELkWJ8vkKSvt+0Kot1TRelXPsq7crc7VKcS9VDPgF8WwzsW+jpN/wXdaYTuh MNcha2q9yYS6w== From: Leon Romanovsky To: Marek Szyprowski , Robin Murphy , "Michael S. Tsirkin" , Petr Tesarik , Jonathan Corbet , Shuah Khan , Jason Wang , Xuan Zhuo , =?utf-8?q?Eugenio_P=C3=A9rez?= , Jason Gunthorpe , Leon Romanovsky , Steven Rostedt , Masami Hiramatsu , Mathieu Desnoyers , Joerg Roedel , Will Deacon , Andrew Morton Cc: iommu@lists.linux.dev, linux-kernel@vger.kernel.org, linux-doc@vger.kernel.org, virtualization@lists.linux.dev, linux-rdma@vger.kernel.org, linux-trace-kernel@vger.kernel.org, linux-mm@kvack.org Subject: [PATCH v2 8/8] mm/hmm: Indicate that HMM requires DMA coherency Date: Wed, 11 Mar 2026 21:08:51 +0200 Message-ID: <20260311-dma-debug-overlap-v2-8-e00bc2ca346d@nvidia.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: <20260311-dma-debug-overlap-v2-0-e00bc2ca346d@nvidia.com> References: <20260311-dma-debug-overlap-v2-0-e00bc2ca346d@nvidia.com> Precedence: bulk X-Mailing-List: virtualization@lists.linux.dev List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" X-Mailer: b4 0.15-dev-18f8f Content-Transfer-Encoding: 8bit From: Leon Romanovsky HMM mirroring can work on coherent systems without SWIOTLB path only. Until introduction of DMA_ATTR_REQUIRE_COHERENT, there was no reliable way to indicate that and various approximation was done: int hmm_dma_map_alloc(struct device *dev, struct hmm_dma_map *map, size_t nr_entries, size_t dma_entry_size) { <...> /* * The HMM API violates our normal DMA buffer ownership rules and can't * transfer buffer ownership. The dma_addressing_limited() check is a * best approximation to ensure no swiotlb buffering happens. */ dma_need_sync = !dev->dma_skip_sync; if (dma_need_sync || dma_addressing_limited(dev)) return -EOPNOTSUPP; So let's mark mapped buffers with DMA_ATTR_REQUIRE_COHERENT attribute to prevent DMA debugging warnings for cache overlapped entries. Signed-off-by: Leon Romanovsky --- mm/hmm.c | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mm/hmm.c b/mm/hmm.c index f6c4ddff4bd61..5955f2f0c83db 100644 --- a/mm/hmm.c +++ b/mm/hmm.c @@ -778,7 +778,7 @@ dma_addr_t hmm_dma_map_pfn(struct device *dev, struct hmm_dma_map *map, struct page *page = hmm_pfn_to_page(pfns[idx]); phys_addr_t paddr = hmm_pfn_to_phys(pfns[idx]); size_t offset = idx * map->dma_entry_size; - unsigned long attrs = 0; + unsigned long attrs = DMA_ATTR_REQUIRE_COHERENT; dma_addr_t dma_addr; int ret; @@ -871,7 +871,7 @@ bool hmm_dma_unmap_pfn(struct device *dev, struct hmm_dma_map *map, size_t idx) struct dma_iova_state *state = &map->state; dma_addr_t *dma_addrs = map->dma_list; unsigned long *pfns = map->pfn_list; - unsigned long attrs = 0; + unsigned long attrs = DMA_ATTR_REQUIRE_COHERENT; if ((pfns[idx] & valid_dma) != valid_dma) return false; -- 2.53.0