diff mbox series

[v9,11/32] drm: mediatek: use common helper for extracting pages array

Message ID 20200826063316.23486-12-m.szyprowski@samsung.com
State Superseded
Headers show
Series DRM: fix struct sg_table nents vs. orig_nents misuse | expand

Commit Message

Marek Szyprowski Aug. 26, 2020, 6:32 a.m. UTC
Use common helper for converting a sg_table object into struct
page pointer array.

Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>

---
 drivers/gpu/drm/mediatek/mtk_drm_gem.c | 9 ++-------
 1 file changed, 2 insertions(+), 7 deletions(-)

-- 
2.17.1

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel

Comments

Robin Murphy Sept. 1, 2020, 6:54 p.m. UTC | #1
On 2020-08-26 07:32, Marek Szyprowski wrote:
> Use common helper for converting a sg_table object into struct

> page pointer array.


Reviewed-by: Robin Murphy <robin.murphy@arm.com>


Side note: is mtk_drm_gem_prime_vmap() missing a call to 
sg_free_table(sgt) before its kfree(sgt)?

> Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>

> ---

>   drivers/gpu/drm/mediatek/mtk_drm_gem.c | 9 ++-------

>   1 file changed, 2 insertions(+), 7 deletions(-)

> 

> diff --git a/drivers/gpu/drm/mediatek/mtk_drm_gem.c b/drivers/gpu/drm/mediatek/mtk_drm_gem.c

> index 3654ec732029..0583e557ad37 100644

> --- a/drivers/gpu/drm/mediatek/mtk_drm_gem.c

> +++ b/drivers/gpu/drm/mediatek/mtk_drm_gem.c

> @@ -233,9 +233,7 @@ void *mtk_drm_gem_prime_vmap(struct drm_gem_object *obj)

>   {

>   	struct mtk_drm_gem_obj *mtk_gem = to_mtk_gem_obj(obj);

>   	struct sg_table *sgt;

> -	struct sg_page_iter iter;

>   	unsigned int npages;

> -	unsigned int i = 0;

>   

>   	if (mtk_gem->kvaddr)

>   		return mtk_gem->kvaddr;

> @@ -249,11 +247,8 @@ void *mtk_drm_gem_prime_vmap(struct drm_gem_object *obj)

>   	if (!mtk_gem->pages)

>   		goto out;

>   

> -	for_each_sg_page(sgt->sgl, &iter, sgt->orig_nents, 0) {

> -		mtk_gem->pages[i++] = sg_page_iter_page(&iter);

> -		if (i > npages)

> -			break;

> -	}

> +	drm_prime_sg_to_page_addr_arrays(sgt, mtk_gem->pages, NULL, npages);

> +

>   	mtk_gem->kvaddr = vmap(mtk_gem->pages, npages, VM_MAP,

>   			       pgprot_writecombine(PAGE_KERNEL));

>   

> 

_______________________________________________
dri-devel mailing list
dri-devel@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/dri-devel
Chun-Kuang Hu Sept. 1, 2020, 11:16 p.m. UTC | #2
Robin Murphy <robin.murphy@arm.com> 於 2020年9月2日 週三 上午2:55寫道:
>
> On 2020-08-26 07:32, Marek Szyprowski wrote:
> > Use common helper for converting a sg_table object into struct
> > page pointer array.
>
> Reviewed-by: Robin Murphy <robin.murphy@arm.com>
>
> Side note: is mtk_drm_gem_prime_vmap() missing a call to
> sg_free_table(sgt) before its kfree(sgt)?

Yes, we need another patch to fix that bug, But for this patch,

Acked-by: Chun-Kuang Hu <chunkuang.hu@kernel.org>

>
> > Signed-off-by: Marek Szyprowski <m.szyprowski@samsung.com>
> > ---
> >   drivers/gpu/drm/mediatek/mtk_drm_gem.c | 9 ++-------
> >   1 file changed, 2 insertions(+), 7 deletions(-)
> >
> > diff --git a/drivers/gpu/drm/mediatek/mtk_drm_gem.c b/drivers/gpu/drm/mediatek/mtk_drm_gem.c
> > index 3654ec732029..0583e557ad37 100644
> > --- a/drivers/gpu/drm/mediatek/mtk_drm_gem.c
> > +++ b/drivers/gpu/drm/mediatek/mtk_drm_gem.c
> > @@ -233,9 +233,7 @@ void *mtk_drm_gem_prime_vmap(struct drm_gem_object *obj)
> >   {
> >       struct mtk_drm_gem_obj *mtk_gem = to_mtk_gem_obj(obj);
> >       struct sg_table *sgt;
> > -     struct sg_page_iter iter;
> >       unsigned int npages;
> > -     unsigned int i = 0;
> >
> >       if (mtk_gem->kvaddr)
> >               return mtk_gem->kvaddr;
> > @@ -249,11 +247,8 @@ void *mtk_drm_gem_prime_vmap(struct drm_gem_object *obj)
> >       if (!mtk_gem->pages)
> >               goto out;
> >
> > -     for_each_sg_page(sgt->sgl, &iter, sgt->orig_nents, 0) {
> > -             mtk_gem->pages[i++] = sg_page_iter_page(&iter);
> > -             if (i > npages)
> > -                     break;
> > -     }
> > +     drm_prime_sg_to_page_addr_arrays(sgt, mtk_gem->pages, NULL, npages);
> > +
> >       mtk_gem->kvaddr = vmap(mtk_gem->pages, npages, VM_MAP,
> >                              pgprot_writecombine(PAGE_KERNEL));
> >
> >
diff mbox series

Patch

diff --git a/drivers/gpu/drm/mediatek/mtk_drm_gem.c b/drivers/gpu/drm/mediatek/mtk_drm_gem.c
index 3654ec732029..0583e557ad37 100644
--- a/drivers/gpu/drm/mediatek/mtk_drm_gem.c
+++ b/drivers/gpu/drm/mediatek/mtk_drm_gem.c
@@ -233,9 +233,7 @@  void *mtk_drm_gem_prime_vmap(struct drm_gem_object *obj)
 {
 	struct mtk_drm_gem_obj *mtk_gem = to_mtk_gem_obj(obj);
 	struct sg_table *sgt;
-	struct sg_page_iter iter;
 	unsigned int npages;
-	unsigned int i = 0;
 
 	if (mtk_gem->kvaddr)
 		return mtk_gem->kvaddr;
@@ -249,11 +247,8 @@  void *mtk_drm_gem_prime_vmap(struct drm_gem_object *obj)
 	if (!mtk_gem->pages)
 		goto out;
 
-	for_each_sg_page(sgt->sgl, &iter, sgt->orig_nents, 0) {
-		mtk_gem->pages[i++] = sg_page_iter_page(&iter);
-		if (i > npages)
-			break;
-	}
+	drm_prime_sg_to_page_addr_arrays(sgt, mtk_gem->pages, NULL, npages);
+
 	mtk_gem->kvaddr = vmap(mtk_gem->pages, npages, VM_MAP,
 			       pgprot_writecombine(PAGE_KERNEL));