On Fri, 28 Aug 2020 at 00:34, Tom Murphy murphyt7@tcd.ie wrote:
On Thu, 27 Aug 2020 at 22:36, Logan Gunthorpe logang@deltatee.com wrote:
On 2020-08-23 6:04 p.m., Tom Murphy wrote:
I have added a check for the sg_dma_len == 0 : """ } __sgt_iter(struct scatterlist *sgl, bool dma) { struct sgt_iter s = { .sgp = sgl };
if (sgl && sg_dma_len(sgl) == 0)
s.sgp = NULL; if (s.sgp) { .....
""" at location [1]. but it doens't fix the problem.
Based on my read of the code, it looks like we also need to change usage of sgl->length... Something like the rough patch below, maybe?
Also, Tom, do you have an updated version of the patchset to convert the Intel IOMMU to dma-iommu available? The last one I've found doesn't apply cleanly (I'm assuming parts of it have been merged in slightly modified forms).
I'll try and post one in the next 24hours
I have just posted this now: The subject of the cover letter is: "[PATCH V2 0/5] Convert the intel iommu driver to the dma-iommu api"
Thanks,
Logan
--
diff --git a/drivers/gpu/drm/i915/i915_scatterlist.h b/drivers/gpu/drm/i915/i915 index b7b59328cb76..9367ac801f0c 100644 --- a/drivers/gpu/drm/i915/i915_scatterlist.h +++ b/drivers/gpu/drm/i915/i915_scatterlist.h @@ -27,13 +27,19 @@ static __always_inline struct sgt_iter { } __sgt_iter(struct scatterlist *sgl, bool dma) { struct sgt_iter s = { .sgp = sgl };
if (sgl && !sg_dma_len(s.sgp))
s.sgp = NULL;
if (s.sgp) { s.max = s.curr = s.sgp->offset;
s.max += s.sgp->length;
if (dma)
if (dma) {
s.max += sg_dma_len(s.sgp); s.dma = sg_dma_address(s.sgp);
else
} else {
s.max += s.sgp->length; s.pfn = page_to_pfn(sg_page(s.sgp));
} } return s;