Message ID | 20180522124924.5784-1-mika.kuoppala@linux.intel.com (mailing list archive) |
---|---|
State | New, archived |
Headers | show |
Quoting Mika Kuoppala (2018-05-22 13:49:24) > From: Mika Kuoppala <mika.kuoppala@intel.com> > > When checking if engine is idling on a kernel context, > the last request emitted to it could have been the exact > request to switch into kernel context. > > Do not bail out early even if engine has requests, > if the last request was for kernel context. > > Fixes: a89d1f921c15 ("drm/i915: Split i915_gem_timeline into individual timelines") > Cc: Chris Wilson <chris@chris-wilson.co.uk> > Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com> I feel there's some redundancy here (in the checks at different levels), but that's my fault. Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> -Chris
Quoting Mika Kuoppala (2018-05-22 13:49:24) > From: Mika Kuoppala <mika.kuoppala@intel.com> > > When checking if engine is idling on a kernel context, > the last request emitted to it could have been the exact > request to switch into kernel context. > > Do not bail out early even if engine has requests, > if the last request was for kernel context. > > Fixes: a89d1f921c15 ("drm/i915: Split i915_gem_timeline into individual timelines") > Cc: Chris Wilson <chris@chris-wilson.co.uk> > Signed-off-by: Mika Kuoppala <mika.kuoppala@intel.com> > --- > drivers/gpu/drm/i915/i915_gem_context.c | 5 ++++- > 1 file changed, 4 insertions(+), 1 deletion(-) > > diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c > index b69b18ef8120..3fe1212b0f7e 100644 > --- a/drivers/gpu/drm/i915/i915_gem_context.c > +++ b/drivers/gpu/drm/i915/i915_gem_context.c > @@ -595,7 +595,10 @@ static bool engine_has_idle_kernel_context(struct intel_engine_cs *engine) > lockdep_assert_held(&engine->i915->drm.struct_mutex); > > list_for_each_entry(ring, active_rings, active_link) { > - if (last_request_on_engine(ring->timeline, engine)) > + struct i915_request *rq = > + last_request_on_engine(ring->timeline, engine); > + > + if (rq && rq->gem_context != engine->i915->kernel_context) > return false; Ah, this isn't enough yet. The challenge is that we don't want to report false when there is an active batch followed by the kernel context. I think we can rely on the kernel request priority being the lowest here... -Chris
Hi Mika, Thank you for the patch! Yet something to improve: [auto build test ERROR on next-20180517] [cannot apply to drm-intel/for-linux-next v4.17-rc6 v4.17-rc5 v4.17-rc4 v4.17-rc6] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Mika-Kuoppala/drm-i915-Special-case-kernel_context-switch-request/20180524-233610 config: i386-allyesconfig (attached as .config) compiler: gcc-7 (Debian 7.3.0-16) 7.3.0 reproduce: # save the attached .config to linux build tree make ARCH=i386 All errors (new ones prefixed by >>): drivers/gpu/drm/i915/i915_gem_context.c: In function 'engine_has_idle_kernel_context': >> drivers/gpu/drm/i915/i915_gem_context.c:608:15: error: 'struct i915_request' has no member named 'gem_context' if (rq && rq->gem_context != engine->i915->kernel_context) ^~ vim +608 drivers/gpu/drm/i915/i915_gem_context.c 596 597 static bool engine_has_idle_kernel_context(struct intel_engine_cs *engine) 598 { 599 struct list_head * const active_rings = &engine->i915->gt.active_rings; 600 struct intel_ring *ring; 601 602 lockdep_assert_held(&engine->i915->drm.struct_mutex); 603 604 list_for_each_entry(ring, active_rings, active_link) { 605 struct i915_request *rq = 606 last_request_on_engine(ring->timeline, engine); 607 > 608 if (rq && rq->gem_context != engine->i915->kernel_context) 609 return false; 610 } 611 612 return intel_engine_has_kernel_context(engine); 613 } 614 --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c index b69b18ef8120..3fe1212b0f7e 100644 --- a/drivers/gpu/drm/i915/i915_gem_context.c +++ b/drivers/gpu/drm/i915/i915_gem_context.c @@ -595,7 +595,10 @@ static bool engine_has_idle_kernel_context(struct intel_engine_cs *engine) lockdep_assert_held(&engine->i915->drm.struct_mutex); list_for_each_entry(ring, active_rings, active_link) { - if (last_request_on_engine(ring->timeline, engine)) + struct i915_request *rq = + last_request_on_engine(ring->timeline, engine); + + if (rq && rq->gem_context != engine->i915->kernel_context) return false; }