On Wed, Apr 20, 2016 at 03:23:06PM +0100, Robert Bragg wrote: > +static struct intel_context * > +lookup_context(struct drm_i915_private *dev_priv, > + struct file *user_filp, > + u32 ctx_user_handle) > +{ > + struct intel_context *ctx; > + > + mutex_lock(&dev_priv->dev->struct_mutex); > + list_for_each_entry(ctx, &dev_priv->context_list, link) { > + struct drm_file *drm_file; > + > + if (!ctx->file_priv) > + continue; > + > + drm_file = ctx->file_priv->file; > + > + if (user_filp->private_data == drm_file && > + ctx->user_handle == ctx_user_handle) { > + i915_gem_context_reference(ctx); > + mutex_unlock(&dev_priv->dev->struct_mutex); > + > + return ctx; > + } > + } > + mutex_unlock(&dev_priv->dev->struct_mutex); > + > + return NULL; > +} > + > +int i915_perf_open_ioctl_locked(struct drm_device *dev, > + struct drm_i915_perf_open_param *param, > + struct perf_open_properties *props, > + struct drm_file *file) > +{ > + struct drm_i915_private *dev_priv = dev->dev_private; > + struct intel_context *specific_ctx = NULL; > + struct i915_perf_stream *stream = NULL; > + unsigned long f_flags = 0; > + int stream_fd; > + int ret = 0; > + > + if (props->single_context) { > + u32 ctx_handle = props->ctx_handle; > + > + specific_ctx = lookup_context(dev_priv, file->filp, ctx_handle); i915_gem_context_get(file->driver_priv, ctx_handle) ? Though this doesn't allow ptrace like ability to watch a context elsewhere. For that you need to pass in fd:ctx props. -Chris -- Chris Wilson, Intel Open Source Technology Centre _______________________________________________ dri-devel mailing list dri-devel@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/dri-devel