freedreno/drm: Reference count submits
authorRob Clark <robdclark@chromium.org>
Sat, 17 Apr 2021 18:23:27 +0000 (11:23 -0700)
committerMarge Bot <eric+marge@anholt.net>
Wed, 28 Apr 2021 15:36:42 +0000 (15:36 +0000)
To merge submits, we'll need drm to internally hold an extra reference
to the submit.

Signed-off-by: Rob Clark <robdclark@chromium.org>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/10444>

src/freedreno/drm/freedreno_priv.h
src/freedreno/drm/freedreno_ringbuffer.c
src/freedreno/drm/freedreno_ringbuffer.h

index 19abcc1..545006f 100644 (file)
@@ -194,6 +194,7 @@ struct fd_submit_funcs {
 };
 
 struct fd_submit {
+   int32_t refcnt;
    struct fd_pipe *pipe;
    const struct fd_submit_funcs *funcs;
 
index 2e3000b..49f9a6d 100644 (file)
 struct fd_submit *
 fd_submit_new(struct fd_pipe *pipe)
 {
-   return pipe->funcs->submit_new(pipe);
+   struct fd_submit *submit = pipe->funcs->submit_new(pipe);
+   submit->refcnt = 1;
+   return submit;
 }
 
 void
 fd_submit_del(struct fd_submit *submit)
 {
+   if (!p_atomic_dec_zero(&submit->refcnt))
+      return;
+
    if (submit->primary)
       fd_ringbuffer_del(submit->primary);
-   return submit->funcs->destroy(submit);
+
+   submit->funcs->destroy(submit);
+}
+
+struct fd_submit *
+fd_submit_ref(struct fd_submit *submit)
+{
+   p_atomic_inc(&submit->refcnt);
+   return submit;
 }
 
 int
index cc0b109..d4a8472 100644 (file)
@@ -85,6 +85,8 @@ struct fd_submit *fd_submit_new(struct fd_pipe *pipe);
  */
 void fd_submit_del(struct fd_submit *submit);
 
+struct fd_submit * fd_submit_ref(struct fd_submit *submit);
+
 /* Allocate a new rb from the submit. */
 struct fd_ringbuffer *fd_submit_new_ringbuffer(struct fd_submit *submit,
                                                uint32_t size,