Commit cde5f7ed authored by Chris Wilson's avatar Chris Wilson

drm/i915: Avoid using ctx->file_priv during construction

As we only set ctx->file_priv on registering the GEM context after
construction, it is invalid to try and use it in the middle for setting
various parameters. Indeed, we put the file_priv into struct create_ext
so that we have the right file_private available without having to look
at ctx->file_priv. However, it helps to use it!
Reported-by: default avatarJordan Justen <jordan.l.justen@intel.com>
Fixes: b9171541 ("drm/i915: Extend CONTEXT_CREATE to set parameters upon construction")
Signed-off-by: default avatarChris Wilson <chris@chris-wilson.co.uk>
Cc: Tvrtko Ursulin <tvrtko.ursulin@intel.com>
Cc: Jordan Justen <jordan.l.justen@intel.com>
Reviewed-by: default avatarJordan Justen <jordan.l.justen@intel.com>
Tested-by: default avatarJordan Justen <jordan.l.justen@intel.com>
Link: https://patchwork.freedesktop.org/patch/msgid/20190330100349.30642-1-chris@chris-wilson.co.uk
parent 52b83260
...@@ -969,10 +969,10 @@ int i915_gem_switch_to_kernel_context(struct drm_i915_private *i915, ...@@ -969,10 +969,10 @@ int i915_gem_switch_to_kernel_context(struct drm_i915_private *i915,
return 0; return 0;
} }
static int get_ppgtt(struct i915_gem_context *ctx, static int get_ppgtt(struct drm_i915_file_private *file_priv,
struct i915_gem_context *ctx,
struct drm_i915_gem_context_param *args) struct drm_i915_gem_context_param *args)
{ {
struct drm_i915_file_private *file_priv = ctx->file_priv;
struct i915_hw_ppgtt *ppgtt; struct i915_hw_ppgtt *ppgtt;
int ret; int ret;
...@@ -1071,10 +1071,10 @@ static int emit_ppgtt_update(struct i915_request *rq, void *data) ...@@ -1071,10 +1071,10 @@ static int emit_ppgtt_update(struct i915_request *rq, void *data)
return 0; return 0;
} }
static int set_ppgtt(struct i915_gem_context *ctx, static int set_ppgtt(struct drm_i915_file_private *file_priv,
struct i915_gem_context *ctx,
struct drm_i915_gem_context_param *args) struct drm_i915_gem_context_param *args)
{ {
struct drm_i915_file_private *file_priv = ctx->file_priv;
struct i915_hw_ppgtt *ppgtt, *old; struct i915_hw_ppgtt *ppgtt, *old;
int err; int err;
...@@ -1416,7 +1416,8 @@ static int set_sseu(struct i915_gem_context *ctx, ...@@ -1416,7 +1416,8 @@ static int set_sseu(struct i915_gem_context *ctx,
return 0; return 0;
} }
static int ctx_setparam(struct i915_gem_context *ctx, static int ctx_setparam(struct drm_i915_file_private *fpriv,
struct i915_gem_context *ctx,
struct drm_i915_gem_context_param *args) struct drm_i915_gem_context_param *args)
{ {
int ret = 0; int ret = 0;
...@@ -1485,7 +1486,7 @@ static int ctx_setparam(struct i915_gem_context *ctx, ...@@ -1485,7 +1486,7 @@ static int ctx_setparam(struct i915_gem_context *ctx,
break; break;
case I915_CONTEXT_PARAM_VM: case I915_CONTEXT_PARAM_VM:
ret = set_ppgtt(ctx, args); ret = set_ppgtt(fpriv, ctx, args);
break; break;
case I915_CONTEXT_PARAM_BAN_PERIOD: case I915_CONTEXT_PARAM_BAN_PERIOD:
...@@ -1513,7 +1514,7 @@ static int create_setparam(struct i915_user_extension __user *ext, void *data) ...@@ -1513,7 +1514,7 @@ static int create_setparam(struct i915_user_extension __user *ext, void *data)
if (local.param.ctx_id) if (local.param.ctx_id)
return -EINVAL; return -EINVAL;
return ctx_setparam(arg->ctx, &local.param); return ctx_setparam(arg->fpriv, arg->ctx, &local.param);
} }
static const i915_user_extension_fn create_extensions[] = { static const i915_user_extension_fn create_extensions[] = {
...@@ -1712,7 +1713,7 @@ int i915_gem_context_getparam_ioctl(struct drm_device *dev, void *data, ...@@ -1712,7 +1713,7 @@ int i915_gem_context_getparam_ioctl(struct drm_device *dev, void *data,
break; break;
case I915_CONTEXT_PARAM_VM: case I915_CONTEXT_PARAM_VM:
ret = get_ppgtt(ctx, args); ret = get_ppgtt(file_priv, ctx, args);
break; break;
case I915_CONTEXT_PARAM_BAN_PERIOD: case I915_CONTEXT_PARAM_BAN_PERIOD:
...@@ -1737,7 +1738,7 @@ int i915_gem_context_setparam_ioctl(struct drm_device *dev, void *data, ...@@ -1737,7 +1738,7 @@ int i915_gem_context_setparam_ioctl(struct drm_device *dev, void *data,
if (!ctx) if (!ctx)
return -ENOENT; return -ENOENT;
ret = ctx_setparam(ctx, args); ret = ctx_setparam(file_priv, ctx, args);
i915_gem_context_put(ctx); i915_gem_context_put(ctx);
return ret; return ret;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment