Skip to content

Commit

Permalink
---
Browse files Browse the repository at this point in the history
yaml
---
r: 218324
b: refs/heads/master
c: b5e4feb
h: refs/heads/master
v: v3
  • Loading branch information
Chris Wilson committed Oct 19, 2010
1 parent 85ce1d8 commit e1ed1db
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 15 deletions.
2 changes: 1 addition & 1 deletion [refs]
Original file line number Diff line number Diff line change
@@ -1,2 +1,2 @@
---
refs/heads/master: 202f2fef7a1aa6b2e4fa6e1de3ef582342fd41f0
refs/heads/master: b5e4feb6615fe07150f05bb0e0ccc0ff9138b9ec
33 changes: 19 additions & 14 deletions trunk/drivers/gpu/drm/i915/i915_gem.c
Original file line number Diff line number Diff line change
Expand Up @@ -265,19 +265,14 @@ fast_shmem_read(struct page **pages,
char __user *data,
int length)
{
char __iomem *vaddr;
int unwritten;
char *vaddr;

vaddr = kmap_atomic(pages[page_base >> PAGE_SHIFT], KM_USER0);
if (vaddr == NULL)
return -ENOMEM;
unwritten = __copy_to_user_inatomic(data, vaddr + page_offset, length);
kunmap_atomic(vaddr, KM_USER0);

if (unwritten)
return -EFAULT;

return 0;
return unwritten ? -EFAULT : 0;
}

static int i915_gem_object_needs_bit17_swizzle(struct drm_gem_object *obj)
Expand Down Expand Up @@ -602,6 +597,13 @@ i915_gem_pread_ioctl(struct drm_device *dev, void *data,
goto out;
}

ret = fault_in_pages_writeable((char __user *)(uintptr_t)args->data_ptr,
args->size);
if (ret) {
ret = -EFAULT;
goto out;
}

if (i915_gem_object_needs_bit17_swizzle(obj)) {
ret = i915_gem_shmem_pread_slow(dev, obj, args, file_priv);
} else {
Expand Down Expand Up @@ -668,18 +670,14 @@ fast_shmem_write(struct page **pages,
char __user *data,
int length)
{
char __iomem *vaddr;
unsigned long unwritten;
int unwritten;
char *vaddr;

vaddr = kmap_atomic(pages[page_base >> PAGE_SHIFT], KM_USER0);
if (vaddr == NULL)
return -ENOMEM;
unwritten = __copy_from_user_inatomic(vaddr + page_offset, data, length);
kunmap_atomic(vaddr, KM_USER0);

if (unwritten)
return -EFAULT;
return 0;
return unwritten ? -EFAULT : 0;
}

/**
Expand Down Expand Up @@ -1078,6 +1076,13 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
goto out;
}

ret = fault_in_pages_readable((char __user *)(uintptr_t)args->data_ptr,
args->size);
if (ret) {
ret = -EFAULT;
goto out;
}

/* We can only do the GTT pwrite on untiled buffers, as otherwise
* it would end up going through the fenced access, and we'll get
* different detiling behavior between reading and writing.
Expand Down

0 comments on commit e1ed1db

Please sign in to comment.