diff options
author | Logan Gunthorpe <logang@deltatee.com> | 2022-07-08 10:50:58 -0600 |
---|---|---|
committer | Christoph Hellwig <hch@lst.de> | 2022-07-26 07:27:48 -0400 |
commit | c96321834b2f7aa442cf4c076f73d8273e622725 (patch) | |
tree | b248e071c6dfaf3d0eb8ac99f9d653abba98b076 | |
parent | 159bf19270e80b5bc4b13aa88072dcb390b4d297 (diff) | |
download | linux-c96321834b2f7aa442cf4c076f73d8273e622725.tar.bz2 |
iommu: Explicitly skip bus address marked segments in __iommu_map_sg()
In order to support PCI P2PDMA mappings with dma-iommu, explicitly skip
any segments marked with sg_dma_mark_bus_address() in __iommu_map_sg().
These segments should not be mapped into the IOVA and will be handled
separately in as subsequent patch for dma-iommu.
Signed-off-by: Logan Gunthorpe <logang@deltatee.com>
Signed-off-by: Christoph Hellwig <hch@lst.de>
-rw-r--r-- | drivers/iommu/iommu.c | 4 |
1 files changed, 4 insertions, 0 deletions
diff --git a/drivers/iommu/iommu.c b/drivers/iommu/iommu.c index 847ad47a2dfd..2844a3e02a89 100644 --- a/drivers/iommu/iommu.c +++ b/drivers/iommu/iommu.c @@ -2457,6 +2457,9 @@ static ssize_t __iommu_map_sg(struct iommu_domain *domain, unsigned long iova, len = 0; } + if (sg_is_dma_bus_address(sg)) + goto next; + if (len) { len += sg->length; } else { @@ -2464,6 +2467,7 @@ static ssize_t __iommu_map_sg(struct iommu_domain *domain, unsigned long iova, start = s_phys; } +next: if (++i < nents) sg = sg_next(sg); } |