Merge branch 'drm-fixes' of git://people.freedesktop.org/~dvdhrm/linux into drm-next
This branch includes 6 minor fixes mainly for udl. Everything non-trivial was reviewed by Daniel and the patches have been on the list for quite some time. * 'drm-fixes' of git://people.freedesktop.org/~dvdhrm/linux: drm/gem: dont init "ret" in drm_gem_mmap() drm/crtc: add sanity checks to create_dumb() drm/gem: free vma-node during object-cleanup drm/gem: fix indentation drm/udl: fix Bpp calculation in dumb_create() drm/udl: fix error-path when damage-req fails
This commit is contained in:
commit
28b90a9e7f
|
@ -3784,9 +3784,26 @@ int drm_mode_create_dumb_ioctl(struct drm_device *dev,
|
||||||
void *data, struct drm_file *file_priv)
|
void *data, struct drm_file *file_priv)
|
||||||
{
|
{
|
||||||
struct drm_mode_create_dumb *args = data;
|
struct drm_mode_create_dumb *args = data;
|
||||||
|
u32 cpp, stride, size;
|
||||||
|
|
||||||
if (!dev->driver->dumb_create)
|
if (!dev->driver->dumb_create)
|
||||||
return -ENOSYS;
|
return -ENOSYS;
|
||||||
|
if (!args->width || !args->height || !args->bpp)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
/* overflow checks for 32bit size calculations */
|
||||||
|
cpp = DIV_ROUND_UP(args->bpp, 8);
|
||||||
|
if (cpp > 0xffffffffU / args->width)
|
||||||
|
return -EINVAL;
|
||||||
|
stride = cpp * args->width;
|
||||||
|
if (args->height > 0xffffffffU / stride)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
|
/* test for wrap-around */
|
||||||
|
size = args->height * stride;
|
||||||
|
if (PAGE_ALIGN(size) == 0)
|
||||||
|
return -EINVAL;
|
||||||
|
|
||||||
return dev->driver->dumb_create(file_priv, dev, args);
|
return dev->driver->dumb_create(file_priv, dev, args);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -692,7 +692,9 @@ drm_gem_object_release(struct drm_gem_object *obj)
|
||||||
WARN_ON(obj->dma_buf);
|
WARN_ON(obj->dma_buf);
|
||||||
|
|
||||||
if (obj->filp)
|
if (obj->filp)
|
||||||
fput(obj->filp);
|
fput(obj->filp);
|
||||||
|
|
||||||
|
drm_gem_free_mmap_offset(obj);
|
||||||
}
|
}
|
||||||
EXPORT_SYMBOL(drm_gem_object_release);
|
EXPORT_SYMBOL(drm_gem_object_release);
|
||||||
|
|
||||||
|
@ -782,7 +784,7 @@ int drm_gem_mmap_obj(struct drm_gem_object *obj, unsigned long obj_size,
|
||||||
vma->vm_flags |= VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP;
|
vma->vm_flags |= VM_IO | VM_PFNMAP | VM_DONTEXPAND | VM_DONTDUMP;
|
||||||
vma->vm_ops = dev->driver->gem_vm_ops;
|
vma->vm_ops = dev->driver->gem_vm_ops;
|
||||||
vma->vm_private_data = obj;
|
vma->vm_private_data = obj;
|
||||||
vma->vm_page_prot = pgprot_writecombine(vm_get_page_prot(vma->vm_flags));
|
vma->vm_page_prot = pgprot_writecombine(vm_get_page_prot(vma->vm_flags));
|
||||||
|
|
||||||
/* Take a ref for this mapping of the object, so that the fault
|
/* Take a ref for this mapping of the object, so that the fault
|
||||||
* handler can dereference the mmap offset's pointer to the object.
|
* handler can dereference the mmap offset's pointer to the object.
|
||||||
|
@ -818,7 +820,7 @@ int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma)
|
||||||
struct drm_device *dev = priv->minor->dev;
|
struct drm_device *dev = priv->minor->dev;
|
||||||
struct drm_gem_object *obj;
|
struct drm_gem_object *obj;
|
||||||
struct drm_vma_offset_node *node;
|
struct drm_vma_offset_node *node;
|
||||||
int ret = 0;
|
int ret;
|
||||||
|
|
||||||
if (drm_device_is_unplugged(dev))
|
if (drm_device_is_unplugged(dev))
|
||||||
return -ENODEV;
|
return -ENODEV;
|
||||||
|
|
|
@ -421,7 +421,7 @@ static int udl_user_framebuffer_dirty(struct drm_framebuffer *fb,
|
||||||
clips[i].x2 - clips[i].x1,
|
clips[i].x2 - clips[i].x1,
|
||||||
clips[i].y2 - clips[i].y1);
|
clips[i].y2 - clips[i].y1);
|
||||||
if (ret)
|
if (ret)
|
||||||
goto unlock;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (ufb->obj->base.import_attach) {
|
if (ufb->obj->base.import_attach) {
|
||||||
|
|
|
@ -60,7 +60,7 @@ int udl_dumb_create(struct drm_file *file,
|
||||||
struct drm_device *dev,
|
struct drm_device *dev,
|
||||||
struct drm_mode_create_dumb *args)
|
struct drm_mode_create_dumb *args)
|
||||||
{
|
{
|
||||||
args->pitch = args->width * ((args->bpp + 1) / 8);
|
args->pitch = args->width * DIV_ROUND_UP(args->bpp, 8);
|
||||||
args->size = args->pitch * args->height;
|
args->size = args->pitch * args->height;
|
||||||
return udl_gem_create(file, dev,
|
return udl_gem_create(file, dev,
|
||||||
args->size, &args->handle);
|
args->size, &args->handle);
|
||||||
|
|
Loading…
Reference in New Issue