radv: Fix threading issue with submission refcounts.

If decrement == 0 then:

- it isn't safe to access the submission
- even if it is, checking that the result of the atomic_sub is 0
  doesn't given an unique owner anymore.

So skip it. The submission always starts out with refcount >= 1,
so first one to decrement to 0 still get dibs on executing it.

Fixes: 4aa75bb3bd "radv: Add wait-before-submit support for timelines."
Reviewed-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/6478>
(cherry picked from commit 6b75262941)
This commit is contained in:
Bas Nieuwenhuizen 2020-08-29 03:25:02 +02:00 committed by Dylan Baker
parent 0bc75626a0
commit dae04016ed
2 changed files with 7 additions and 1 deletions

View file

@ -2965,7 +2965,7 @@
"description": "radv: Fix threading issue with submission refcounts.",
"nominated": true,
"nomination_type": 1,
"resolution": 0,
"resolution": 1,
"master_sha": null,
"because_sha": "4aa75bb3bdd195d4715ee8fae51bfb0c0fcd823b"
},

View file

@ -4312,6 +4312,12 @@ radv_queue_enqueue_submission(struct radv_deferred_queue_submission *submission,
* submitted, but if the queue was empty, we decrement ourselves as there is no previous
* submission. */
uint32_t decrement = submission->wait_semaphore_count - wait_cnt + (is_first ? 1 : 0);
/* if decrement is zero, then we don't have a refcounted reference to the
* submission anymore, so it is not safe to access the submission. */
if (!decrement)
return VK_SUCCESS;
return radv_queue_trigger_submission(submission, decrement, processing_list);
}