aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/gpu/drm/i915/i915_gem_context.c
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem_context.c')
-rw-r--r--drivers/gpu/drm/i915/i915_gem_context.c20
1 files changed, 7 insertions, 13 deletions
diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
index 747b8170a15a..f772593b99ab 100644
--- a/drivers/gpu/drm/i915/i915_gem_context.c
+++ b/drivers/gpu/drm/i915/i915_gem_context.c
@@ -862,7 +862,7 @@ int i915_gem_context_getparam_ioctl(struct drm_device *dev, void *data,
862 ret = -EINVAL; 862 ret = -EINVAL;
863 break; 863 break;
864 case I915_CONTEXT_PARAM_NO_ZEROMAP: 864 case I915_CONTEXT_PARAM_NO_ZEROMAP:
865 args->value = ctx->flags & CONTEXT_NO_ZEROMAP; 865 args->value = test_bit(UCONTEXT_NO_ZEROMAP, &ctx->user_flags);
866 break; 866 break;
867 case I915_CONTEXT_PARAM_GTT_SIZE: 867 case I915_CONTEXT_PARAM_GTT_SIZE:
868 if (ctx->ppgtt) 868 if (ctx->ppgtt)
@@ -896,27 +896,23 @@ int i915_gem_context_setparam_ioctl(struct drm_device *dev, void *data,
896 struct drm_i915_file_private *file_priv = file->driver_priv; 896 struct drm_i915_file_private *file_priv = file->driver_priv;
897 struct drm_i915_gem_context_param *args = data; 897 struct drm_i915_gem_context_param *args = data;
898 struct i915_gem_context *ctx; 898 struct i915_gem_context *ctx;
899 int ret; 899 int ret = 0;
900 900
901 ctx = i915_gem_context_lookup(file_priv, args->ctx_id); 901 ctx = i915_gem_context_lookup(file_priv, args->ctx_id);
902 if (!ctx) 902 if (!ctx)
903 return -ENOENT; 903 return -ENOENT;
904 904
905 ret = i915_mutex_lock_interruptible(dev);
906 if (ret)
907 goto out;
908
909 switch (args->param) { 905 switch (args->param) {
910 case I915_CONTEXT_PARAM_BAN_PERIOD: 906 case I915_CONTEXT_PARAM_BAN_PERIOD:
911 ret = -EINVAL; 907 ret = -EINVAL;
912 break; 908 break;
913 case I915_CONTEXT_PARAM_NO_ZEROMAP: 909 case I915_CONTEXT_PARAM_NO_ZEROMAP:
914 if (args->size) { 910 if (args->size)
915 ret = -EINVAL; 911 ret = -EINVAL;
916 } else { 912 else if (args->value)
917 ctx->flags &= ~CONTEXT_NO_ZEROMAP; 913 set_bit(UCONTEXT_NO_ZEROMAP, &ctx->user_flags);
918 ctx->flags |= args->value ? CONTEXT_NO_ZEROMAP : 0; 914 else
919 } 915 clear_bit(UCONTEXT_NO_ZEROMAP, &ctx->user_flags);
920 break; 916 break;
921 case I915_CONTEXT_PARAM_NO_ERROR_CAPTURE: 917 case I915_CONTEXT_PARAM_NO_ERROR_CAPTURE:
922 if (args->size) 918 if (args->size)
@@ -960,9 +956,7 @@ int i915_gem_context_setparam_ioctl(struct drm_device *dev, void *data,
960 ret = -EINVAL; 956 ret = -EINVAL;
961 break; 957 break;
962 } 958 }
963 mutex_unlock(&dev->struct_mutex);
964 959
965out:
966 i915_gem_context_put(ctx); 960 i915_gem_context_put(ctx);
967 return ret; 961 return ret;
968} 962}