Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux

drm/udl: handle page mapping in dmabuf export.

Fixes dmabuf export failure with -E_NOMEM when the page is not mapped.

Signed-off-by: Haixia Shi <hshi@chromium.org>
Reviewed-by: Stéphane Marchesin <marcheu@chromium.org>
Signed-off-by: Dave Airlie <airlied@redhat.com>

authored by

Haixia Shi and committed by
Dave Airlie
4bc158e0 0a3d775f

+9 -4
+5 -2
drivers/gpu/drm/udl/udl_dmabuf.c
··· 90 90 return &udl_attach->sgt; 91 91 92 92 if (!obj->pages) { 93 - DRM_ERROR("pages is null.\n"); 94 - return ERR_PTR(-ENOMEM); 93 + ret = udl_gem_get_pages(obj); 94 + if (ret) { 95 + DRM_ERROR("failed to map pages.\n"); 96 + return ERR_PTR(ret); 97 + } 95 98 } 96 99 97 100 page_count = obj->base.size / PAGE_SIZE;
+2
drivers/gpu/drm/udl/udl_drv.h
··· 129 129 struct drm_gem_object *udl_gem_prime_import(struct drm_device *dev, 130 130 struct dma_buf *dma_buf); 131 131 132 + int udl_gem_get_pages(struct udl_gem_object *obj); 133 + void udl_gem_put_pages(struct udl_gem_object *obj); 132 134 int udl_gem_vmap(struct udl_gem_object *obj); 133 135 void udl_gem_vunmap(struct udl_gem_object *obj); 134 136 int udl_drm_gem_mmap(struct file *filp, struct vm_area_struct *vma);
+2 -2
drivers/gpu/drm/udl/udl_gem.c
··· 127 127 } 128 128 } 129 129 130 - static int udl_gem_get_pages(struct udl_gem_object *obj) 130 + int udl_gem_get_pages(struct udl_gem_object *obj) 131 131 { 132 132 struct page **pages; 133 133 ··· 143 143 return 0; 144 144 } 145 145 146 - static void udl_gem_put_pages(struct udl_gem_object *obj) 146 + void udl_gem_put_pages(struct udl_gem_object *obj) 147 147 { 148 148 if (obj->base.import_attach) { 149 149 drm_free_large(obj->pages);