mirror of https://gitee.com/openkylin/linux.git
drm/i915: Use atomic for dev_priv->mm.bsd_engine_dispatch_index
Use atomic type and operands for dev_priv->mm.bsd_engine_dispatch_index to avoid one struct_mutex locking scenario. Cc: Chris Wilson <chris@chris-wilson.co.uk> Cc: Imre Deak <imre.deak@intel.com> Cc: Zhao Yakui <yakui.zhao@intel.com> Cc: Daniel Vetter <daniel.vetter@ffwll.ch> Signed-off-by: Joonas Lahtinen <joonas.lahtinen@linux.intel.com> Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk> Link: http://patchwork.freedesktop.org/patch/msgid/1472731101-21982-1-git-send-email-joonas.lahtinen@linux.intel.com
This commit is contained in:
parent
5423adf1d4
commit
6f63340284
|
@ -1338,7 +1338,7 @@ struct i915_gem_mm {
|
|||
bool interruptible;
|
||||
|
||||
/* the indicator for dispatch video commands on two BSD rings */
|
||||
unsigned int bsd_engine_dispatch_index;
|
||||
atomic_t bsd_engine_dispatch_index;
|
||||
|
||||
/** Bit 6 swizzling required for X tiling */
|
||||
uint32_t bit_6_swizzle_x;
|
||||
|
|
|
@ -4622,6 +4622,8 @@ i915_gem_load_init(struct drm_device *dev)
|
|||
|
||||
dev_priv->mm.interruptible = true;
|
||||
|
||||
atomic_set(&dev_priv->mm.bsd_engine_dispatch_index, 0);
|
||||
|
||||
spin_lock_init(&dev_priv->fb_tracking.lock);
|
||||
}
|
||||
|
||||
|
|
|
@ -1535,13 +1535,9 @@ gen8_dispatch_bsd_engine(struct drm_i915_private *dev_priv,
|
|||
struct drm_i915_file_private *file_priv = file->driver_priv;
|
||||
|
||||
/* Check whether the file_priv has already selected one ring. */
|
||||
if ((int)file_priv->bsd_engine < 0) {
|
||||
/* If not, use the ping-pong mechanism to select one. */
|
||||
mutex_lock(&dev_priv->drm.struct_mutex);
|
||||
file_priv->bsd_engine = dev_priv->mm.bsd_engine_dispatch_index;
|
||||
dev_priv->mm.bsd_engine_dispatch_index ^= 1;
|
||||
mutex_unlock(&dev_priv->drm.struct_mutex);
|
||||
}
|
||||
if ((int)file_priv->bsd_engine < 0)
|
||||
file_priv->bsd_engine = atomic_fetch_xor(1,
|
||||
&dev_priv->mm.bsd_engine_dispatch_index);
|
||||
|
||||
return file_priv->bsd_engine;
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue