From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from lists.gentoo.org (pigeon.gentoo.org [208.92.234.80]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (2048 bits)) (No client certificate requested) by finch.gentoo.org (Postfix) with ESMTPS id F052A15800A for ; Sun, 16 Jul 2023 23:58:13 +0000 (UTC) Received: from pigeon.gentoo.org (localhost [127.0.0.1]) by pigeon.gentoo.org (Postfix) with SMTP id 27FA2E089C; Sun, 16 Jul 2023 23:58:13 +0000 (UTC) Received: from smtp.gentoo.org (dev.gentoo.org [IPv6:2001:470:ea4a:1:5054:ff:fec7:86e4]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by pigeon.gentoo.org (Postfix) with ESMTPS id 05615E089C for ; Sun, 16 Jul 2023 23:58:13 +0000 (UTC) Received: from oystercatcher.gentoo.org (oystercatcher.gentoo.org [148.251.78.52]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange X25519 server-signature RSA-PSS (4096 bits) server-digest SHA256) (No client certificate requested) by smtp.gentoo.org (Postfix) with ESMTPS id 060F5340D4F for ; Sun, 16 Jul 2023 23:58:12 +0000 (UTC) Received: from localhost.localdomain (localhost [IPv6:::1]) by oystercatcher.gentoo.org (Postfix) with ESMTP id 24D31B52 for ; Sun, 16 Jul 2023 23:58:10 +0000 (UTC) From: "Mike Gilbert" To: gentoo-commits@lists.gentoo.org Content-Transfer-Encoding: 8bit Content-type: text/plain; charset=UTF-8 Reply-To: gentoo-dev@lists.gentoo.org, "Mike Gilbert" Message-ID: <1689551696.7489e5ffc8b97cc7bed5b7a9c5c32b65d406a8a2.floppym@gentoo> Subject: [gentoo-commits] repo/gentoo:master commit in: dev-libs/weston/, dev-libs/weston/files/ X-VCS-Repository: repo/gentoo X-VCS-Files: dev-libs/weston/files/weston-12.0.1-issue757.patch dev-libs/weston/weston-12.0.1-r1.ebuild dev-libs/weston/weston-12.0.1.ebuild X-VCS-Directories: dev-libs/weston/ dev-libs/weston/files/ X-VCS-Committer: floppym X-VCS-Committer-Name: Mike Gilbert X-VCS-Revision: 7489e5ffc8b97cc7bed5b7a9c5c32b65d406a8a2 X-VCS-Branch: master Date: Sun, 16 Jul 2023 23:58:10 +0000 (UTC) Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: List-Id: Gentoo Linux mail X-BeenThere: gentoo-commits@lists.gentoo.org X-Auto-Response-Suppress: DR, RN, NRN, OOF, AutoReply X-Archives-Salt: 4aa88c70-f3bd-4b62-b24b-9c2a1a71b7d2 X-Archives-Hash: 4f96be1a0376194fbfd95d014440abb6 commit: 7489e5ffc8b97cc7bed5b7a9c5c32b65d406a8a2 Author: Mike Gilbert gentoo org> AuthorDate: Sun Jul 16 23:54:56 2023 +0000 Commit: Mike Gilbert gentoo org> CommitDate: Sun Jul 16 23:54:56 2023 +0000 URL: https://gitweb.gentoo.org/repo/gentoo.git/commit/?id=7489e5ff dev-libs/weston: backport fix for crash on startup weston: ../weston-12.0.1/libweston/output-capture.c:398: weston_output_pull_capture_task: Assertion `csi->width == width' failed Signed-off-by: Mike Gilbert gentoo.org> dev-libs/weston/files/weston-12.0.1-issue757.patch | 183 +++++++++++++++++++++ ...eston-12.0.1.ebuild => weston-12.0.1-r1.ebuild} | 4 + 2 files changed, 187 insertions(+) diff --git a/dev-libs/weston/files/weston-12.0.1-issue757.patch b/dev-libs/weston/files/weston-12.0.1-issue757.patch new file mode 100644 index 000000000000..c36647e22446 --- /dev/null +++ b/dev-libs/weston/files/weston-12.0.1-issue757.patch @@ -0,0 +1,183 @@ +https://gitlab.freedesktop.org/wayland/weston/-/issues/757 +https://gitlab.freedesktop.org/wayland/weston/-/merge_requests/1257 + +From 6d8e3c569cf7e9ad80569768871e1ed30bf4d2a8 Mon Sep 17 00:00:00 2001 +From: Leandro Ribeiro +Date: Thu, 1 Jun 2023 18:51:34 -0300 +Subject: [PATCH 1/3] drm: drop disable_planes being false as a condition to + support writeback + +In 2d70bdfdcdb236ee3e466b1a24df494da43c8a68 "drm-backend: add support to +output capture writeback source" we've ensured that disable_planes +should be false in order to support writeback capture tasks. + +But this was wrong; disable_planes is transient (it is true when +there's some sort of content recording happening), and we enable/disable +that during compositor's lifetime. + +This is dangerous and may result in a crash. Imagine the following +sequence: + + 1. screen recording starts, disable_planes is set to true. + + 2. for whatever reason the output size changes, and we end up + not updating capture info because we think that writeback is not + supported by the device. + + 3. screen recording stops, disable_planes is set to false. + + 4. user tries to take a writeback screenshot, and the + DRM-backend will pull a writeback capture task with + weston_output_pull_capture_task(). + + 5. this function has an assert to ensure that the DRM-backend + did not forget to update the capture info, and we hit that + assert. + +With this patch we drop disable_planes being false as a condition to +support writeback. So now we keep the capture info up-to-date even when +screen recording is happening, and we gracefully fail writeback tasks. + +Signed-off-by: Leandro Ribeiro +--- + libweston/backend-drm/drm.c | 10 ++++++++-- + 1 file changed, 8 insertions(+), 2 deletions(-) + +diff --git a/libweston/backend-drm/drm.c b/libweston/backend-drm/drm.c +index 1078b89bf..a1e61df8c 100644 +--- a/libweston/backend-drm/drm.c ++++ b/libweston/backend-drm/drm.c +@@ -561,6 +561,12 @@ drm_output_pick_writeback_capture_task(struct drm_output *output) + + assert(output->device->atomic_modeset); + ++ if (output->base.disable_planes > 0) { ++ msg = "drm: KMS planes usage is disabled for now, so " \ ++ "writeback capture tasks are rejected"; ++ goto err; ++ } ++ + wb = drm_output_find_compatible_writeback(output); + if (!wb) { + msg = "drm: could not find writeback connector for output"; +@@ -948,7 +954,7 @@ drm_output_apply_mode(struct drm_output *output) + } + } + +- if (device->atomic_modeset && !output->base.disable_planes) ++ if (device->atomic_modeset) + weston_output_update_capture_info(&output->base, + WESTON_OUTPUT_CAPTURE_SOURCE_WRITEBACK, + output->base.current_mode->width, +@@ -2138,7 +2144,7 @@ drm_output_enable(struct weston_output *base) + output->base.switch_mode = drm_output_switch_mode; + output->base.set_gamma = drm_output_set_gamma; + +- if (device->atomic_modeset && !base->disable_planes) ++ if (device->atomic_modeset) + weston_output_update_capture_info(base, WESTON_OUTPUT_CAPTURE_SOURCE_WRITEBACK, + base->current_mode->width, + base->current_mode->height, +-- +GitLab + + +From 3226417573ac12e7d41823335bcb3036bf442cbc Mon Sep 17 00:00:00 2001 +From: Leandro Ribeiro +Date: Fri, 2 Jun 2023 14:44:44 -0300 +Subject: [PATCH 2/3] drm: do not pull writeback task if KMS atomic API is not + supported + +Since 2d70bdfdcdb236ee3e466b1a24df494da43c8a68 "drm-backend: add support +to output capture writeback source", the DRM-backend was broken for KMS +devices that do not support the atomic API. This fixes that. + +We don't support writeback screenshots without atomic modeset support. +So for such devices, we never update the output capture info +(weston_output_update_capture_info()) for the writeback source. + +The function that we use to pull writeback tasks +(weston_output_pull_capture_task()) asserts that the capture providers +(renderers, DRM-backend) did not forget to update the capture info +(size/format) if something changed. But as we've never updated the +capture info for such devices, it is zeroed, leading to an assert hit. + +With this patch we only pull the capture task for KMS devices that +support the atomic API. + +Signed-off-by: Leandro Ribeiro +--- + libweston/backend-drm/drm.c | 7 ++++--- + 1 file changed, 4 insertions(+), 3 deletions(-) + +diff --git a/libweston/backend-drm/drm.c b/libweston/backend-drm/drm.c +index a1e61df8c..b43791db5 100644 +--- a/libweston/backend-drm/drm.c ++++ b/libweston/backend-drm/drm.c +@@ -553,14 +553,14 @@ drm_output_pick_writeback_capture_task(struct drm_output *output) + int32_t height = output->base.current_mode->height; + uint32_t format = output->format->format; + ++ assert(output->device->atomic_modeset); ++ + ct = weston_output_pull_capture_task(&output->base, + WESTON_OUTPUT_CAPTURE_SOURCE_WRITEBACK, + width, height, pixel_format_get_info(format)); + if (!ct) + return; + +- assert(output->device->atomic_modeset); +- + if (output->base.disable_planes > 0) { + msg = "drm: KMS planes usage is disabled for now, so " \ + "writeback capture tasks are rejected"; +@@ -642,7 +642,8 @@ drm_output_repaint(struct weston_output *output_base, pixman_region32_t *damage) + if (drm_output_ensure_hdr_output_metadata_blob(output) < 0) + goto err; + +- drm_output_pick_writeback_capture_task(output); ++ if (device->atomic_modeset) ++ drm_output_pick_writeback_capture_task(output); + + drm_output_render(state, damage); + scanout_state = drm_output_state_get_plane(state, +-- +GitLab + + +From cf64fbe7847859ca11d4722f056d2ebfa8d10177 Mon Sep 17 00:00:00 2001 +From: Leandro Ribeiro +Date: Thu, 1 Jun 2023 17:04:56 -0300 +Subject: [PATCH 3/3] tests: assert that capture info was received before + trying screenshot + +If the source is not supported, we won't receive the capture +information. So the capture info (size/format) will be zeroed, and we +fail while trying to create a buffer for the screenshot with size/format +zeroed. + +With this patch we fail if we don't receive the capture info, what makes +the failure reason more explicit. + +Signed-off-by: Leandro Ribeiro +--- + tests/weston-test-client-helper.c | 3 +++ + 1 file changed, 3 insertions(+) + +diff --git a/tests/weston-test-client-helper.c b/tests/weston-test-client-helper.c +index 3e24a0310..2a7f938d3 100644 +--- a/tests/weston-test-client-helper.c ++++ b/tests/weston-test-client-helper.c +@@ -1705,6 +1705,9 @@ client_capture_output(struct client *client, + + client_roundtrip(client); + ++ assert(capt.width != 0 && capt.height != 0 && capt.drm_format != 0 && ++ "capture source not available"); ++ + buf = create_shm_buffer(client, + capt.width, capt.height, capt.drm_format); + +-- +GitLab + diff --git a/dev-libs/weston/weston-12.0.1.ebuild b/dev-libs/weston/weston-12.0.1-r1.ebuild similarity index 98% rename from dev-libs/weston/weston-12.0.1.ebuild rename to dev-libs/weston/weston-12.0.1-r1.ebuild index 684694b47195..35a02ce6cc88 100644 --- a/dev-libs/weston/weston-12.0.1.ebuild +++ b/dev-libs/weston/weston-12.0.1-r1.ebuild @@ -92,6 +92,10 @@ BDEPEND=" virtual/pkgconfig " +PATCHES=( + "${FILESDIR}/weston-12.0.1-issue757.patch" +) + src_configure() { local emesonargs=( $(meson_use drm backend-drm)