[Intel-gfx] [PATCH v12 3/4] drm/i915/perf: prepare driver to receive multiple ctx handles
Chris Wilson
chris at chris-wilson.co.uk
Mon May 4 11:21:45 UTC 2020
Quoting Lionel Landwerlin (2020-05-04 12:12:48)
> +static int oa_get_render_ctx_ids(struct i915_perf_stream *stream)
> {
> struct intel_context *ce;
> + int i, err = 0;
> + u32 n_allocated_ctxs = 0;
>
> - ce = fetch_and_zero(&stream->pinned_ctx);
> - if (ce) {
> - ce->tag = 0; /* recomputed on next submission after parking */
> - intel_context_unpin(ce);
> + stream->ctx_id_mask = get_ctx_id_mask(stream->engine);
> +
> + for (i = 0; i < stream->n_ctxs; i++) {
> + struct i915_gem_context *ctx = stream->ctxs[i];
> + struct i915_gem_engines_iter it;
> +
> + for_each_gem_engine(ce, i915_gem_context_lock_engines(ctx), it) {
> + if (ce->engine != stream->engine) /* first match! */
> + continue;
> +
> + /*
> + * As the ID is the gtt offset of the context's vma we
> + * pin the vma to ensure the ID remains fixed.
> + */
> + err = intel_context_pin(ce);
> + if (err) {
> + i915_gem_context_unlock_engines(ctx);
> + break;
> + }
> +
> + if (stream->n_pinned_ctxs >= n_allocated_ctxs) {
> + u32 new_allocated_len = max(n_allocated_ctxs * 2, 2u);
> + struct i915_perf_context_detail *new_ctxs =
> + krealloc(stream->pinned_ctxs,
> + sizeof(*stream->pinned_ctxs) *
> + new_allocated_len,
> + GFP_KERNEL);
> +
> + if (!new_ctxs) {
> + err = -ENOMEM;
> + break;
> + }
> +
> + n_allocated_ctxs = new_allocated_len;
> + stream->pinned_ctxs = new_ctxs;
> + }
> +
> + stream->pinned_ctxs[stream->n_pinned_ctxs].ce = ce;
> + stream->pinned_ctxs[stream->n_pinned_ctxs].id = get_ctx_id(ce, i);
> +
> + drm_dbg(&stream->perf->i915->drm,
> + "filtering on ctx_id%i=0x%x ctx_id_mask=0x%x\n",
> + i, stream->pinned_ctxs[i].id, stream->ctx_id_mask);
> +
> + ce->tag = stream->pinned_ctxs[stream->n_pinned_ctxs].id;
> +
> + stream->n_pinned_ctxs++;
> + }
> + i915_gem_context_unlock_engines(ctx);
> + if (err)
> + goto err;
> }
For each GEM context handle the user supplied, match on all HW contexts.
Reviewed-by: Chris Wilson <chris at chris-wilson.co.uk>
-Chris
More information about the Intel-gfx
mailing list