<div dir="ltr"><div dir="ltr">On Sun, 26 Apr 2020 at 18:04, Chun-Kuang Hu <<a href="mailto:chunkuang.hu@kernel.org">chunkuang.hu@kernel.org</a>> wrote:<br></div><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">Hi, Anand:<br>
<br>
Anand K Mistry <<a href="mailto:amistry@chromium.org" target="_blank">amistry@chromium.org</a>> 於 2020年4月20日 週一 下午2:09寫道:<br>
><br>
> If dma_map_sg() merges pages when creating the mapping, only the first<br>
> entries will have a valid sg_dma_address() and sg_dma_len(), followed by<br>
> entries with sg_dma_len() == 0.<br>
><br>
> Signed-off-by: Anand K Mistry <<a href="mailto:amistry@google.com" target="_blank">amistry@google.com</a>><br>
> ---<br>
>  drivers/gpu/drm/mediatek/mtk_drm_gem.c | 3 +++<br>
>  1 file changed, 3 insertions(+)<br>
><br>
> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_gem.c b/drivers/gpu/drm/mediatek/mtk_drm_gem.c<br>
> index b04a3c2b111e09..f8fd8b98c30e3d 100644<br>
> --- a/drivers/gpu/drm/mediatek/mtk_drm_gem.c<br>
> +++ b/drivers/gpu/drm/mediatek/mtk_drm_gem.c<br>
> @@ -224,6 +224,9 @@ struct drm_gem_object *mtk_gem_prime_import_sg_table(struct drm_device *dev,<br>
><br>
>         expected = sg_dma_address(sg->sgl);<br>
>         for_each_sg(sg->sgl, s, sg->nents, i) {<br>
> +               if (!sg_dma_len(s))<br>
> +                       break;<br>
<br>
I think this should be 'continue'<br></blockquote><div><br></div>scatterlist.h has the comment:<br>/*<br> * These macros should be used after a dma_map_sg call has been done<br> * to get bus addresses of each of the SG entries and their lengths.<br> * You should only work with the number of sg entries dma_map_sg<br> * returns, or alternatively stop on the first sg_dma_len(sg) which<br> * is 0.<br> */<div> </div><div>So breaking on the first sg_dma_len(sg) == 0 appears to be (one of) the documented approach.</div><div><br></div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left:1px solid rgb(204,204,204);padding-left:1ex">
<br>
Regards,<br>
Chun-Kuang.<br>
<br>
> +<br>
>                 if (sg_dma_address(s) != expected) {<br>
>                         DRM_ERROR("sg_table is not contiguous");<br>
>                         ret = -EINVAL;<br>
> --<br>
> 2.26.1.301.g55bc3eb7cb9-goog<br>
><br>
><br>
> _______________________________________________<br>
> Linux-mediatek mailing list<br>
> <a href="mailto:Linux-mediatek@lists.infradead.org" target="_blank">Linux-mediatek@lists.infradead.org</a><br>
> <a href="http://lists.infradead.org/mailman/listinfo/linux-mediatek" rel="noreferrer" target="_blank">http://lists.infradead.org/mailman/listinfo/linux-mediatek</a><br>
</blockquote></div></div>