From: Lucas Stach Date: Wed, 30 Nov 2016 14:26:26 +0000 (+0100) Subject: drm/etnaviv: fix gem_prime_get_sg_table to return new SG table X-Git-Tag: v4.10-rc1~154^2~15^2~3 X-Git-Url: http://git.samba.org/samba.git/?a=commitdiff_plain;h=5f4a4a73f437b007019495c3c789599d71b9c59e;p=sfrench%2Fcifs-2.6.git drm/etnaviv: fix gem_prime_get_sg_table to return new SG table The object internal SG table must not be returned, as the caller will take ownership of the returned table. Construct a new table from the object pages and return this one instead. Signed-off-by: Lucas Stach --- diff --git a/drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c b/drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c index 7e8fdb1859dd..62b47972a52e 100644 --- a/drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c +++ b/drivers/gpu/drm/etnaviv/etnaviv_gem_prime.c @@ -23,10 +23,12 @@ struct sg_table *etnaviv_gem_prime_get_sg_table(struct drm_gem_object *obj) { struct etnaviv_gem_object *etnaviv_obj = to_etnaviv_bo(obj); + int npages = obj->size >> PAGE_SHIFT; - BUG_ON(!etnaviv_obj->sgt); /* should have already pinned! */ + if (WARN_ON(!etnaviv_obj->pages)) /* should have already pinned! */ + return NULL; - return etnaviv_obj->sgt; + return drm_prime_pages_to_sg(etnaviv_obj->pages, npages); } void *etnaviv_gem_prime_vmap(struct drm_gem_object *obj)