[Intel-gfx] [PATCH 06/21] drm/i915: Reduce locking around i915_active_acquire_preallocate_barrier()

Thomas Hellström (Intel) thomas_os at shipmail.org
Fri Jul 31 07:39:00 UTC 2020


On 7/30/20 11:37 AM, Chris Wilson wrote:
> As the conversion between idle-barrier and full i915_active_fence is
> already serialised by explicit memory barriers, we can reduce the
> spinlock in i915_active_acquire_preallocate_barrier() for finding an
> idle-barrier to reuse to an RCU read lock to ensure the fence remains
> valid, only taking the spinlock for the update of the rbtree itself.
>
> Signed-off-by: Chris Wilson <chris at chris-wilson.co.uk>
Reviewed-by: Thomas Hellström <thomas.hellstrom at intel.com>
> ---
>   drivers/gpu/drm/i915/i915_active.c | 6 +++---
>   1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/gpu/drm/i915/i915_active.c b/drivers/gpu/drm/i915/i915_active.c
> index 7b51045c8461..5dd52bb6d38c 100644
> --- a/drivers/gpu/drm/i915/i915_active.c
> +++ b/drivers/gpu/drm/i915/i915_active.c
> @@ -807,7 +807,6 @@ static struct active_node *reuse_idle_barrier(struct i915_active *ref, u64 idx)
>   	if (RB_EMPTY_ROOT(&ref->tree))
>   		return NULL;
>   
> -	spin_lock_irq(&ref->tree_lock);
>   	GEM_BUG_ON(i915_active_is_idle(ref));
>   
>   	/*
> @@ -872,11 +871,10 @@ static struct active_node *reuse_idle_barrier(struct i915_active *ref, u64 idx)
>   			goto match;
>   	}
>   
> -	spin_unlock_irq(&ref->tree_lock);
> -
>   	return NULL;
>   
>   match:
> +	spin_lock_irq(&ref->tree_lock);
>   	rb_erase(p, &ref->tree); /* Hide from waits and sibling allocations */
>   	if (p == &ref->cache->node)
>   		WRITE_ONCE(ref->cache, NULL);
> @@ -911,7 +909,9 @@ int i915_active_acquire_preallocate_barrier(struct i915_active *ref,
>   		struct llist_node *prev = first;
>   		struct active_node *node;
>   
> +		rcu_read_lock();
>   		node = reuse_idle_barrier(ref, idx);
> +		rcu_read_unlock();
>   		if (!node) {
>   			node = kmem_cache_alloc(global.slab_cache, GFP_KERNEL);
>   			if (!node) {


More information about the Intel-gfx mailing list