[Intel-gfx] [PATCH] drm/i915: Store number of active engines in device info
Dave Gordon
david.s.gordon at intel.com
Wed Aug 10 15:41:31 UTC 2016
On 10/08/16 16:22, Tvrtko Ursulin wrote:
> From: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
>
> Until now code was calling hweight32 to figure out the
> number from device_info->ring_mask at runtime. Instead
> we can cache it at engine init time and use directly.
>
> Signed-off-by: Tvrtko Ursulin <tvrtko.ursulin at intel.com>
> ---
> drivers/gpu/drm/i915/i915_debugfs.c | 2 +-
> drivers/gpu/drm/i915/i915_drv.h | 1 +
> drivers/gpu/drm/i915/i915_gem_context.c | 2 +-
> drivers/gpu/drm/i915/intel_engine_cs.c | 10 +++++-----
> drivers/gpu/drm/i915/intel_ringbuffer.c | 6 +++---
> 5 files changed, 11 insertions(+), 10 deletions(-)
LGTM.
Reviewed-by: Dave Gordon <david.s.gordon at intel.com>
> diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
> index 83f40e869955..c461072da142 100644
> --- a/drivers/gpu/drm/i915/i915_debugfs.c
> +++ b/drivers/gpu/drm/i915/i915_debugfs.c
> @@ -3226,7 +3226,7 @@ static int i915_semaphore_status(struct seq_file *m, void *unused)
> struct drm_device *dev = node->minor->dev;
> struct drm_i915_private *dev_priv = to_i915(dev);
> struct intel_engine_cs *engine;
> - int num_rings = hweight32(INTEL_INFO(dev)->ring_mask);
> + int num_rings = INTEL_INFO(dev)->num_rings;
> enum intel_engine_id id;
> int j, ret;
>
> diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
> index 7f2754a070a5..7971c76852df 100644
> --- a/drivers/gpu/drm/i915/i915_drv.h
> +++ b/drivers/gpu/drm/i915/i915_drv.h
> @@ -793,6 +793,7 @@ struct intel_device_info {
> u8 gen;
> u16 gen_mask;
> u8 ring_mask; /* Rings supported by the HW */
> + u8 num_rings;
> DEV_INFO_FOR_EACH_FLAG(DEFINE_FLAG, SEP_SEMICOLON);
> /* Register offsets for the various display pipes and transcoders */
> int pipe_offsets[I915_MAX_TRANSCODERS];
> diff --git a/drivers/gpu/drm/i915/i915_gem_context.c b/drivers/gpu/drm/i915/i915_gem_context.c
> index bb72af5320b0..547caf26a6b9 100644
> --- a/drivers/gpu/drm/i915/i915_gem_context.c
> +++ b/drivers/gpu/drm/i915/i915_gem_context.c
> @@ -568,7 +568,7 @@ mi_set_context(struct drm_i915_gem_request *req, u32 hw_flags)
> const int num_rings =
> /* Use an extended w/a on ivb+ if signalling from other rings */
> i915.semaphores ?
> - hweight32(INTEL_INFO(dev_priv)->ring_mask) - 1 :
> + INTEL_INFO(dev_priv)->num_rings - 1 :
> 0;
> int len, ret;
>
> diff --git a/drivers/gpu/drm/i915/intel_engine_cs.c b/drivers/gpu/drm/i915/intel_engine_cs.c
> index 0dd3d1de18aa..186c12d07f99 100644
> --- a/drivers/gpu/drm/i915/intel_engine_cs.c
> +++ b/drivers/gpu/drm/i915/intel_engine_cs.c
> @@ -109,6 +109,7 @@ intel_engine_setup(struct drm_i915_private *dev_priv,
> int intel_engines_init(struct drm_device *dev)
> {
> struct drm_i915_private *dev_priv = to_i915(dev);
> + struct intel_device_info *device_info = mkwrite_device_info(dev_priv);
> unsigned int mask = 0;
> int (*init)(struct intel_engine_cs *engine);
> unsigned int i;
> @@ -142,11 +143,10 @@ int intel_engines_init(struct drm_device *dev)
> * are added to the driver by a warning and disabling the forgotten
> * engines.
> */
> - if (WARN_ON(mask != INTEL_INFO(dev_priv)->ring_mask)) {
> - struct intel_device_info *info =
> - (struct intel_device_info *)&dev_priv->info;
> - info->ring_mask = mask;
> - }
> + if (WARN_ON(mask != INTEL_INFO(dev_priv)->ring_mask))
> + device_info->ring_mask = mask;
> +
> + device_info->num_rings = hweight32(mask);
>
> return 0;
>
> diff --git a/drivers/gpu/drm/i915/intel_ringbuffer.c b/drivers/gpu/drm/i915/intel_ringbuffer.c
> index 16b726fe33eb..a05a2a13ea7c 100644
> --- a/drivers/gpu/drm/i915/intel_ringbuffer.c
> +++ b/drivers/gpu/drm/i915/intel_ringbuffer.c
> @@ -1317,7 +1317,7 @@ static int gen8_rcs_signal(struct drm_i915_gem_request *req)
> enum intel_engine_id id;
> int ret, num_rings;
>
> - num_rings = hweight32(INTEL_INFO(dev_priv)->ring_mask);
> + num_rings = INTEL_INFO(dev_priv)->num_rings;
> ret = intel_ring_begin(req, (num_rings-1) * 8);
> if (ret)
> return ret;
> @@ -1354,7 +1354,7 @@ static int gen8_xcs_signal(struct drm_i915_gem_request *req)
> enum intel_engine_id id;
> int ret, num_rings;
>
> - num_rings = hweight32(INTEL_INFO(dev_priv)->ring_mask);
> + num_rings = INTEL_INFO(dev_priv)->num_rings;
> ret = intel_ring_begin(req, (num_rings-1) * 6);
> if (ret)
> return ret;
> @@ -1389,7 +1389,7 @@ static int gen6_signal(struct drm_i915_gem_request *req)
> enum intel_engine_id id;
> int ret, num_rings;
>
> - num_rings = hweight32(INTEL_INFO(dev_priv)->ring_mask);
> + num_rings = INTEL_INFO(dev_priv)->num_rings;
> ret = intel_ring_begin(req, round_up((num_rings-1) * 3, 2));
> if (ret)
> return ret;
>
More information about the Intel-gfx
mailing list