* [PATCH] drm/i915: Tidy reporting busy status during i915_gem_retire_requests() @ 2016-08-16 15:20 Chris Wilson 2016-08-16 15:45 ` [PATCH 1/2] " Chris Wilson 2016-08-16 15:54 ` ✗ Ro.CI.BAT: failure for " Patchwork 0 siblings, 2 replies; 7+ messages in thread From: Chris Wilson @ 2016-08-16 15:20 UTC (permalink / raw) To: intel-gfx; +Cc: Mika Kuoppala As we know by inspection whether any engine is still busy as we retire all the requests, we can pass that information back via return value rather than check again afterwards. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Mika Kuoppala <mika.kuoppala@intel.com> --- drivers/gpu/drm/i915/i915_gem_request.c | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_gem_request.c b/drivers/gpu/drm/i915/i915_gem_request.c index bf62427a35b7..d4315918b030 100644 --- a/drivers/gpu/drm/i915/i915_gem_request.c +++ b/drivers/gpu/drm/i915/i915_gem_request.c @@ -727,16 +727,18 @@ complete: return ret; } -static void engine_retire_requests(struct intel_engine_cs *engine) +static bool engine_retire_requests(struct intel_engine_cs *engine) { struct drm_i915_gem_request *request, *next; list_for_each_entry_safe(request, next, &engine->request_list, link) { if (!i915_gem_request_completed(request)) - break; + return false; i915_gem_request_retire(request); } + + return true; } void i915_gem_retire_requests(struct drm_i915_private *dev_priv) @@ -751,8 +753,7 @@ void i915_gem_retire_requests(struct drm_i915_private *dev_priv) GEM_BUG_ON(!dev_priv->gt.awake); for_each_engine(engine, dev_priv) { - engine_retire_requests(engine); - if (!intel_engine_is_active(engine)) + if (engine_retire_requests(engine)) dev_priv->gt.active_engines &= ~intel_engine_flag(engine); } -- 2.8.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 1/2] drm/i915: Tidy reporting busy status during i915_gem_retire_requests() 2016-08-16 15:20 [PATCH] drm/i915: Tidy reporting busy status during i915_gem_retire_requests() Chris Wilson @ 2016-08-16 15:45 ` Chris Wilson 2016-08-16 15:45 ` [PATCH 2/2] drm/i915: Make for_each_engine_masked() more compact and quicker Chris Wilson ` (2 more replies) 2016-08-16 15:54 ` ✗ Ro.CI.BAT: failure for " Patchwork 1 sibling, 3 replies; 7+ messages in thread From: Chris Wilson @ 2016-08-16 15:45 UTC (permalink / raw) To: intel-gfx; +Cc: Mika Kuoppala As we know by inspection whether any engine is still busy as we retire all the requests, we can pass that information back via return value rather than check again afterwards. v2: A little more polish missed in patch splitting Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Mika Kuoppala <mika.kuoppala@intel.com> --- drivers/gpu/drm/i915/i915_gem_request.c | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_gem_request.c b/drivers/gpu/drm/i915/i915_gem_request.c index bf62427a35b7..02242736e492 100644 --- a/drivers/gpu/drm/i915/i915_gem_request.c +++ b/drivers/gpu/drm/i915/i915_gem_request.c @@ -727,16 +727,18 @@ complete: return ret; } -static void engine_retire_requests(struct intel_engine_cs *engine) +static bool engine_retire_requests(struct intel_engine_cs *engine) { struct drm_i915_gem_request *request, *next; list_for_each_entry_safe(request, next, &engine->request_list, link) { if (!i915_gem_request_completed(request)) - break; + return false; i915_gem_request_retire(request); } + + return true; } void i915_gem_retire_requests(struct drm_i915_private *dev_priv) @@ -750,9 +752,8 @@ void i915_gem_retire_requests(struct drm_i915_private *dev_priv) GEM_BUG_ON(!dev_priv->gt.awake); - for_each_engine(engine, dev_priv) { - engine_retire_requests(engine); - if (!intel_engine_is_active(engine)) + for_each_engine_masked(engine, dev_priv, dev_priv->gt.active_engines) { + if (engine_retire_requests(engine)) dev_priv->gt.active_engines &= ~intel_engine_flag(engine); } -- 2.8.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 7+ messages in thread
* [PATCH 2/2] drm/i915: Make for_each_engine_masked() more compact and quicker 2016-08-16 15:45 ` [PATCH 1/2] " Chris Wilson @ 2016-08-16 15:45 ` Chris Wilson 2016-08-17 15:12 ` Mika Kuoppala 2016-08-17 10:10 ` [PATCH 1/2] drm/i915: Tidy reporting busy status during i915_gem_retire_requests() Joonas Lahtinen 2016-08-17 15:04 ` Mika Kuoppala 2 siblings, 1 reply; 7+ messages in thread From: Chris Wilson @ 2016-08-16 15:45 UTC (permalink / raw) To: intel-gfx; +Cc: Mika Kuoppala Rather than walk the full array of engines checking whether each is in the mask in turn, we can use the mask to jump to the right engines. This should quicker for a sparse array of engines or mask, whilst generating smaller code: text data bss dec hex filename 1251010 4579 800 1256389 132bc5 drivers/gpu/drm/i915/i915.ko 1250530 4579 800 1255909 1329e5 drivers/gpu/drm/i915/i915.ko The downside is that we have to pass in a temporary, alas no C99 iterators yet. Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> Cc: Mika Kuoppala <mika.kuoppala@intel.com> --- drivers/gpu/drm/i915/i915_drv.h | 15 +++++++++------ drivers/gpu/drm/i915/i915_gem_request.c | 3 ++- drivers/gpu/drm/i915/i915_guc_submission.c | 3 ++- drivers/gpu/drm/i915/i915_irq.c | 3 ++- drivers/gpu/drm/i915/intel_uncore.c | 9 ++++++--- 5 files changed, 21 insertions(+), 12 deletions(-) diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h index f4985279182c..2beb83023213 100644 --- a/drivers/gpu/drm/i915/i915_drv.h +++ b/drivers/gpu/drm/i915/i915_drv.h @@ -2110,13 +2110,16 @@ static inline struct drm_i915_private *guc_to_i915(struct intel_guc *guc) for_each_if (((id__) = (engine__)->id, \ intel_engine_initialized(engine__))) +#define __mask_next_bit(mask) ({ \ + int __idx = ffs(mask) - 1; \ + mask &= ~BIT(__idx); \ + __idx; \ +}) + /* Iterator over subset of engines selected by mask */ -#define for_each_engine_masked(engine__, dev_priv__, mask__) \ - for ((engine__) = &(dev_priv__)->engine[0]; \ - (engine__) < &(dev_priv__)->engine[I915_NUM_ENGINES]; \ - (engine__)++) \ - for_each_if (((mask__) & intel_engine_flag(engine__)) && \ - intel_engine_initialized(engine__)) +#define for_each_engine_masked(engine__, dev_priv__, mask__, tmp__) \ + for (tmp__ = mask__ & INTEL_INFO(dev_priv__)->ring_mask; \ + tmp__ ? (engine__ = &(dev_priv__)->engine[__mask_next_bit(tmp__)]), 1 : 0; ) enum hdmi_force_audio { HDMI_AUDIO_OFF_DVI = -2, /* no aux data for HDMI-DVI converter */ diff --git a/drivers/gpu/drm/i915/i915_gem_request.c b/drivers/gpu/drm/i915/i915_gem_request.c index 02242736e492..44b464a20eb4 100644 --- a/drivers/gpu/drm/i915/i915_gem_request.c +++ b/drivers/gpu/drm/i915/i915_gem_request.c @@ -744,6 +744,7 @@ static bool engine_retire_requests(struct intel_engine_cs *engine) void i915_gem_retire_requests(struct drm_i915_private *dev_priv) { struct intel_engine_cs *engine; + unsigned tmp; lockdep_assert_held(&dev_priv->drm.struct_mutex); @@ -752,7 +753,7 @@ void i915_gem_retire_requests(struct drm_i915_private *dev_priv) GEM_BUG_ON(!dev_priv->gt.awake); - for_each_engine_masked(engine, dev_priv, dev_priv->gt.active_engines) { + for_each_engine_masked(engine, dev_priv, dev_priv->gt.active_engines, tmp) { if (engine_retire_requests(engine)) dev_priv->gt.active_engines &= ~intel_engine_flag(engine); } diff --git a/drivers/gpu/drm/i915/i915_guc_submission.c b/drivers/gpu/drm/i915/i915_guc_submission.c index bb4079223e39..6475bee90730 100644 --- a/drivers/gpu/drm/i915/i915_guc_submission.c +++ b/drivers/gpu/drm/i915/i915_guc_submission.c @@ -330,6 +330,7 @@ static void guc_init_ctx_desc(struct intel_guc *guc, struct i915_gem_context *ctx = client->owner; struct guc_context_desc desc; struct sg_table *sg; + unsigned tmp; u32 gfx_addr; memset(&desc, 0, sizeof(desc)); @@ -339,7 +340,7 @@ static void guc_init_ctx_desc(struct intel_guc *guc, desc.priority = client->priority; desc.db_id = client->doorbell_id; - for_each_engine_masked(engine, dev_priv, client->engines) { + for_each_engine_masked(engine, dev_priv, client->engines, tmp) { struct intel_context *ce = &ctx->engine[engine->id]; uint32_t guc_engine_id = engine->guc_id; struct guc_execlist_context *lrc = &desc.lrc[guc_engine_id]; diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c index 7a236dd337fa..f4f0c410f72b 100644 --- a/drivers/gpu/drm/i915/i915_irq.c +++ b/drivers/gpu/drm/i915/i915_irq.c @@ -3140,6 +3140,7 @@ static void i915_hangcheck_elapsed(struct work_struct *work) if (hung) { char msg[80]; + unsigned tmp; int len; /* If some rings hung but others were still busy, only @@ -3149,7 +3150,7 @@ static void i915_hangcheck_elapsed(struct work_struct *work) hung &= ~stuck; len = scnprintf(msg, sizeof(msg), "%s on ", stuck == hung ? "No progress" : "Hang"); - for_each_engine_masked(engine, dev_priv, hung) + for_each_engine_masked(engine, dev_priv, hung, tmp) len += scnprintf(msg + len, sizeof(msg) - len, "%s, ", engine->name); msg[len-2] = '\0'; diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c index a6b04da4bf21..3a797c35d253 100644 --- a/drivers/gpu/drm/i915/intel_uncore.c +++ b/drivers/gpu/drm/i915/intel_uncore.c @@ -1597,8 +1597,10 @@ static int gen6_reset_engines(struct drm_i915_private *dev_priv, if (engine_mask == ALL_ENGINES) { hw_mask = GEN6_GRDOM_FULL; } else { + unsigned tmp; + hw_mask = 0; - for_each_engine_masked(engine, dev_priv, engine_mask) + for_each_engine_masked(engine, dev_priv, engine_mask, tmp) hw_mask |= hw_engine_mask[engine->id]; } @@ -1714,15 +1716,16 @@ static int gen8_reset_engines(struct drm_i915_private *dev_priv, unsigned engine_mask) { struct intel_engine_cs *engine; + unsigned tmp; - for_each_engine_masked(engine, dev_priv, engine_mask) + for_each_engine_masked(engine, dev_priv, engine_mask, tmp) if (gen8_request_engine_reset(engine)) goto not_ready; return gen6_reset_engines(dev_priv, engine_mask); not_ready: - for_each_engine_masked(engine, dev_priv, engine_mask) + for_each_engine_masked(engine, dev_priv, engine_mask, tmp) gen8_unrequest_engine_reset(engine); return -EIO; -- 2.8.1 _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH 2/2] drm/i915: Make for_each_engine_masked() more compact and quicker 2016-08-16 15:45 ` [PATCH 2/2] drm/i915: Make for_each_engine_masked() more compact and quicker Chris Wilson @ 2016-08-17 15:12 ` Mika Kuoppala 0 siblings, 0 replies; 7+ messages in thread From: Mika Kuoppala @ 2016-08-17 15:12 UTC (permalink / raw) To: Chris Wilson, intel-gfx Chris Wilson <chris@chris-wilson.co.uk> writes: > Rather than walk the full array of engines checking whether each is in > the mask in turn, we can use the mask to jump to the right engines. This > should quicker for a sparse array of engines or mask, whilst generating > smaller code: > I just checked that with this patch the bsfl was in the assembly. Could be faster but our number of engines is quite small. Checkpatch complains that 'unsigned's should be 'unsigned int's. Otherwise this looks ok for me. Noticed that Joonas and you were wrestling about this a little on the irc and I didn't quite get what the concerns were from the irc logs. -Mika > text data bss dec hex filename > 1251010 4579 800 1256389 132bc5 drivers/gpu/drm/i915/i915.ko > 1250530 4579 800 1255909 1329e5 drivers/gpu/drm/i915/i915.ko > > The downside is that we have to pass in a temporary, alas no C99 > iterators yet. > > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> > Cc: Mika Kuoppala <mika.kuoppala@intel.com> > --- > drivers/gpu/drm/i915/i915_drv.h | 15 +++++++++------ > drivers/gpu/drm/i915/i915_gem_request.c | 3 ++- > drivers/gpu/drm/i915/i915_guc_submission.c | 3 ++- > drivers/gpu/drm/i915/i915_irq.c | 3 ++- > drivers/gpu/drm/i915/intel_uncore.c | 9 ++++++--- > 5 files changed, 21 insertions(+), 12 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h > index f4985279182c..2beb83023213 100644 > --- a/drivers/gpu/drm/i915/i915_drv.h > +++ b/drivers/gpu/drm/i915/i915_drv.h > @@ -2110,13 +2110,16 @@ static inline struct drm_i915_private *guc_to_i915(struct intel_guc *guc) > for_each_if (((id__) = (engine__)->id, \ > intel_engine_initialized(engine__))) > > +#define __mask_next_bit(mask) ({ \ > + int __idx = ffs(mask) - 1; \ > + mask &= ~BIT(__idx); \ > + __idx; \ > +}) > + > /* Iterator over subset of engines selected by mask */ > -#define for_each_engine_masked(engine__, dev_priv__, mask__) \ > - for ((engine__) = &(dev_priv__)->engine[0]; \ > - (engine__) < &(dev_priv__)->engine[I915_NUM_ENGINES]; \ > - (engine__)++) \ > - for_each_if (((mask__) & intel_engine_flag(engine__)) && \ > - intel_engine_initialized(engine__)) > +#define for_each_engine_masked(engine__, dev_priv__, mask__, tmp__) \ > + for (tmp__ = mask__ & INTEL_INFO(dev_priv__)->ring_mask; \ > + tmp__ ? (engine__ = &(dev_priv__)->engine[__mask_next_bit(tmp__)]), 1 : 0; ) > > enum hdmi_force_audio { > HDMI_AUDIO_OFF_DVI = -2, /* no aux data for HDMI-DVI converter */ > diff --git a/drivers/gpu/drm/i915/i915_gem_request.c b/drivers/gpu/drm/i915/i915_gem_request.c > index 02242736e492..44b464a20eb4 100644 > --- a/drivers/gpu/drm/i915/i915_gem_request.c > +++ b/drivers/gpu/drm/i915/i915_gem_request.c > @@ -744,6 +744,7 @@ static bool engine_retire_requests(struct intel_engine_cs *engine) > void i915_gem_retire_requests(struct drm_i915_private *dev_priv) > { > struct intel_engine_cs *engine; > + unsigned tmp; > > lockdep_assert_held(&dev_priv->drm.struct_mutex); > > @@ -752,7 +753,7 @@ void i915_gem_retire_requests(struct drm_i915_private *dev_priv) > > GEM_BUG_ON(!dev_priv->gt.awake); > > - for_each_engine_masked(engine, dev_priv, dev_priv->gt.active_engines) { > + for_each_engine_masked(engine, dev_priv, dev_priv->gt.active_engines, tmp) { > if (engine_retire_requests(engine)) > dev_priv->gt.active_engines &= ~intel_engine_flag(engine); > } > diff --git a/drivers/gpu/drm/i915/i915_guc_submission.c b/drivers/gpu/drm/i915/i915_guc_submission.c > index bb4079223e39..6475bee90730 100644 > --- a/drivers/gpu/drm/i915/i915_guc_submission.c > +++ b/drivers/gpu/drm/i915/i915_guc_submission.c > @@ -330,6 +330,7 @@ static void guc_init_ctx_desc(struct intel_guc *guc, > struct i915_gem_context *ctx = client->owner; > struct guc_context_desc desc; > struct sg_table *sg; > + unsigned tmp; > u32 gfx_addr; > > memset(&desc, 0, sizeof(desc)); > @@ -339,7 +340,7 @@ static void guc_init_ctx_desc(struct intel_guc *guc, > desc.priority = client->priority; > desc.db_id = client->doorbell_id; > > - for_each_engine_masked(engine, dev_priv, client->engines) { > + for_each_engine_masked(engine, dev_priv, client->engines, tmp) { > struct intel_context *ce = &ctx->engine[engine->id]; > uint32_t guc_engine_id = engine->guc_id; > struct guc_execlist_context *lrc = &desc.lrc[guc_engine_id]; > diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c > index 7a236dd337fa..f4f0c410f72b 100644 > --- a/drivers/gpu/drm/i915/i915_irq.c > +++ b/drivers/gpu/drm/i915/i915_irq.c > @@ -3140,6 +3140,7 @@ static void i915_hangcheck_elapsed(struct work_struct *work) > > if (hung) { > char msg[80]; > + unsigned tmp; > int len; > > /* If some rings hung but others were still busy, only > @@ -3149,7 +3150,7 @@ static void i915_hangcheck_elapsed(struct work_struct *work) > hung &= ~stuck; > len = scnprintf(msg, sizeof(msg), > "%s on ", stuck == hung ? "No progress" : "Hang"); > - for_each_engine_masked(engine, dev_priv, hung) > + for_each_engine_masked(engine, dev_priv, hung, tmp) > len += scnprintf(msg + len, sizeof(msg) - len, > "%s, ", engine->name); > msg[len-2] = '\0'; > diff --git a/drivers/gpu/drm/i915/intel_uncore.c b/drivers/gpu/drm/i915/intel_uncore.c > index a6b04da4bf21..3a797c35d253 100644 > --- a/drivers/gpu/drm/i915/intel_uncore.c > +++ b/drivers/gpu/drm/i915/intel_uncore.c > @@ -1597,8 +1597,10 @@ static int gen6_reset_engines(struct drm_i915_private *dev_priv, > if (engine_mask == ALL_ENGINES) { > hw_mask = GEN6_GRDOM_FULL; > } else { > + unsigned tmp; > + > hw_mask = 0; > - for_each_engine_masked(engine, dev_priv, engine_mask) > + for_each_engine_masked(engine, dev_priv, engine_mask, tmp) > hw_mask |= hw_engine_mask[engine->id]; > } > > @@ -1714,15 +1716,16 @@ static int gen8_reset_engines(struct drm_i915_private *dev_priv, > unsigned engine_mask) > { > struct intel_engine_cs *engine; > + unsigned tmp; > > - for_each_engine_masked(engine, dev_priv, engine_mask) > + for_each_engine_masked(engine, dev_priv, engine_mask, tmp) > if (gen8_request_engine_reset(engine)) > goto not_ready; > > return gen6_reset_engines(dev_priv, engine_mask); > > not_ready: > - for_each_engine_masked(engine, dev_priv, engine_mask) > + for_each_engine_masked(engine, dev_priv, engine_mask, tmp) > gen8_unrequest_engine_reset(engine); > > return -EIO; > -- > 2.8.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] drm/i915: Tidy reporting busy status during i915_gem_retire_requests() 2016-08-16 15:45 ` [PATCH 1/2] " Chris Wilson 2016-08-16 15:45 ` [PATCH 2/2] drm/i915: Make for_each_engine_masked() more compact and quicker Chris Wilson @ 2016-08-17 10:10 ` Joonas Lahtinen 2016-08-17 15:04 ` Mika Kuoppala 2 siblings, 0 replies; 7+ messages in thread From: Joonas Lahtinen @ 2016-08-17 10:10 UTC (permalink / raw) To: Chris Wilson, intel-gfx; +Cc: Mika Kuoppala On ti, 2016-08-16 at 16:45 +0100, Chris Wilson wrote: > As we know by inspection whether any engine is still busy as we retire > all the requests, we can pass that information back via return value > rather than check again afterwards. > > v2: A little more polish missed in patch splitting > > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> > Cc: Mika Kuoppala <mika.kuoppala@intel.com> > --- > drivers/gpu/drm/i915/i915_gem_request.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_gem_request.c b/drivers/gpu/drm/i915/i915_gem_request.c > index bf62427a35b7..02242736e492 100644 > --- a/drivers/gpu/drm/i915/i915_gem_request.c > +++ b/drivers/gpu/drm/i915/i915_gem_request.c > @@ -727,16 +727,18 @@ complete: > return ret; > } > > -static void engine_retire_requests(struct intel_engine_cs *engine) > +static bool engine_retire_requests(struct intel_engine_cs *engine) > { > struct drm_i915_gem_request *request, *next; > > list_for_each_entry_safe(request, next, &engine->request_list, link) { > if (!i915_gem_request_completed(request)) > - break; > + return false; > > i915_gem_request_retire(request); > } > + > + return true; > } > > void i915_gem_retire_requests(struct drm_i915_private *dev_priv) > @@ -750,9 +752,8 @@ void i915_gem_retire_requests(struct drm_i915_private *dev_priv) > > GEM_BUG_ON(!dev_priv->gt.awake); > > - for_each_engine(engine, dev_priv) { > - engine_retire_requests(engine); > - if (!intel_engine_is_active(engine)) > + for_each_engine_masked(engine, dev_priv, dev_priv->gt.active_engines) { > + if (engine_retire_requests(engine)) > dev_priv->gt.active_engines &= ~intel_engine_flag(engine); > } Drop the braces. Reviewed-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Regards, Joonas -- Joonas Lahtinen Open Source Technology Center Intel Corporation _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH 1/2] drm/i915: Tidy reporting busy status during i915_gem_retire_requests() 2016-08-16 15:45 ` [PATCH 1/2] " Chris Wilson 2016-08-16 15:45 ` [PATCH 2/2] drm/i915: Make for_each_engine_masked() more compact and quicker Chris Wilson 2016-08-17 10:10 ` [PATCH 1/2] drm/i915: Tidy reporting busy status during i915_gem_retire_requests() Joonas Lahtinen @ 2016-08-17 15:04 ` Mika Kuoppala 2 siblings, 0 replies; 7+ messages in thread From: Mika Kuoppala @ 2016-08-17 15:04 UTC (permalink / raw) To: Chris Wilson, intel-gfx Chris Wilson <chris@chris-wilson.co.uk> writes: > As we know by inspection whether any engine is still busy as we retire > all the requests, we can pass that information back via return value > rather than check again afterwards. > > v2: A little more polish missed in patch splitting > > Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk> > Cc: Mika Kuoppala <mika.kuoppala@intel.com> Reviewed-by: Mika Kuoppala <mika.kuoppala@intel.com> > --- > drivers/gpu/drm/i915/i915_gem_request.c | 11 ++++++----- > 1 file changed, 6 insertions(+), 5 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_gem_request.c b/drivers/gpu/drm/i915/i915_gem_request.c > index bf62427a35b7..02242736e492 100644 > --- a/drivers/gpu/drm/i915/i915_gem_request.c > +++ b/drivers/gpu/drm/i915/i915_gem_request.c > @@ -727,16 +727,18 @@ complete: > return ret; > } > > -static void engine_retire_requests(struct intel_engine_cs *engine) > +static bool engine_retire_requests(struct intel_engine_cs *engine) > { > struct drm_i915_gem_request *request, *next; > > list_for_each_entry_safe(request, next, &engine->request_list, link) { > if (!i915_gem_request_completed(request)) > - break; > + return false; > > i915_gem_request_retire(request); > } > + > + return true; > } > > void i915_gem_retire_requests(struct drm_i915_private *dev_priv) > @@ -750,9 +752,8 @@ void i915_gem_retire_requests(struct drm_i915_private *dev_priv) > > GEM_BUG_ON(!dev_priv->gt.awake); > > - for_each_engine(engine, dev_priv) { > - engine_retire_requests(engine); > - if (!intel_engine_is_active(engine)) > + for_each_engine_masked(engine, dev_priv, dev_priv->gt.active_engines) { > + if (engine_retire_requests(engine)) > dev_priv->gt.active_engines &= ~intel_engine_flag(engine); > } > > -- > 2.8.1 > > _______________________________________________ > Intel-gfx mailing list > Intel-gfx@lists.freedesktop.org > https://lists.freedesktop.org/mailman/listinfo/intel-gfx _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 7+ messages in thread
* ✗ Ro.CI.BAT: failure for drm/i915: Tidy reporting busy status during i915_gem_retire_requests() 2016-08-16 15:20 [PATCH] drm/i915: Tidy reporting busy status during i915_gem_retire_requests() Chris Wilson 2016-08-16 15:45 ` [PATCH 1/2] " Chris Wilson @ 2016-08-16 15:54 ` Patchwork 1 sibling, 0 replies; 7+ messages in thread From: Patchwork @ 2016-08-16 15:54 UTC (permalink / raw) To: Chris Wilson; +Cc: intel-gfx == Series Details == Series: drm/i915: Tidy reporting busy status during i915_gem_retire_requests() URL : https://patchwork.freedesktop.org/series/11170/ State : failure == Summary == Series 11170v1 drm/i915: Tidy reporting busy status during i915_gem_retire_requests() http://patchwork.freedesktop.org/api/1.0/series/11170/revisions/1/mbox Test kms_cursor_legacy: Subgroup basic-flip-vs-cursor-legacy: fail -> PASS (fi-hsw-i7-4770k) pass -> FAIL (ro-bdw-i5-5250u) Subgroup basic-flip-vs-cursor-varying-size: pass -> FAIL (ro-bdw-i5-5250u) Test kms_pipe_crc_basic: Subgroup suspend-read-crc-pipe-a: skip -> DMESG-WARN (ro-bdw-i7-5557U) Subgroup suspend-read-crc-pipe-b: pass -> DMESG-WARN (ro-bdw-i7-5600u) dmesg-warn -> SKIP (ro-bdw-i7-5557U) Subgroup suspend-read-crc-pipe-c: dmesg-warn -> PASS (ro-bdw-i7-5600u) skip -> DMESG-WARN (ro-bdw-i5-5250u) fi-hsw-i7-4770k total:201 pass:180 dwarn:0 dfail:0 fail:0 skip:20 fi-kbl-qkkr total:244 pass:187 dwarn:28 dfail:0 fail:3 skip:26 fi-skl-i7-6700k total:244 pass:208 dwarn:4 dfail:2 fail:2 skip:28 fi-snb-i7-2600 total:244 pass:202 dwarn:0 dfail:0 fail:0 skip:42 ro-bdw-i5-5250u total:240 pass:218 dwarn:2 dfail:0 fail:2 skip:18 ro-bdw-i7-5557U total:240 pass:220 dwarn:2 dfail:0 fail:0 skip:18 ro-bdw-i7-5600u total:240 pass:206 dwarn:1 dfail:0 fail:1 skip:32 ro-bsw-n3050 total:240 pass:194 dwarn:0 dfail:0 fail:4 skip:42 ro-byt-n2820 total:240 pass:197 dwarn:0 dfail:0 fail:3 skip:40 ro-hsw-i3-4010u total:240 pass:214 dwarn:0 dfail:0 fail:0 skip:26 ro-hsw-i7-4770r total:240 pass:185 dwarn:0 dfail:0 fail:0 skip:55 ro-ilk1-i5-650 total:235 pass:174 dwarn:0 dfail:0 fail:1 skip:60 ro-ivb-i7-3770 total:240 pass:205 dwarn:0 dfail:0 fail:0 skip:35 ro-ivb2-i7-3770 total:240 pass:209 dwarn:0 dfail:0 fail:0 skip:31 ro-skl3-i5-6260u total:240 pass:222 dwarn:0 dfail:0 fail:4 skip:14 Results at /archive/results/CI_IGT_test/RO_Patchwork_1893/ 25a2712 drm-intel-nightly: 2016y-08m-16d-14h-54m-04s UTC integration manifest c527108 drm/i915: Tidy reporting busy status during i915_gem_retire_requests() _______________________________________________ Intel-gfx mailing list Intel-gfx@lists.freedesktop.org https://lists.freedesktop.org/mailman/listinfo/intel-gfx ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2016-08-17 15:13 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2016-08-16 15:20 [PATCH] drm/i915: Tidy reporting busy status during i915_gem_retire_requests() Chris Wilson 2016-08-16 15:45 ` [PATCH 1/2] " Chris Wilson 2016-08-16 15:45 ` [PATCH 2/2] drm/i915: Make for_each_engine_masked() more compact and quicker Chris Wilson 2016-08-17 15:12 ` Mika Kuoppala 2016-08-17 10:10 ` [PATCH 1/2] drm/i915: Tidy reporting busy status during i915_gem_retire_requests() Joonas Lahtinen 2016-08-17 15:04 ` Mika Kuoppala 2016-08-16 15:54 ` ✗ Ro.CI.BAT: failure for " Patchwork
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox