This is a bit disappointing since we need to split the annotations
over all the different parts.

I was considering just leaking the critical section into the
->atomic_commit_tail callback of each driver. But that would mean we
need to pass the fence_cookie into each driver (there's a total of 13
implementations of this hook right now), so bad flag day. And also a
bit leaky abstraction.

Hence just do it function-by-function.

Cc: linux-me...@vger.kernel.org
Cc: linaro-mm-...@lists.linaro.org
Cc: linux-r...@vger.kernel.org
Cc: amd-gfx@lists.freedesktop.org
Cc: intel-...@lists.freedesktop.org
Cc: Chris Wilson <ch...@chris-wilson.co.uk>
Cc: Maarten Lankhorst <maarten.lankho...@linux.intel.com>
Cc: Christian König <christian.koe...@amd.com>
Signed-off-by: Daniel Vetter <daniel.vet...@intel.com>
---
 drivers/gpu/drm/drm_atomic_helper.c | 16 ++++++++++++++++
 1 file changed, 16 insertions(+)

diff --git a/drivers/gpu/drm/drm_atomic_helper.c 
b/drivers/gpu/drm/drm_atomic_helper.c
index 8ac3aa068261..0a541368246e 100644
--- a/drivers/gpu/drm/drm_atomic_helper.c
+++ b/drivers/gpu/drm/drm_atomic_helper.c
@@ -1549,6 +1549,7 @@ EXPORT_SYMBOL(drm_atomic_helper_wait_for_flip_done);
 void drm_atomic_helper_commit_tail(struct drm_atomic_state *old_state)
 {
        struct drm_device *dev = old_state->dev;
+       bool fence_cookie = dma_fence_begin_signalling();
 
        drm_atomic_helper_commit_modeset_disables(dev, old_state);
 
@@ -1560,6 +1561,8 @@ void drm_atomic_helper_commit_tail(struct 
drm_atomic_state *old_state)
 
        drm_atomic_helper_commit_hw_done(old_state);
 
+       dma_fence_end_signalling(fence_cookie);
+
        drm_atomic_helper_wait_for_vblanks(dev, old_state);
 
        drm_atomic_helper_cleanup_planes(dev, old_state);
@@ -1579,6 +1582,7 @@ EXPORT_SYMBOL(drm_atomic_helper_commit_tail);
 void drm_atomic_helper_commit_tail_rpm(struct drm_atomic_state *old_state)
 {
        struct drm_device *dev = old_state->dev;
+       bool fence_cookie = dma_fence_begin_signalling();
 
        drm_atomic_helper_commit_modeset_disables(dev, old_state);
 
@@ -1591,6 +1595,8 @@ void drm_atomic_helper_commit_tail_rpm(struct 
drm_atomic_state *old_state)
 
        drm_atomic_helper_commit_hw_done(old_state);
 
+       dma_fence_end_signalling(fence_cookie);
+
        drm_atomic_helper_wait_for_vblanks(dev, old_state);
 
        drm_atomic_helper_cleanup_planes(dev, old_state);
@@ -1606,6 +1612,9 @@ static void commit_tail(struct drm_atomic_state 
*old_state)
        ktime_t start;
        s64 commit_time_ms;
        unsigned int i, new_self_refresh_mask = 0;
+       bool fence_cookie;
+
+       fence_cookie = dma_fence_begin_signalling();
 
        funcs = dev->mode_config.helper_private;
 
@@ -1634,6 +1643,8 @@ static void commit_tail(struct drm_atomic_state 
*old_state)
                if (new_crtc_state->self_refresh_active)
                        new_self_refresh_mask |= BIT(i);
 
+       dma_fence_end_signalling(fence_cookie);
+
        if (funcs && funcs->atomic_commit_tail)
                funcs->atomic_commit_tail(old_state);
        else
@@ -1789,6 +1800,7 @@ int drm_atomic_helper_commit(struct drm_device *dev,
                             bool nonblock)
 {
        int ret;
+       bool fence_cookie;
 
        if (state->async_update) {
                ret = drm_atomic_helper_prepare_planes(dev, state);
@@ -1811,6 +1823,8 @@ int drm_atomic_helper_commit(struct drm_device *dev,
        if (ret)
                return ret;
 
+       fence_cookie = dma_fence_begin_signalling();
+
        if (!nonblock) {
                ret = drm_atomic_helper_wait_for_fences(dev, state, true);
                if (ret)
@@ -1848,6 +1862,7 @@ int drm_atomic_helper_commit(struct drm_device *dev,
         */
 
        drm_atomic_state_get(state);
+       dma_fence_end_signalling(fence_cookie);
        if (nonblock)
                queue_work(system_unbound_wq, &state->commit_work);
        else
@@ -1856,6 +1871,7 @@ int drm_atomic_helper_commit(struct drm_device *dev,
        return 0;
 
 err:
+       dma_fence_end_signalling(fence_cookie);
        drm_atomic_helper_cleanup_planes(dev, state);
        return ret;
 }
-- 
2.26.2

_______________________________________________
amd-gfx mailing list
amd-gfx@lists.freedesktop.org
https://lists.freedesktop.org/mailman/listinfo/amd-gfx

Reply via email to