freedreno: Don't return a flushed batch

Somehow fairly recently the traces CI job started hitting timeouts, not
all the time but enough to be inconvenient for CI.  I tracked it down to
getting into a situation where `ctx->batch->flush == true`, which causes
an infinite loop in the draw_vbo and clear paths (because
fd_batch_lock_submit() checks for flushed batch but fd_context_batch()
does not).  I'm not entirely sure how we get into that state, or what
triggered this (seems possibly triggered by !10937).  But it is easy
enough to recover.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/11196>
This commit is contained in:
Rob Clark 2021-06-04 16:32:30 -07:00 committed by Marge Bot
parent ad375d0579
commit 80b1e042e4

View file

@ -436,9 +436,15 @@ batch_from_key(struct fd_batch_cache *cache, struct fd_batch_key *key,
_mesa_hash_table_search_pre_hashed(cache->ht, hash, key);
if (entry) {
free(key);
fd_batch_reference(&batch, (struct fd_batch *)entry->data);
return batch;
fd_batch_reference_locked(&batch, (struct fd_batch *)entry->data);
if (batch->flushed) {
fd_bc_invalidate_batch(batch, false);
fd_batch_reference_locked(&batch, NULL);
} else {
free(key);
return batch;
}
}
batch = alloc_batch_locked(cache, ctx, false);