From 647f45bfa644f7be1b1520f8c19e30fbe08fde05 Mon Sep 17 00:00:00 2001 From: Sebastian Wick Date: Tue, 16 Jan 2024 16:47:16 +0100 Subject: [PATCH] native/crtc-kms: Don't assign leased primary planes to CRTCs When a plane is leased, it is assigned to a CRTC which is leased. When trying to find a primary plane for a modeset, skip the assigned planes on leased CRTCs to avoid sharing the resources with the leased process. Part-of: --- src/backends/native/meta-crtc-kms.c | 22 ++++++++++++++++++++++ 1 file changed, 22 insertions(+) diff --git a/src/backends/native/meta-crtc-kms.c b/src/backends/native/meta-crtc-kms.c index 2d2deab1b..90c539196 100644 --- a/src/backends/native/meta-crtc-kms.c +++ b/src/backends/native/meta-crtc-kms.c @@ -256,6 +256,25 @@ is_plane_assigned (MetaKmsPlane *plane, return FALSE; } +static gboolean +is_plane_leased (MetaKmsDevice *kms_device, + MetaKmsPlane *kms_plane) +{ + GList *l; + + for (l = meta_kms_device_get_crtcs (kms_device); l; l = l->next) + { + MetaKmsCrtc *kms_crtc = l->data; + MetaCrtcKms *crtc_kms = meta_crtc_kms_from_kms_crtc (kms_crtc); + + if (meta_kms_crtc_is_leased (kms_crtc) && + crtc_kms->assigned_primary_plane == kms_plane) + return TRUE; + } + + return FALSE; +} + static MetaKmsPlane * find_unassigned_plane (MetaCrtcKms *crtc_kms, MetaKmsPlaneType kms_plane_type, @@ -279,6 +298,9 @@ find_unassigned_plane (MetaCrtcKms *crtc_kms, crtc_assignments)) continue; + if (is_plane_leased (kms_device, kms_plane)) + continue; + return kms_plane; }