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>
This commit is contained in:
parent
0a3d775fb2
commit
4bc158e0be
3 changed files with 9 additions and 4 deletions
|
@ -90,8 +90,11 @@ static struct sg_table *udl_map_dma_buf(struct dma_buf_attachment *attach,
|
||||||
return &udl_attach->sgt;
|
return &udl_attach->sgt;
|
||||||
|
|
||||||
if (!obj->pages) {
|
if (!obj->pages) {
|
||||||
DRM_ERROR("pages is null.\n");
|
ret = udl_gem_get_pages(obj);
|
||||||
return ERR_PTR(-ENOMEM);
|
if (ret) {
|
||||||
|
DRM_ERROR("failed to map pages.\n");
|
||||||
|
return ERR_PTR(ret);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
page_count = obj->base.size / PAGE_SIZE;
|
page_count = obj->base.size / PAGE_SIZE;
|
||||||
|
|
|
@ -129,6 +129,8 @@ struct dma_buf *udl_gem_prime_export(struct drm_device *dev,
|
||||||
struct drm_gem_object *udl_gem_prime_import(struct drm_device *dev,
|
struct drm_gem_object *udl_gem_prime_import(struct drm_device *dev,
|
||||||
struct dma_buf *dma_buf);
|
struct dma_buf *dma_buf);
|
||||||
|
|
||||||
|
int udl_gem_get_pages(struct udl_gem_object *obj);
|
||||||
|
void udl_gem_put_pages(struct udl_gem_object *obj);
|
||||||
int udl_gem_vmap(struct udl_gem_object *obj);
|
int udl_gem_vmap(struct udl_gem_object *obj);
|
||||||
void udl_gem_vunmap(struct udl_gem_object *obj);
|
void udl_gem_vunmap(struct udl_gem_object *obj);
|
||||||
int udl_drm_gem_mmap(struct file *filp, struct vm_area_struct *vma);
|
int udl_drm_gem_mmap(struct file *filp, struct vm_area_struct *vma);
|
||||||
|
|
|
@ -127,7 +127,7 @@ int udl_gem_fault(struct vm_area_struct *vma, struct vm_fault *vmf)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
static int udl_gem_get_pages(struct udl_gem_object *obj)
|
int udl_gem_get_pages(struct udl_gem_object *obj)
|
||||||
{
|
{
|
||||||
struct page **pages;
|
struct page **pages;
|
||||||
|
|
||||||
|
@ -143,7 +143,7 @@ static int udl_gem_get_pages(struct udl_gem_object *obj)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
static void udl_gem_put_pages(struct udl_gem_object *obj)
|
void udl_gem_put_pages(struct udl_gem_object *obj)
|
||||||
{
|
{
|
||||||
if (obj->base.import_attach) {
|
if (obj->base.import_attach) {
|
||||||
drm_free_large(obj->pages);
|
drm_free_large(obj->pages);
|
||||||
|
|
Loading…
Add table
Reference in a new issue