On Wed, 20 May 2020 20:02:32 +0200 Daniel Vetter daniel.vetter@ffwll.ch wrote:
@@ -695,36 +702,16 @@ drm_gem_shmem_prime_import_sg_table(struct drm_device *dev, struct sg_table *sgt) { size_t size = PAGE_ALIGN(attach->dmabuf->size);
size_t npages = size >> PAGE_SHIFT; struct drm_gem_shmem_object *shmem;
int ret;
shmem = drm_gem_shmem_create(dev, size); if (IS_ERR(shmem)) return ERR_CAST(shmem);
shmem->pages = kvmalloc_array(npages, sizeof(struct page *), GFP_KERNEL);
if (!shmem->pages) {
ret = -ENOMEM;
goto err_free_gem;
}
ret = drm_prime_sg_to_page_addr_arrays(sgt, shmem->pages, NULL, npages);
if (ret < 0)
goto err_free_array;
shmem->sgt = sgt;
shmem->pages_use_count = 1; /* Permanently pinned from our point of view */
Keep the above line and that should be good.
DRM_DEBUG_PRIME("size = %zu\n", size);
return &shmem->base;
-err_free_array:
- kvfree(shmem->pages);
-err_free_gem:
- drm_gem_object_put(&shmem->base);
- return ERR_PTR(ret);
} EXPORT_SYMBOL_GPL(drm_gem_shmem_prime_import_sg_table);