freedreno: comment for _invalidate_batch()
authorRob Clark <robdclark@gmail.com>
Tue, 17 Jul 2018 13:42:27 +0000 (09:42 -0400)
committerRob Clark <robdclark@gmail.com>
Tue, 17 Jul 2018 15:00:00 +0000 (11:00 -0400)
Signed-off-by: Rob Clark <robdclark@gmail.com>
src/gallium/drivers/freedreno/freedreno_batch_cache.c

index c4640a7cfeee83d85729f54e12a6fb4ebc8e3616..804a73664f7851c05ab7b2a8bd056e48f68741fb 100644 (file)
@@ -199,8 +199,18 @@ fd_bc_invalidate_context(struct fd_context *ctx)
        mtx_unlock(&ctx->screen->lock);
 }
 
+/**
+ * Note that when batch is flushed, it needs to remain in the cache so
+ * that fd_bc_invalidate_resource() can work.. otherwise we can have
+ * the case where a rsc is destroyed while a batch still has a dangling
+ * reference to it.
+ *
+ * Note that the cmdstream (or, after the SUBMIT ioctl, the kernel)
+ * would have a reference to the underlying bo, so it is ok for the
+ * rsc to be destroyed before the batch.
+ */
 void
-fd_bc_invalidate_batch(struct fd_batch *batch, bool destroy)
+fd_bc_invalidate_batch(struct fd_batch *batch, bool remove)
 {
        if (!batch)
                return;
@@ -208,9 +218,9 @@ fd_bc_invalidate_batch(struct fd_batch *batch, bool destroy)
        struct fd_batch_cache *cache = &batch->ctx->screen->batch_cache;
        struct key *key = (struct key *)batch->key;
 
-       pipe_mutex_assert_locked(batch->ctx->screen->lock);
+       fd_context_assert_locked(batch->ctx);
 
-       if (destroy) {
+       if (remove) {
                cache->batches[batch->idx] = NULL;
                cache->batch_mask &= ~(1 << batch->idx);
        }