Quoting Tvrtko Ursulin (2018-08-14 15:40:58) > +static int > +i915_gem_context_reconfigure_sseu(struct i915_gem_context *ctx, > + struct intel_engine_cs *engine, > + struct intel_sseu sseu) > +{ > + struct drm_i915_private *i915 = ctx->i915; > + struct i915_request *rq; > + struct intel_ring *ring; > + int ret; > + > + lockdep_assert_held(&i915->drm.struct_mutex); > + > + /* Submitting requests etc needs the hw awake. */ > + intel_runtime_pm_get(i915); > + > + i915_retire_requests(i915); > + > + /* Now use the RCS to actually reconfigure. */ > + engine = i915->engine[RCS]; > + > + rq = i915_request_alloc(engine, i915->kernel_context); > + if (IS_ERR(rq)) { > + ret = PTR_ERR(rq); > + goto out_put; > + } > + > + ret = engine->emit_rpcs_config(rq, ctx, sseu); > + if (ret) > + goto out_add; > + > + /* Queue this switch after all other activity */ > + list_for_each_entry(ring, &i915->gt.active_rings, active_link) { > + struct i915_request *prev; > + > + prev = last_request_on_engine(ring->timeline, engine); > + if (prev) > + i915_sw_fence_await_sw_fence_gfp(&rq->submit, > + &prev->submit, > + I915_FENCE_GFP); > + } > + > + i915_gem_set_global_barrier(i915, rq); > + > +out_add: > + i915_request_add(rq); > +out_put: > + intel_runtime_pm_put(i915); > + > + return ret; Looks like we should be able to hook this up to a selftest to confirm the modification does land in the target context image, and a SRM to confirm it loaded. -Chris _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx