On ke, 2016-07-20 at 10:00 +0100, Chris Wilson wrote: > Rather than recomputing whether semaphores are enabled, we can do that > computation once during early initialisation as the i915.semaphores > module parameter is now read-only. Has been since 2014 at least. > > Signed-off-by: Chris Wilson <chris@xxxxxxxxxxxxxxxxxx> > --- > drivers/gpu/drm/i915/i915_debugfs.c | 2 +- > drivers/gpu/drm/i915/i915_drv.c | 25 +++---------------------- > drivers/gpu/drm/i915/i915_drv.h | 3 ++- > drivers/gpu/drm/i915/i915_gem.c | 23 ++++++++++++++++++++++- > drivers/gpu/drm/i915/i915_gem_context.c | 2 +- > drivers/gpu/drm/i915/i915_gpu_error.c | 2 +- > drivers/gpu/drm/i915/intel_ringbuffer.c | 6 +++--- > 7 files changed, 33 insertions(+), 30 deletions(-) > > diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c > index 618f8cf210fc..9aa62c5b5f65 100644 > --- a/drivers/gpu/drm/i915/i915_debugfs.c > +++ b/drivers/gpu/drm/i915/i915_debugfs.c > @@ -3220,7 +3220,7 @@ static int i915_semaphore_status(struct seq_file *m, void *unused) > enum intel_engine_id id; > int j, ret; > > - if (!i915_semaphore_is_enabled(dev_priv)) { > + if (!i915.semaphores) { > seq_puts(m, "Semaphores are disabled\n"); > return 0; > } > diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c > index c5b7b8e0678a..f4110bdb7b3e 100644 > --- a/drivers/gpu/drm/i915/i915_drv.c > +++ b/drivers/gpu/drm/i915/i915_drv.c > @@ -228,27 +228,6 @@ static void intel_detect_pch(struct drm_device *dev) > pci_dev_put(pch); > } > > -bool i915_semaphore_is_enabled(struct drm_i915_private *dev_priv) > -{ > - if (INTEL_GEN(dev_priv) < 6) > - return false; > - > - if (i915.semaphores >= 0) > - return i915.semaphores; > - > - /* TODO: make semaphores and Execlists play nicely together */ > - if (i915.enable_execlists) > - return false; > - > -#ifdef CONFIG_INTEL_IOMMU > - /* Enable semaphores on SNB when IO remapping is off */ > - if (IS_GEN6(dev_priv) && intel_iommu_gfx_mapped) > - return false; > -#endif > - > - return true; > -} > - > static int i915_getparam(struct drm_device *dev, void *data, > struct drm_file *file_priv) > { > @@ -324,7 +303,7 @@ static int i915_getparam(struct drm_device *dev, void *data, > value = 1; > break; > case I915_PARAM_HAS_SEMAPHORES: > - value = i915_semaphore_is_enabled(dev_priv); > + value = i915.semaphores; > break; > case I915_PARAM_HAS_PRIME_VMAP_FLUSH: > value = 1; > @@ -999,6 +978,8 @@ static void intel_sanitize_options(struct drm_i915_private *dev_priv) > i915.enable_ppgtt = > intel_sanitize_enable_ppgtt(dev_priv, i915.enable_ppgtt); > DRM_DEBUG_DRIVER("ppgtt mode: %i\n", i915.enable_ppgtt); > + > + i915.semaphores = intel_sanitize_semaphores(dev_priv, i915.semaphores); All the same to DRM_DEBUG_DRIVER too? Otherwise looks sane/mechanical to me, Reviewed-by: Joonas Lahtinen <joonas.lahtinen@xxxxxxxxxxxxxxx> Regards, Joonas > } > > /** > diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h > index 3ca1acec1522..0f408ada1c65 100644 > --- a/drivers/gpu/drm/i915/i915_drv.h > +++ b/drivers/gpu/drm/i915/i915_drv.h > @@ -2813,6 +2813,8 @@ extern int i915_resume_switcheroo(struct drm_device *dev); > int intel_sanitize_enable_ppgtt(struct drm_i915_private *dev_priv, > int enable_ppgtt); > > +bool intel_sanitize_semaphores(struct drm_i915_private *dev_priv, int value); > + > /* i915_drv.c */ > void __printf(3, 4) > __i915_printk(struct drm_i915_private *dev_priv, const char *level, > @@ -3641,7 +3643,6 @@ extern void intel_set_rps(struct drm_i915_private *dev_priv, u8 val); > extern void intel_set_memory_cxsr(struct drm_i915_private *dev_priv, > bool enable); > > -extern bool i915_semaphore_is_enabled(struct drm_i915_private *dev_priv); > int i915_reg_read_ioctl(struct drm_device *dev, void *data, > struct drm_file *file); > > diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c > index 536acd527359..40047eb48826 100644 > --- a/drivers/gpu/drm/i915/i915_gem.c > +++ b/drivers/gpu/drm/i915/i915_gem.c > @@ -2856,7 +2856,7 @@ __i915_gem_object_sync(struct drm_i915_gem_object *obj, > if (i915_gem_request_completed(from_req)) > return 0; > > - if (!i915_semaphore_is_enabled(to_i915(obj->base.dev))) { > + if (!i915.semaphores) { > struct drm_i915_private *i915 = to_i915(obj->base.dev); > ret = __i915_wait_request(from_req, > i915->mm.interruptible, > @@ -4537,6 +4537,27 @@ out: > return ret; > } > > +bool intel_sanitize_semaphores(struct drm_i915_private *dev_priv, int value) > +{ > + if (INTEL_INFO(dev_priv)->gen < 6) > + return false; > + > + /* TODO: make semaphores and Execlists play nicely together */ > + if (i915.enable_execlists) > + return false; > + > + if (value >= 0) > + return value; > + > +#ifdef CONFIG_INTEL_IOMMU > + /* Enable semaphores on SNB when IO remapping is off */ > + if (INTEL_INFO(dev_priv)->gen == 6 && intel_iommu_gfx_mapped) > + return false; > +#endif > + > + return true; > +} > + > int i915_gem_init(struct drm_device *dev) > { > struct drm_i915_private *dev_priv = to_i915(dev); > diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c > index 2600939fc2ee..bd13d084e19c 100644 > --- a/drivers/gpu/drm/i915/i915_gem_context.c > +++ b/drivers/gpu/drm/i915/i915_gem_context.c > @@ -556,7 +556,7 @@ mi_set_context(struct drm_i915_gem_request *req, u32 hw_flags) > u32 flags = hw_flags | MI_MM_SPACE_GTT; > const int num_rings = > /* Use an extended w/a on ivb+ if signalling from other rings */ > - i915_semaphore_is_enabled(dev_priv) ? > + i915.semaphores ? > hweight32(INTEL_INFO(dev_priv)->ring_mask) - 1 : > 0; > int len, ret; > diff --git a/drivers/gpu/drm/i915/i915_gpu_error.c b/drivers/gpu/drm/i915/i915_gpu_error.c > index 6daaf4ecd2da..4d39c7284605 100644 > --- a/drivers/gpu/drm/i915/i915_gpu_error.c > +++ b/drivers/gpu/drm/i915/i915_gpu_error.c > @@ -863,7 +863,7 @@ static void gen8_record_semaphore_state(struct drm_i915_private *dev_priv, > struct intel_engine_cs *to; > enum intel_engine_id id; > > - if (!i915_semaphore_is_enabled(dev_priv)) > + if (!i915.semaphores) > return; > > if (!error->semaphore_obj) > diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c > index b9638e19d304..b844e6984ae7 100644 > --- a/drivers/gpu/drm/i915/intel_ringbuffer.c > +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c > @@ -2679,7 +2679,7 @@ static void intel_ring_init_semaphores(struct drm_i915_private *dev_priv, > struct drm_i915_gem_object *obj; > int ret, i; > > - if (!i915_semaphore_is_enabled(dev_priv)) > + if (!i915.semaphores) > return; > > if (INTEL_GEN(dev_priv) >= 8 && !dev_priv->semaphore_obj) { > @@ -2700,7 +2700,7 @@ static void intel_ring_init_semaphores(struct drm_i915_private *dev_priv, > } > } > > - if (!i915_semaphore_is_enabled(dev_priv)) > + if (!i915.semaphores) > return; > > if (INTEL_GEN(dev_priv) >= 8) { > @@ -2838,7 +2838,7 @@ int intel_init_render_ring_buffer(struct intel_engine_cs *engine) > engine->init_context = intel_rcs_ctx_init; > engine->add_request = gen8_render_add_request; > engine->flush = gen8_render_ring_flush; > - if (i915_semaphore_is_enabled(dev_priv)) > + if (i915.semaphores) > engine->semaphore.signal = gen8_rcs_signal; > } else if (INTEL_GEN(dev_priv) >= 6) { > engine->init_context = intel_rcs_ctx_init; -- Joonas Lahtinen Open Source Technology Center Intel Corporation _______________________________________________ Intel-gfx mailing list Intel-gfx@xxxxxxxxxxxxxxxxxxxxx https://lists.freedesktop.org/mailman/listinfo/intel-gfx