diff options
author | Xiong Zhang | 2013-07-19 07:51:24 +0200 |
---|---|---|
committer | Daniel Vetter | 2013-07-19 09:29:26 +0200 |
commit | 0b74b508f78cea96d0d1b47e72cc0ec7959cdc68 (patch) | |
tree | 2bfe889b7a72eb2d736c98e334e5a5025ca49203 /drivers/gpu/drm/i915/i915_gem.c | |
parent | drm/i915: use after free on error path (diff) | |
download | kernel-qcow2-linux-0b74b508f78cea96d0d1b47e72cc0ec7959cdc68.tar.gz kernel-qcow2-linux-0b74b508f78cea96d0d1b47e72cc0ec7959cdc68.tar.xz kernel-qcow2-linux-0b74b508f78cea96d0d1b47e72cc0ec7959cdc68.zip |
drm/i915: add prefault_disable module option
prefault is stll enabled by default which prevent most of pwrite/pread/reloc
from running slow path, in order to verify these slow pathes, prefault need
to be disabled.
Signed-off-by: Xiong Zhang <xiong.y.zhang@intel.com>
[danvet: Make checkpatch happy and bikeshed the module option help
text a bit.]
Signed-off-by: Daniel Vetter <daniel.vetter@ffwll.ch>
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 12 |
1 files changed, 7 insertions, 5 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index ce043f14eab9..acc99d458143 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -465,7 +465,7 @@ i915_gem_shmem_pread(struct drm_device *dev, mutex_unlock(&dev->struct_mutex); - if (!prefaulted) { + if (likely(!i915_prefault_disable) && !prefaulted) { ret = fault_in_multipages_writeable(user_data, remain); /* Userspace is tricking us, but we've already clobbered * its pages with the prefault and promised to write the @@ -860,10 +860,12 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data, args->size)) return -EFAULT; - ret = fault_in_multipages_readable(to_user_ptr(args->data_ptr), - args->size); - if (ret) - return -EFAULT; + if (likely(!i915_prefault_disable)) { + ret = fault_in_multipages_readable(to_user_ptr(args->data_ptr), + args->size); + if (ret) + return -EFAULT; + } ret = i915_mutex_lock_interruptible(dev); if (ret) |