diff options
Diffstat (limited to 'drivers/gpu/drm/i915/i915_gem_context.c')
-rw-r--r-- | drivers/gpu/drm/i915/i915_gem_context.c | 20 |
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 | ||
965 | out: | ||
966 | i915_gem_context_put(ctx); | 960 | i915_gem_context_put(ctx); |
967 | return ret; | 961 | return ret; |
968 | } | 962 | } |