Message ID | 1461078516-28678-2-git-send-email-david.s.gordon@intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
On 19/04/16 16:08, Dave Gordon wrote: > From: Alex Dai <yu.dai@intel.com> > > Now that we keep the GuC client process descriptor permanently mapped, > we don't really need to keep a local copy of the GuC's work-queue-head. > So we can simplify the code a little by not doing this. > > Signed-off-by: Alex Dai <yu.dai@intel.com> > Signed-off-by: Dave Gordon <david.s.gordon@intel.com> > --- > drivers/gpu/drm/i915/i915_guc_submission.c | 16 ++++------------ > drivers/gpu/drm/i915/intel_guc.h | 2 +- > 2 files changed, 5 insertions(+), 13 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_guc_submission.c b/drivers/gpu/drm/i915/i915_guc_submission.c > index d251699..4718b7a 100644 > --- a/drivers/gpu/drm/i915/i915_guc_submission.c > +++ b/drivers/gpu/drm/i915/i915_guc_submission.c > @@ -238,9 +238,6 @@ static int guc_ring_doorbell(struct i915_guc_client *gc) > db_exc.cookie = 1; > } > > - /* Finally, update the cached copy of the GuC's WQ head */ > - gc->wq_head = desc->head; > - > return ret; > } > > @@ -465,17 +462,10 @@ int i915_guc_wq_check_space(struct i915_guc_client *gc) > if (!gc) > return 0; > > - /* Quickly return if wq space is available since last time we cache the > - * head position. */ > - if (CIRC_SPACE(gc->wq_tail, gc->wq_head, gc->wq_size) >= size) > - return 0; > - > desc = gc->client_base + gc->proc_desc_offset; > > while (timeout_counter-- > 0) { > - gc->wq_head = desc->head; > - > - if (CIRC_SPACE(gc->wq_tail, gc->wq_head, gc->wq_size) >= size) { > + if (CIRC_SPACE(gc->wq_tail, desc->head, gc->wq_size) >= size) { > ret = 0; > break; > } > @@ -490,11 +480,13 @@ int i915_guc_wq_check_space(struct i915_guc_client *gc) > static int guc_add_workqueue_item(struct i915_guc_client *gc, > struct drm_i915_gem_request *rq) > { > + struct guc_process_desc *desc; > struct guc_wq_item *wqi; > void *base; > u32 tail, wq_len, wq_off, space; > > - space = CIRC_SPACE(gc->wq_tail, gc->wq_head, gc->wq_size); > + desc = gc->client_base + gc->proc_desc_offset; > + space = CIRC_SPACE(gc->wq_tail, desc->head, gc->wq_size); > if (WARN_ON(space < sizeof(struct guc_wq_item))) > return -ENOSPC; /* shouldn't happen */ > > diff --git a/drivers/gpu/drm/i915/intel_guc.h b/drivers/gpu/drm/i915/intel_guc.h > index 06050c241a..19ca593 100644 > --- a/drivers/gpu/drm/i915/intel_guc.h > +++ b/drivers/gpu/drm/i915/intel_guc.h > @@ -46,7 +46,7 @@ struct i915_guc_client { > uint32_t wq_offset; > uint32_t wq_size; > uint32_t wq_tail; > - uint32_t wq_head; > + uint32_t unused; /* Was 'wq_head' */ > > /* GuC submission statistics & status */ > uint64_t submissions[GUC_MAX_ENGINES_NUM]; > Looks OK to me, only with a disclaimer that I am not a GuC expert: Reviewed-by: Tvrtko Ursulin <tvrtko.ursulin@intel.com> Regards, Tvrtko
diff --git a/drivers/gpu/drm/i915/i915_guc_submission.c b/drivers/gpu/drm/i915/i915_guc_submission.c index d251699..4718b7a 100644 --- a/drivers/gpu/drm/i915/i915_guc_submission.c +++ b/drivers/gpu/drm/i915/i915_guc_submission.c @@ -238,9 +238,6 @@ static int guc_ring_doorbell(struct i915_guc_client *gc) db_exc.cookie = 1; } - /* Finally, update the cached copy of the GuC's WQ head */ - gc->wq_head = desc->head; - return ret; } @@ -465,17 +462,10 @@ int i915_guc_wq_check_space(struct i915_guc_client *gc) if (!gc) return 0; - /* Quickly return if wq space is available since last time we cache the - * head position. */ - if (CIRC_SPACE(gc->wq_tail, gc->wq_head, gc->wq_size) >= size) - return 0; - desc = gc->client_base + gc->proc_desc_offset; while (timeout_counter-- > 0) { - gc->wq_head = desc->head; - - if (CIRC_SPACE(gc->wq_tail, gc->wq_head, gc->wq_size) >= size) { + if (CIRC_SPACE(gc->wq_tail, desc->head, gc->wq_size) >= size) { ret = 0; break; } @@ -490,11 +480,13 @@ int i915_guc_wq_check_space(struct i915_guc_client *gc) static int guc_add_workqueue_item(struct i915_guc_client *gc, struct drm_i915_gem_request *rq) { + struct guc_process_desc *desc; struct guc_wq_item *wqi; void *base; u32 tail, wq_len, wq_off, space; - space = CIRC_SPACE(gc->wq_tail, gc->wq_head, gc->wq_size); + desc = gc->client_base + gc->proc_desc_offset; + space = CIRC_SPACE(gc->wq_tail, desc->head, gc->wq_size); if (WARN_ON(space < sizeof(struct guc_wq_item))) return -ENOSPC; /* shouldn't happen */ diff --git a/drivers/gpu/drm/i915/intel_guc.h b/drivers/gpu/drm/i915/intel_guc.h index 06050c241a..19ca593 100644 --- a/drivers/gpu/drm/i915/intel_guc.h +++ b/drivers/gpu/drm/i915/intel_guc.h @@ -46,7 +46,7 @@ struct i915_guc_client { uint32_t wq_offset; uint32_t wq_size; uint32_t wq_tail; - uint32_t wq_head; + uint32_t unused; /* Was 'wq_head' */ /* GuC submission statistics & status */ uint64_t submissions[GUC_MAX_ENGINES_NUM];