Re: [PATCH 06/21] drm/i915: Reduce locking around i915_active_acquire_preallocate_barrier()

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 




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@xxxxxxxxxxxxxxxxxx>
Reviewed-by: Thomas Hellström <thomas.hellstrom@xxxxxxxxx>
---
  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) {
_______________________________________________
Intel-gfx mailing list
Intel-gfx@xxxxxxxxxxxxxxxxxxxxx
https://lists.freedesktop.org/mailman/listinfo/intel-gfx




[Index of Archives]     [AMD Graphics]     [Linux USB Devel]     [Linux Audio Users]     [Yosemite News]     [Linux Kernel]     [Linux SCSI]

  Powered by Linux