aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorXiong Zhang <xiong.y.zhang@intel.com>2013-07-19 01:51:24 -0400
committerDaniel Vetter <daniel.vetter@ffwll.ch>2013-07-19 03:29:26 -0400
commit0b74b508f78cea96d0d1b47e72cc0ec7959cdc68 (patch)
tree2bfe889b7a72eb2d736c98e334e5a5025ca49203
parent6286ef9b56bfc5d4f3f06ef5488e41da4480dc85 (diff)
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>
-rw-r--r--drivers/gpu/drm/i915/i915_drv.c5
-rw-r--r--drivers/gpu/drm/i915/i915_drv.h1
-rw-r--r--drivers/gpu/drm/i915/i915_gem.c12
-rw-r--r--drivers/gpu/drm/i915/i915_gem_execbuffer.c6
4 files changed, 17 insertions, 7 deletions
diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
index b178a7ca1294..c34086ad8181 100644
--- a/drivers/gpu/drm/i915/i915_drv.c
+++ b/drivers/gpu/drm/i915/i915_drv.c
@@ -141,6 +141,11 @@ module_param_named(fastboot, i915_fastboot, bool, 0600);
141MODULE_PARM_DESC(fastboot, "Try to skip unnecessary mode sets at boot time " 141MODULE_PARM_DESC(fastboot, "Try to skip unnecessary mode sets at boot time "
142 "(default: false)"); 142 "(default: false)");
143 143
144bool i915_prefault_disable __read_mostly;
145module_param_named(prefault_disable, i915_prefault_disable, bool, 0600);
146MODULE_PARM_DESC(prefault_disable,
147 "Disable page prefaulting for pread/pwrite/reloc (default:false). For developers only.");
148
144static struct drm_driver driver; 149static struct drm_driver driver;
145extern int intel_agp_enabled; 150extern int intel_agp_enabled;
146 151
diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
index 36d1c806e092..fc32d2034f38 100644
--- a/drivers/gpu/drm/i915/i915_drv.h
+++ b/drivers/gpu/drm/i915/i915_drv.h
@@ -1627,6 +1627,7 @@ extern unsigned int i915_preliminary_hw_support __read_mostly;
1627extern int i915_disable_power_well __read_mostly; 1627extern int i915_disable_power_well __read_mostly;
1628extern int i915_enable_ips __read_mostly; 1628extern int i915_enable_ips __read_mostly;
1629extern bool i915_fastboot __read_mostly; 1629extern bool i915_fastboot __read_mostly;
1630extern bool i915_prefault_disable __read_mostly;
1630 1631
1631extern int i915_suspend(struct drm_device *dev, pm_message_t state); 1632extern int i915_suspend(struct drm_device *dev, pm_message_t state);
1632extern int i915_resume(struct drm_device *dev); 1633extern int i915_resume(struct drm_device *dev);
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,
465 465
466 mutex_unlock(&dev->struct_mutex); 466 mutex_unlock(&dev->struct_mutex);
467 467
468 if (!prefaulted) { 468 if (likely(!i915_prefault_disable) && !prefaulted) {
469 ret = fault_in_multipages_writeable(user_data, remain); 469 ret = fault_in_multipages_writeable(user_data, remain);
470 /* Userspace is tricking us, but we've already clobbered 470 /* Userspace is tricking us, but we've already clobbered
471 * its pages with the prefault and promised to write the 471 * its pages with the prefault and promised to write the
@@ -860,10 +860,12 @@ i915_gem_pwrite_ioctl(struct drm_device *dev, void *data,
860 args->size)) 860 args->size))
861 return -EFAULT; 861 return -EFAULT;
862 862
863 ret = fault_in_multipages_readable(to_user_ptr(args->data_ptr), 863 if (likely(!i915_prefault_disable)) {
864 args->size); 864 ret = fault_in_multipages_readable(to_user_ptr(args->data_ptr),
865 if (ret) 865 args->size);
866 return -EFAULT; 866 if (ret)
867 return -EFAULT;
868 }
867 869
868 ret = i915_mutex_lock_interruptible(dev); 870 ret = i915_mutex_lock_interruptible(dev);
869 if (ret) 871 if (ret)
diff --git a/drivers/gpu/drm/i915/i915_gem_execbuffer.c b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
index 1b58694d7be7..1734825bef34 100644
--- a/drivers/gpu/drm/i915/i915_gem_execbuffer.c
+++ b/drivers/gpu/drm/i915/i915_gem_execbuffer.c
@@ -759,8 +759,10 @@ validate_exec_list(struct drm_i915_gem_exec_object2 *exec,
759 if (!access_ok(VERIFY_WRITE, ptr, length)) 759 if (!access_ok(VERIFY_WRITE, ptr, length))
760 return -EFAULT; 760 return -EFAULT;
761 761
762 if (fault_in_multipages_readable(ptr, length)) 762 if (likely(!i915_prefault_disable)) {
763 return -EFAULT; 763 if (fault_in_multipages_readable(ptr, length))
764 return -EFAULT;
765 }
764 } 766 }
765 767
766 return 0; 768 return 0;