>-----Original Message-----
>From: Auld, Matthew <[email protected]>
>Sent: Friday, October 28, 2022 11:50 AM
>To: [email protected]
>Cc: Landwerlin, Lionel G <[email protected]>; Tvrtko Ursulin
><[email protected]>; Ville Syrjälä 
><[email protected]>;
>Ruhl, Michael J <[email protected]>
>Subject: [PATCH v2 1/4] drm/i915/dmabuf: fix sg_table handling in
>map_dma_buf
>
>We need to iterate over the original entries here for the sg_table,
>pulling out the struct page for each one, to be remapped. However
>currently this incorrectly iterates over the final dma mapped entries,
>which is likely just one gigantic sg entry if the iommu is enabled,
>leading to us only mapping the first struct page (and any physically
>contiguous pages following it), even if there is potentially lots more
>data to follow.

I like this patch set a lot better. 😊

Reviewed-by: Michael J. Ruhl <[email protected]>

M

>Closes: https://gitlab.freedesktop.org/drm/intel/-/issues/7306
>Signed-off-by: Matthew Auld <[email protected]>
>Cc: Lionel Landwerlin <[email protected]>
>Cc: Tvrtko Ursulin <[email protected]>
>Cc: Ville Syrjälä <[email protected]>
>Cc: Michael J. Ruhl <[email protected]>
>---
> drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c | 4 ++--
> 1 file changed, 2 insertions(+), 2 deletions(-)
>
>diff --git a/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c
>b/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c
>index 07eee1c09aaf..05ebbdfd3b3b 100644
>--- a/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c
>+++ b/drivers/gpu/drm/i915/gem/i915_gem_dmabuf.c
>@@ -40,13 +40,13 @@ static struct sg_table *i915_gem_map_dma_buf(struct
>dma_buf_attachment *attachme
>               goto err;
>       }
>
>-      ret = sg_alloc_table(st, obj->mm.pages->nents, GFP_KERNEL);
>+      ret = sg_alloc_table(st, obj->mm.pages->orig_nents, GFP_KERNEL);
>       if (ret)
>               goto err_free;
>
>       src = obj->mm.pages->sgl;
>       dst = st->sgl;
>-      for (i = 0; i < obj->mm.pages->nents; i++) {
>+      for (i = 0; i < obj->mm.pages->orig_nents; i++) {
>               sg_set_page(dst, sg_page(src), src->length, 0);
>               dst = sg_next(dst);
>               src = sg_next(src);
>--
>2.37.3

Reply via email to