if (!(dev->driver->driver_features & DRIVER_GEM))
return -ENODEV;
- /* Round requested size up to page size */
- args->size = (args->size + PAGE_SIZE - 1) & ~(PAGE_SIZE - 1);
+ args->size = roundup(args->size, PAGE_SIZE);
/* Allocate the new object */
obj = drm_gem_object_alloc(dev, args->size);
offset = args->offset;
- read = obj->filp->f_op->read(obj->filp, (char __user *)(uintptr_t)args->data_ptr,
- args->size, &offset);
+ read = vfs_read(obj->filp, (char __user *)(uintptr_t)args->data_ptr,
+ args->size, &offset);
if (read != args->size) {
drm_gem_object_unreference(obj);
if (read < 0)
up_write(¤t->mm->mmap_sem);
drm_gem_object_unreference(obj);
if (IS_ERR((void *)addr))
- return (int) addr;
+ return addr;
/* XXX hack until we have a driver callback to make this work */
obj->read_domains = DRM_GEM_DOMAIN_CPU;
offset = args->offset;
- written = obj->filp->f_op->write(obj->filp, (char __user *)(uintptr_t) args->data_ptr,
- args->size, &offset);
+ written = vfs_write(obj->filp,
+ (char __user *)(uintptr_t) args->data_ptr,
+ args->size, &offset);
if (written != args->size) {
drm_gem_object_unreference(obj);
if (written < 0)