drm/i915: Fix preallocated barrier list append
authorJosé Roberto de Souza <jose.souza@intel.com>
Wed, 29 Jan 2020 23:23:45 +0000 (15:23 -0800)
committerJani Nikula <jani.nikula@intel.com>
Wed, 12 Feb 2020 11:24:45 +0000 (13:24 +0200)
Only the first and the last nodes were being added to
ref->preallocated_barriers.

Renaming variables to make it more easy to read.

Fixes: 841350223816 ("drm/i915/gt: Drop mutex serialisation between context pin/unpin")
Cc: Chris Wilson <chris@chris-wilson.co.uk>
Cc: Maarten Lankhorst <maarten.lankhorst@linux.intel.com>
Signed-off-by: José Roberto de Souza <jose.souza@intel.com>
Reviewed-by: Chris Wilson <chris@chris-wilson.co.uk>
Signed-off-by: Chris Wilson <chris@chris-wilson.co.uk>
Link: https://patchwork.freedesktop.org/patch/msgid/20200129232345.84512-1-jose.souza@intel.com
(cherry picked from commit d4c3c0b8221a72107eaf35c80c40716b81ca463e)
Signed-off-by: Jani Nikula <jani.nikula@intel.com>
drivers/gpu/drm/i915/i915_active.c

index 4fcd567ff818d49d3b87be0b823445eaf6cbabfe..b0a499753526615c9175d6b276ecb7089df87c38 100644 (file)
@@ -607,7 +607,7 @@ int i915_active_acquire_preallocate_barrier(struct i915_active *ref,
                                            struct intel_engine_cs *engine)
 {
        intel_engine_mask_t tmp, mask = engine->mask;
-       struct llist_node *pos = NULL, *next;
+       struct llist_node *first = NULL, *last = NULL;
        struct intel_gt *gt = engine->gt;
        int err;
 
@@ -625,6 +625,7 @@ int i915_active_acquire_preallocate_barrier(struct i915_active *ref,
         */
        for_each_engine_masked(engine, gt, mask, tmp) {
                u64 idx = engine->kernel_context->timeline->fence_context;
+               struct llist_node *prev = first;
                struct active_node *node;
 
                node = reuse_idle_barrier(ref, idx);
@@ -658,23 +659,23 @@ int i915_active_acquire_preallocate_barrier(struct i915_active *ref,
                GEM_BUG_ON(rcu_access_pointer(node->base.fence) != ERR_PTR(-EAGAIN));
 
                GEM_BUG_ON(barrier_to_engine(node) != engine);
-               next = barrier_to_ll(node);
-               next->next = pos;
-               if (!pos)
-                       pos = next;
+               first = barrier_to_ll(node);
+               first->next = prev;
+               if (!last)
+                       last = first;
                intel_engine_pm_get(engine);
        }
 
        GEM_BUG_ON(!llist_empty(&ref->preallocated_barriers));
-       llist_add_batch(next, pos, &ref->preallocated_barriers);
+       llist_add_batch(first, last, &ref->preallocated_barriers);
 
        return 0;
 
 unwind:
-       while (pos) {
-               struct active_node *node = barrier_from_ll(pos);
+       while (first) {
+               struct active_node *node = barrier_from_ll(first);
 
-               pos = pos->next;
+               first = first->next;
 
                atomic_dec(&ref->count);
                intel_engine_pm_put(barrier_to_engine(node));