diff options
author | Xiong Zhang <xiong.y.zhang@intel.com> | 2013-07-19 01:51:24 -0400 |
---|---|---|
committer | Daniel Vetter <daniel.vetter@ffwll.ch> | 2013-07-19 03:29:26 -0400 |
commit | 0b74b508f78cea96d0d1b47e72cc0ec7959cdc68 (patch) | |
tree | 2bfe889b7a72eb2d736c98e334e5a5025ca49203 | |
parent | 6286ef9b56bfc5d4f3f06ef5488e41da4480dc85 (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.c | 5 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_drv.h | 1 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem.c | 12 | ||||
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem_execbuffer.c | 6 |
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); | |||
141 | MODULE_PARM_DESC(fastboot, "Try to skip unnecessary mode sets at boot time " | 141 | MODULE_PARM_DESC(fastboot, "Try to skip unnecessary mode sets at boot time " |
142 | "(default: false)"); | 142 | "(default: false)"); |
143 | 143 | ||
144 | bool i915_prefault_disable __read_mostly; | ||
145 | module_param_named(prefault_disable, i915_prefault_disable, bool, 0600); | ||
146 | MODULE_PARM_DESC(prefault_disable, | ||
147 | "Disable page prefaulting for pread/pwrite/reloc (default:false). For developers only."); | ||
148 | |||
144 | static struct drm_driver driver; | 149 | static struct drm_driver driver; |
145 | extern int intel_agp_enabled; | 150 | extern 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; | |||
1627 | extern int i915_disable_power_well __read_mostly; | 1627 | extern int i915_disable_power_well __read_mostly; |
1628 | extern int i915_enable_ips __read_mostly; | 1628 | extern int i915_enable_ips __read_mostly; |
1629 | extern bool i915_fastboot __read_mostly; | 1629 | extern bool i915_fastboot __read_mostly; |
1630 | extern bool i915_prefault_disable __read_mostly; | ||
1630 | 1631 | ||
1631 | extern int i915_suspend(struct drm_device *dev, pm_message_t state); | 1632 | extern int i915_suspend(struct drm_device *dev, pm_message_t state); |
1632 | extern int i915_resume(struct drm_device *dev); | 1633 | extern 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; |