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 kanga.kvack.org (kanga.kvack.org [205.233.56.17]) (using TLSv1 with cipher DHE-RSA-AES256-SHA (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id AF23CCA100B for ; Tue, 2 Sep 2025 14:49:13 +0000 (UTC) Received: by kanga.kvack.org (Postfix) id 173F88E0013; Tue, 2 Sep 2025 10:49:13 -0400 (EDT) Received: by kanga.kvack.org (Postfix, from userid 40) id 14C238E0007; Tue, 2 Sep 2025 10:49:13 -0400 (EDT) X-Delivered-To: int-list-linux-mm@kvack.org Received: by kanga.kvack.org (Postfix, from userid 63042) id 089EA8E0013; Tue, 2 Sep 2025 10:49:13 -0400 (EDT) X-Delivered-To: linux-mm@kvack.org Received: from relay.hostedemail.com (smtprelay0012.hostedemail.com [216.40.44.12]) by kanga.kvack.org (Postfix) with ESMTP id EC9458E0007 for ; Tue, 2 Sep 2025 10:49:12 -0400 (EDT) Received: from smtpin27.hostedemail.com (a10.router.float.18 [10.200.18.1]) by unirelay08.hostedemail.com (Postfix) with ESMTP id 8BB3314021A for ; Tue, 2 Sep 2025 14:49:12 +0000 (UTC) X-FDA: 83844592944.27.B58D3BD Received: from tor.source.kernel.org (tor.source.kernel.org [172.105.4.254]) by imf27.hostedemail.com (Postfix) with ESMTP id 076E64000A for ; Tue, 2 Sep 2025 14:49:10 +0000 (UTC) Authentication-Results: imf27.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=U0Qv8COD; spf=pass (imf27.hostedemail.com: domain of leon@kernel.org designates 172.105.4.254 as permitted sender) smtp.mailfrom=leon@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=hostedemail.com; s=arc-20220608; t=1756824551; h=from:from:sender:reply-to:subject:subject:date:date: message-id:message-id:to:to:cc:cc:mime-version:mime-version: content-type:content-transfer-encoding:content-transfer-encoding: in-reply-to:in-reply-to:references:references:dkim-signature; bh=KfgzUojTM/DB/MYkk7DA2Hi+SCW1x3wlstgTHhLqb3I=; b=w+QyUGZPlqB/fCCkAecK7NBulrj1YEqs9Fez3SL9iNREva4jX59uXG48M8KL5YMVXOFaCB 1+WEhKHnweo6L9xvU/pwRoKIpQAnwWwVzWsTiTVH26sMvBmUrcwjytvD4NXfiWGgP1Xj7C d1NTKk1561tGsU2YUeNwJbYF0r2HLRY= ARC-Authentication-Results: i=1; imf27.hostedemail.com; dkim=pass header.d=kernel.org header.s=k20201202 header.b=U0Qv8COD; spf=pass (imf27.hostedemail.com: domain of leon@kernel.org designates 172.105.4.254 as permitted sender) smtp.mailfrom=leon@kernel.org; dmarc=pass (policy=quarantine) header.from=kernel.org ARC-Seal: i=1; s=arc-20220608; d=hostedemail.com; t=1756824551; a=rsa-sha256; cv=none; b=dzTPxWYuSj0TUo1otmTbYgxPA++k2GMUwk8Jd3aCJF6tzr5XRPjoO4KYp13bckvnMrrghS GC/2obZ3yun9ibPbtzpl3YkmdC6xLsRCRLKyq5d81+h+Ce/XjgeJeFtONOPsr8Bd6Ut6Iu H2w1NBE3c+SSXcBtK5of0zigPrbiILc= Received: from smtp.kernel.org (transwarp.subspace.kernel.org [100.75.92.58]) by tor.source.kernel.org (Postfix) with ESMTP id 272106021C; Tue, 2 Sep 2025 14:49:10 +0000 (UTC) Received: by smtp.kernel.org (Postfix) with ESMTPSA id 2C5C6C4CEED; Tue, 2 Sep 2025 14:49:09 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1756824549; bh=mXPBKGOTAXMaA8YnIACrT4VeK6ColaZH6f/lOi0T5+M=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=U0Qv8COD9vJg/sj1gHJxX08tsa8mkqMwlswZW+JY7U0WZ8zpN+E0gqojH+zijJe4+ GuuBOfJJ7E92NxE/euEVPxir80asPMfJZGfrlBFEkkFiMxs1fGRxbBrARGWJDsvYEz 0KVNHATZmZLhqAH2lHu7WLDB7F7EQbI17lR4MqOQH/5s2HbhqrH3xM/s+mDuyDQQmx m02cD9zShxiSGxZ84PSZ2YclbBHgJpT4c2BpGr1yygJDBWMAsAnP+j3X0VDKrUyWPN 1KTnwLeTF/x2Orxw9fuAs97O/ssJyp2QOTAnt7oAnZkpfXEk2bpm2MqXqfbqd52vql XZaWqMxq2z8vg== From: Leon Romanovsky To: Marek Szyprowski Cc: Leon Romanovsky , Jason Gunthorpe , Abdiel Janulgue , Alexander Potapenko , Alex Gaynor , Andrew Morton , Christoph Hellwig , Danilo Krummrich , David Hildenbrand , iommu@lists.linux.dev, Jason Wang , Jens Axboe , Joerg Roedel , Jonathan Corbet , Juergen Gross , kasan-dev@googlegroups.com, Keith Busch , linux-block@vger.kernel.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-mm@kvack.org, linux-nvme@lists.infradead.org, linuxppc-dev@lists.ozlabs.org, linux-trace-kernel@vger.kernel.org, Madhavan Srinivasan , Masami Hiramatsu , Michael Ellerman , "Michael S. Tsirkin" , Miguel Ojeda , Robin Murphy , rust-for-linux@vger.kernel.org, Sagi Grimberg , Stefano Stabellini , Steven Rostedt , virtualization@lists.linux.dev, Will Deacon , xen-devel@lists.xenproject.org Subject: [PATCH v5 02/16] iommu/dma: implement DMA_ATTR_MMIO for dma_iova_link(). Date: Tue, 2 Sep 2025 17:48:39 +0300 Message-ID: <5a279b1ce492ba8635eb3fa6bb9a22fd77366672.1756822782.git.leon@kernel.org> X-Mailer: git-send-email 2.50.1 In-Reply-To: References: MIME-Version: 1.0 Content-Transfer-Encoding: 8bit X-Rspamd-Queue-Id: 076E64000A X-Rspam-User: X-Stat-Signature: 7gzbwjrz9k3xowxtyfi6a1e6zzdp4wct X-Rspamd-Server: rspam09 X-HE-Tag: 1756824550-487642 X-HE-Meta: U2FsdGVkX18OGuk5tdpCcOrgyr3+F3+mQViaVEmODlMWKoSW7I6qZg624QZc2VO/BYJ08YCqDbGGXwZ9cvSmSpHYbFIjCVR8Ll6t9znPQLuD53EeKEHvZG5QLESLyxagiPdvZTSjfJnjZ61sR2lk9niYEN1M/VyTblWIvaOVLkd2ZWARuSdw0lPCBHcyHK+rydXvYiHxYf/ihXXBK7UU1xQrSBf4zVS6zvN65KGZq1NBJ4WTgylCyqVVtgaRd07/Q77DUYio6WjvzFQ+lpLh9S8opRmUnfD4JJ5+ep8m/C6vvDrR4QuwrpzCf/YK6tCna3voNNWEu7mzSkrYd+Wlmg04Sr77MKZH1e0edzb4s6bVDk7+cP0Y0uw2CGpxM7vzh9Gi8RXxT7i6wwYz4Z4QXJ6yoYvHa93cYZiCSNH6IN9mvsFZVuPPijpUmtUYg+0V3dzCQ+oNB+f2Eyw01RqroQzpa4HCzoHKS0vCB/9YeGag/QiHtZx0zRWLHcnHNppS8iud4rSsaxkjRkyj1itnyv9gGBhIxp8Q6gACNHmzKtnfCdlK/zcLPX5guQX/xjwPquL9b1iC+5LcLgklDN6xlz2K/uZAi3dDUbtmTbnWwvWLv9/xcaUQremX/HOQELP0ggIhvu7YK6ZEBfbcp4j5mY7CNSyyWfOkU2wR5WQCxsRSZ8ab6sYuz+Vehomo6ziPBkBve/Oi96Dz9muRRoeqWRG5+S1Kev/oqypKSEz6ZjoGv+NgVIZBwUtmUwt/+y2+JrDGNnydKXlItwwj4L37F3byVh87i7i1qpmpo8rOTvNOhpWVeyvi8olkVt6mfQvJvXV+1XYZo0qsLC2bAfsn3VBaBoqu4TJ6rru70Eso6WIRkoEm6+iIAoYW/wK6EBB3fvv7nw0+lFMolPpefotbF/wE7CbJFdP4d/P9N0Ib1ZOzgeJmj2owfA07g12dEyyr07xI900Pctf/FQjX3it QmVBcs3B vHEILsitYk990cRiuKTCeVe1HjHYfN2NAF/T2+SHu0YsRRe/mjWVKdOk3aabqcNY2qEZQODBYYJcoMmdzrEYZtimgJLlFOnjM7gTY/AJhv50aloN6jYK+zjqLX6+lx2ES6S9WmYuw+JMp13RCl2o1m3iZ6td+u4ZXXH+kzTfuy/HDF+6ZwuJmT54SbGhmi03Dh2gnAWqXFVaUNSgGyFqWpm4yeSuSmqKFUiIMq4mMMBhDrDr0WpHbNbpFT9VeZ2eNjdtyQBqw4qLJ5mz9EKKdiHQZZsZtB/uNQ9JsMHgUFQE3g1/FHXuKpUg8ow/i9TZAbKbH5YnHmO8dJS78ftORsR5cuztYMzzsdA2e X-Bogosity: Ham, tests=bogofilter, spamicity=0.000000, version=1.2.4 Sender: owner-linux-mm@kvack.org Precedence: bulk X-Loop: owner-majordomo@kvack.org List-ID: List-Subscribe: List-Unsubscribe: From: Leon Romanovsky This will replace the hacky use of DMA_ATTR_SKIP_CPU_SYNC to avoid touching the possibly non-KVA MMIO memory. Also correct the incorrect caching attribute for the IOMMU, MMIO memory should not be cachable inside the IOMMU mapping or it can possibly create system problems. Set IOMMU_MMIO for DMA_ATTR_MMIO. Reviewed-by: Jason Gunthorpe Signed-off-by: Leon Romanovsky --- drivers/iommu/dma-iommu.c | 18 ++++++++++++++---- 1 file changed, 14 insertions(+), 4 deletions(-) diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c index ea2ef53bd4fe..e1185ba73e23 100644 --- a/drivers/iommu/dma-iommu.c +++ b/drivers/iommu/dma-iommu.c @@ -724,7 +724,12 @@ static int iommu_dma_init_domain(struct iommu_domain *domain, struct device *dev static int dma_info_to_prot(enum dma_data_direction dir, bool coherent, unsigned long attrs) { - int prot = coherent ? IOMMU_CACHE : 0; + int prot; + + if (attrs & DMA_ATTR_MMIO) + prot = IOMMU_MMIO; + else + prot = coherent ? IOMMU_CACHE : 0; if (attrs & DMA_ATTR_PRIVILEGED) prot |= IOMMU_PRIV; @@ -1838,12 +1843,13 @@ static int __dma_iova_link(struct device *dev, dma_addr_t addr, unsigned long attrs) { bool coherent = dev_is_dma_coherent(dev); + int prot = dma_info_to_prot(dir, coherent, attrs); - if (!coherent && !(attrs & DMA_ATTR_SKIP_CPU_SYNC)) + if (!coherent && !(attrs & (DMA_ATTR_SKIP_CPU_SYNC | DMA_ATTR_MMIO))) arch_sync_dma_for_device(phys, size, dir); return iommu_map_nosync(iommu_get_dma_domain(dev), addr, phys, size, - dma_info_to_prot(dir, coherent, attrs), GFP_ATOMIC); + prot, GFP_ATOMIC); } static int iommu_dma_iova_bounce_and_link(struct device *dev, dma_addr_t addr, @@ -1949,9 +1955,13 @@ int dma_iova_link(struct device *dev, struct dma_iova_state *state, return -EIO; if (dev_use_swiotlb(dev, size, dir) && - iova_unaligned(iovad, phys, size)) + iova_unaligned(iovad, phys, size)) { + if (attrs & DMA_ATTR_MMIO) + return -EPERM; + return iommu_dma_iova_link_swiotlb(dev, state, phys, offset, size, dir, attrs); + } return __dma_iova_link(dev, state->addr + offset - iova_start_pad, phys - iova_start_pad, -- 2.50.1