[PATCH 1/9] drm/i915: Add i915 perf infrastructure
Chris Wilson
chris at chris-wilson.co.uk
Wed Apr 20 22:41:20 UTC 2016
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
More information about the dri-devel
mailing list