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