From 36f73f67c74f26e7b1aac02b7c284c8498f38080 Mon Sep 17 00:00:00 2001 From: Derek Foreman Date: Mon, 19 Jan 2026 15:17:46 -0600 Subject: [PATCH] drm: Count outstanding atomic completions This is preparation for synchronizing invalid state rebuilding in a future commit. Signed-off-by: Derek Foreman --- libweston/backend-drm/drm-internal.h | 2 ++ libweston/backend-drm/kms.c | 4 ++++ 2 files changed, 6 insertions(+) diff --git a/libweston/backend-drm/drm-internal.h b/libweston/backend-drm/drm-internal.h index 9c419c5a3..71c30a7cf 100644 --- a/libweston/backend-drm/drm-internal.h +++ b/libweston/backend-drm/drm-internal.h @@ -196,6 +196,8 @@ struct drm_device { bool state_invalid; + int32_t atomic_completes_pending; + bool atomic_modeset; bool tearing_supported; diff --git a/libweston/backend-drm/kms.c b/libweston/backend-drm/kms.c index 40eef7ceb..a435b6a40 100644 --- a/libweston/backend-drm/kms.c +++ b/libweston/backend-drm/kms.c @@ -736,6 +736,7 @@ drm_output_assign_state(struct drm_output_state *state, drm_debug(b, "\t[CRTC:%u] setting pending flip\n", output->crtc->crtc_id); output->atomic_complete_pending = true; + device->atomic_completes_pending++; } if (device->atomic_modeset && @@ -1925,6 +1926,9 @@ atomic_flip_handler(int fd, unsigned int frame, unsigned int sec, drm_debug(b, "[atomic][CRTC:%u] flip processing completed\n", crtc_id); drm_debug(b, "[atomic][CRTC:%u] %.2f page flips computed in %d seconds\n", crtc_id, page_flips_per_timer_interval, frame_counter_interval); + + assert(device->atomic_completes_pending > 0); + device->atomic_completes_pending--; } int