From nobody Thu Oct 2 21:40:07 2025 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 A39351D5146; Thu, 11 Sep 2025 11:33:49 +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=1757590429; cv=none; b=J8rFfN0fMdRiWX3HGXG/ZH16SLtIVdZhsGpQt9b3nsNmlGiQdtKfS0SMXVoEUE2jWcuEO13icPDAUcwCi9GlNi/Sh3m2gcac6gYaxAFexp/P3HT7I5xEQHn1Xr/uZKFAXEBgB1nYyQ9dEYkpLsALReBPtNwzmZWyYwrqZaN6k5k= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757590429; c=relaxed/simple; bh=LldS4UL7ZlxQUaPAsaNZtO9N1rGFM0ivWFvFz+2VF14=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=eCzQYjFfy4CRXjEs7OBJzKOGKcAsT3hA9PetPj5Mq3DHY17aEyMVLpaXLYVJLmOiX86YU1TyCerrnOeE42WTRaSnEZyKTk38ejIFlVISzoTv26evQbAvrCrXbSASrrUb6KYX03MQaIpQG9ZZucikvX1tzBin1bln7uRb7Sb1vNg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=kernel.org header.i=@kernel.org header.b=tEhGjanb; 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="tEhGjanb" Received: by smtp.kernel.org (Postfix) with ESMTPSA id C97B2C4CEF1; Thu, 11 Sep 2025 11:33:48 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1757590429; bh=LldS4UL7ZlxQUaPAsaNZtO9N1rGFM0ivWFvFz+2VF14=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=tEhGjanbuu0QU4sUBUSidfb0VG5s2MoYJlC/z3ojPIZ+oodrsfgopYPiSVx/9AoFa nWEJSXlTVHyGSPuC8e4j3/5uE40ZYkF9/bZ+7v+TK9XQHe6Tln0P+nQ8UbQuoxiLZ+ FZBpVNuNJEjC0EH2IJaq3/5hH8Kai9Fn7otuWVp5zxSZ5LijoMW/v6kG+c8arkw8Ce 0ZkGEXMaGVoyCa/aN3HSCLK8G4pBw2sIUVazUi9PWDBlQqFE7CAwveihbb8Cyw1O02 kQBUbBuqXLZB5QXGbK79GQF7X7AyOs7of1c1qIS792JTEIscJjN7CRnXGBrKt1XuLU WydIw7KydrlTw== From: Leon Romanovsky To: Alex Williamson Cc: Leon Romanovsky , Jason Gunthorpe , Andrew Morton , Bjorn Helgaas , =?UTF-8?q?Christian=20K=C3=B6nig?= , dri-devel@lists.freedesktop.org, iommu@lists.linux.dev, Jens Axboe , Joerg Roedel , kvm@vger.kernel.org, linaro-mm-sig@lists.linaro.org, linux-block@vger.kernel.org, linux-kernel@vger.kernel.org, linux-media@vger.kernel.org, linux-mm@kvack.org, linux-pci@vger.kernel.org, Logan Gunthorpe , Marek Szyprowski , Robin Murphy , Sumit Semwal , Vivek Kasireddy , Will Deacon Subject: [PATCH v2 02/10] PCI/P2PDMA: Simplify bus address mapping API Date: Thu, 11 Sep 2025 14:33:06 +0300 Message-ID: <59e073a3dcb01bb70240fc95c2f13f30ed6b6e55.1757589589.git.leon@kernel.org> X-Mailer: git-send-email 2.51.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" From: Leon Romanovsky Update the pci_p2pdma_bus_addr_map() function to take a direct pointer to the p2pdma_provider structure instead of the pci_p2pdma_map_state. This simplifies the API by removing the need for callers to extract the provider from the state structure. The change updates all callers across the kernel (block layer, IOMMU, DMA direct, and HMM) to pass the provider pointer directly, making the code more explicit and reducing unnecessary indirection. This also removes the runtime warning check since callers now have direct control over which provider they use. Signed-off-by: Leon Romanovsky --- block/blk-mq-dma.c | 2 +- drivers/iommu/dma-iommu.c | 4 ++-- include/linux/pci-p2pdma.h | 7 +++---- kernel/dma/direct.c | 4 ++-- mm/hmm.c | 2 +- 5 files changed, 9 insertions(+), 10 deletions(-) diff --git a/block/blk-mq-dma.c b/block/blk-mq-dma.c index d415088ed9fd2..430e51ec494a6 100644 --- a/block/blk-mq-dma.c +++ b/block/blk-mq-dma.c @@ -79,7 +79,7 @@ static inline bool blk_can_dma_map_iova(struct request *r= eq, =20 static bool blk_dma_map_bus(struct blk_dma_iter *iter, struct phys_vec *ve= c) { - iter->addr =3D pci_p2pdma_bus_addr_map(&iter->p2pdma, vec->paddr); + iter->addr =3D pci_p2pdma_bus_addr_map(iter->p2pdma.mem, vec->paddr); iter->len =3D vec->len; return true; } diff --git a/drivers/iommu/dma-iommu.c b/drivers/iommu/dma-iommu.c index 7944a3af4545e..e52d19d2e8334 100644 --- a/drivers/iommu/dma-iommu.c +++ b/drivers/iommu/dma-iommu.c @@ -1439,8 +1439,8 @@ int iommu_dma_map_sg(struct device *dev, struct scatt= erlist *sg, int nents, * as a bus address, __finalise_sg() will copy the dma * address into the output segment. */ - s->dma_address =3D pci_p2pdma_bus_addr_map(&p2pdma_state, - sg_phys(s)); + s->dma_address =3D pci_p2pdma_bus_addr_map( + p2pdma_state.mem, sg_phys(s)); sg_dma_len(s) =3D sg->length; sg_dma_mark_bus_address(s); continue; diff --git a/include/linux/pci-p2pdma.h b/include/linux/pci-p2pdma.h index 27a2c399f47da..eef96636c67e6 100644 --- a/include/linux/pci-p2pdma.h +++ b/include/linux/pci-p2pdma.h @@ -186,16 +186,15 @@ pci_p2pdma_state(struct pci_p2pdma_map_state *state, = struct device *dev, /** * pci_p2pdma_bus_addr_map - Translate a physical address to a bus address * for a PCI_P2PDMA_MAP_BUS_ADDR transfer. - * @state: P2P state structure + * @provider: P2P provider structure * @paddr: physical address to map * * Map a physically contiguous PCI_P2PDMA_MAP_BUS_ADDR transfer. */ static inline dma_addr_t -pci_p2pdma_bus_addr_map(struct pci_p2pdma_map_state *state, phys_addr_t pa= ddr) +pci_p2pdma_bus_addr_map(struct p2pdma_provider *provider, phys_addr_t padd= r) { - WARN_ON_ONCE(state->map !=3D PCI_P2PDMA_MAP_BUS_ADDR); - return paddr + state->mem->bus_offset; + return paddr + provider->bus_offset; } =20 #endif /* _LINUX_PCI_P2P_H */ diff --git a/kernel/dma/direct.c b/kernel/dma/direct.c index 1062caac47e7b..3e058c99fe856 100644 --- a/kernel/dma/direct.c +++ b/kernel/dma/direct.c @@ -484,8 +484,8 @@ int dma_direct_map_sg(struct device *dev, struct scatte= rlist *sgl, int nents, } break; case PCI_P2PDMA_MAP_BUS_ADDR: - sg->dma_address =3D pci_p2pdma_bus_addr_map(&p2pdma_state, - sg_phys(sg)); + sg->dma_address =3D pci_p2pdma_bus_addr_map( + p2pdma_state.mem, sg_phys(sg)); sg_dma_mark_bus_address(sg); continue; default: diff --git a/mm/hmm.c b/mm/hmm.c index 6556c0e074ba8..012b78688fa18 100644 --- a/mm/hmm.c +++ b/mm/hmm.c @@ -751,7 +751,7 @@ dma_addr_t hmm_dma_map_pfn(struct device *dev, struct h= mm_dma_map *map, break; case PCI_P2PDMA_MAP_BUS_ADDR: pfns[idx] |=3D HMM_PFN_P2PDMA_BUS | HMM_PFN_DMA_MAPPED; - return pci_p2pdma_bus_addr_map(p2pdma_state, paddr); + return pci_p2pdma_bus_addr_map(p2pdma_state->mem, paddr); default: return DMA_MAPPING_ERROR; } --=20 2.51.0