Message ID | 1424366285-29232-22-git-send-email-John.C.Harrison@Intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 19/02/2015 17:17, John.C.Harrison@Intel.com wrote: > From: John Harrison <John.C.Harrison@Intel.com> > > In execlist mode, the context object pointer is written in to the request > structure (and reference counted) at the point of request creation. In legacy > mode, this only happens inside i915_add_request(). > > This patch updates the legacy code path to match the execlist version. This > allows all the intermediate code between request creation and request submission > to get at the context object given only a request structure. Thus negating the > need to pass context pointers here, there and everywhere. > > For: VIZ-5115 > Signed-off-by: John Harrison <John.C.Harrison@Intel.com> > --- > drivers/gpu/drm/i915/i915_gem.c | 9 +-------- > drivers/gpu/drm/i915/intel_ringbuffer.c | 2 ++ > 2 files changed, 3 insertions(+), 8 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c > index 379bf44..64288e3 100644 > --- a/drivers/gpu/drm/i915/i915_gem.c > +++ b/drivers/gpu/drm/i915/i915_gem.c > @@ -2470,14 +2470,7 @@ int __i915_add_request(struct intel_engine_cs *ring, > WARN_ON(request->batch_obj && obj); > request->batch_obj = obj; > > - if (!i915.enable_execlists) { > - /* Hold a reference to the current context so that we can inspect > - * it later in case a hangcheck error event fires. > - */ > - request->ctx = ring->last_context; > - if (request->ctx) > - i915_gem_context_reference(request->ctx); > - } > + WARN_ON(request->ctx != ring->last_context); __i915_add_request is gen agnostic but ring->last_context is only used in legacy mode. Maybe you want to check for !i915.enable_execlists just like in the block you removed above? > > request->emitted_jiffies = jiffies; > list_add_tail(&request->list, &ring->request_list); > diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c > index 1a9f884..05a7e33 100644 > --- a/drivers/gpu/drm/i915/intel_ringbuffer.c > +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c > @@ -2186,6 +2186,8 @@ intel_ring_alloc_request(struct intel_engine_cs *ring, > request->ring = ring; > request->ringbuf = ring->buffer; > request->uniq = dev_private->request_uniq++; > + request->ctx = ctx; > + i915_gem_context_reference(request->ctx); > > ret = i915_gem_get_seqno(ring->dev, &request->seqno); > if (ret) { >
diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c index 379bf44..64288e3 100644 --- a/drivers/gpu/drm/i915/i915_gem.c +++ b/drivers/gpu/drm/i915/i915_gem.c @@ -2470,14 +2470,7 @@ int __i915_add_request(struct intel_engine_cs *ring, WARN_ON(request->batch_obj && obj); request->batch_obj = obj; - if (!i915.enable_execlists) { - /* Hold a reference to the current context so that we can inspect - * it later in case a hangcheck error event fires. - */ - request->ctx = ring->last_context; - if (request->ctx) - i915_gem_context_reference(request->ctx); - } + WARN_ON(request->ctx != ring->last_context); request->emitted_jiffies = jiffies; list_add_tail(&request->list, &ring->request_list); diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c index 1a9f884..05a7e33 100644 --- a/drivers/gpu/drm/i915/intel_ringbuffer.c +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c @@ -2186,6 +2186,8 @@ intel_ring_alloc_request(struct intel_engine_cs *ring, request->ring = ring; request->ringbuf = ring->buffer; request->uniq = dev_private->request_uniq++; + request->ctx = ctx; + i915_gem_context_reference(request->ctx); ret = i915_gem_get_seqno(ring->dev, &request->seqno); if (ret) {