public inbox for git-commits@fedoraproject.org
help / color / mirror / Atom feed
* [rpms/kmscon] f45: Fix freeze with vmwgfx driver
@ 2026-09-03 12:48 Jocelyn Falempe
0 siblings, 0 replies; only message in thread
From: Jocelyn Falempe @ 2026-09-03 12:48 UTC (permalink / raw)
To: git-commits
A new commit has been pushed.
Repo : rpms/kmscon
Branch : f45
Commit : 696626c4f15345d52428db238aca86f862977026
Author : Jocelyn Falempe <jfalempe@redhat.com>
Date : 2026-09-03T14:21:45+02:00
Stats : +94/-38 in 3 file(s)
URL : https://src.fedoraproject.org/rpms/kmscon/c/696626c4f15345d52428db238aca86f862977026?branch=f45
Log:
Fix freeze with vmwgfx driver
Signed-off-by: Jocelyn Falempe <jfalempe@redhat.com>
---
diff --git a/kmscon.spec b/kmscon.spec
index 47505dd..b779b61 100644
--- a/kmscon.spec
+++ b/kmscon.spec
@@ -30,6 +30,9 @@ BuildRequires: pkgconfig(systemd)
BuildRequires: pkgconfig(xkbcommon) >= 0.5.0
BuildRequires: pkgconfig(zlib)
+# Upstream patch to fix pageflip with vmwgfx
+Patch1: terminal-Fix-error-handling-when-pageflip-failed.patch
+
%description
Kmscon is a simple terminal emulator based on linux kernel mode setting (KMS).
It is an attempt to replace the in-kernel VT implementation with a userspace
diff --git a/seat-Fix-use-after-free-in-kmscon_seat_remove_video.patch b/seat-Fix-use-after-free-in-kmscon_seat_remove_video.patch
deleted file mode 100644
index bc05216..0000000
--- a/seat-Fix-use-after-free-in-kmscon_seat_remove_video.patch
+++ /dev/null
@@ -1,38 +0,0 @@
-From 789b29e1a272ebdd97aae7abcaa221308dbda0f5 Mon Sep 17 00:00:00 2001
-From: Jocelyn Falempe <jfalempe@redhat.com>
-Date: Fri, 21 Aug 2026 09:38:43 +0200
-Subject: [PATCH] seat: Fix use after free in kmscon_seat_remove_video()
-
-As the display is removed from the list during traversal, use the safe
-variant
-
-Signed-off-by: Jocelyn Falempe <jfalempe@redhat.com>
----
- src/seat.c | 4 ++--
- 1 file changed, 2 insertions(+), 2 deletions(-)
-
-diff --git a/src/seat.c b/src/seat.c
-index 299620a..ea0b9b0 100644
---- a/src/seat.c
-+++ b/src/seat.c
-@@ -1015,7 +1015,7 @@ static void kmscon_seat_remove_video(struct kmscon_seat *seat, void *data)
- {
- struct kmscon_video *vid = data;
- struct kmscon_display *d;
-- struct shl_dlist *iter;
-+ struct shl_dlist *iter, *tmp;
-
- if (!seat || !vid)
- return;
-@@ -1026,7 +1026,7 @@ static void kmscon_seat_remove_video(struct kmscon_seat *seat, void *data)
- shl_dlist_unlink(&vid->list);
-
- if (vid->video) {
-- shl_dlist_for_each(iter, &seat->displays)
-+ shl_dlist_for_each_safe(iter, tmp, &seat->displays)
- {
- d = shl_dlist_entry(iter, struct kmscon_display, list);
- if (display_video(d->disp) == vid->video)
---
-2.55.0
-
diff --git a/terminal-Fix-error-handling-when-pageflip-failed.patch b/terminal-Fix-error-handling-when-pageflip-failed.patch
new file mode 100644
index 0000000..9830cb1
--- /dev/null
+++ b/terminal-Fix-error-handling-when-pageflip-failed.patch
@@ -0,0 +1,91 @@
+From 0e526b59b86484e4db46b38bd20b3af5c1b606f1 Mon Sep 17 00:00:00 2001
+From: Jocelyn Falempe <jfalempe@redhat.com>
+Date: Thu, 3 Sep 2026 12:52:04 +0200
+Subject: [PATCH 1/2] terminal: Fix error handling when pageflip failed.
+
+When a pageflip returns -EBUSY, scr->swapping can stay true, and the
+display is then never refreshed.
+So remove scr->swapping and directly call display_is_swapping().
+
+This caused kmscon to freeze on vmwgfx, as this driver returns -EBUSY
+regularly.
+
+Signed-off-by: Jocelyn Falempe <jfalempe@redhat.com>
+---
+ src/terminal.c | 18 ++++--------------
+ 1 file changed, 4 insertions(+), 14 deletions(-)
+
+diff --git a/src/terminal.c b/src/terminal.c
+index b6962e7..be8f7b2 100644
+--- a/src/terminal.c
++++ b/src/terminal.c
+@@ -59,7 +59,6 @@ struct screen {
+ struct display *disp;
+ struct kmscon_text *txt;
+
+- bool swapping;
+ bool pending;
+ bool hw_cursor;
+ bool enabled;
+@@ -274,7 +273,7 @@ static void disable_screen(struct screen *scr)
+ int ret;
+
+ log_debug("Disabling screen %s", display_name(scr->disp));
+- if (scr->swapping)
++ if (display_is_swapping(scr->disp))
+ scr->pending = true;
+ else {
+ log_info("Disabling screen %s", display_name(scr->disp));
+@@ -290,7 +289,6 @@ static void disable_screen(struct screen *scr)
+ scr->pending = true;
+ }
+ }
+- scr->swapping = true;
+ }
+ scr->enabled = false;
+ }
+@@ -319,13 +317,8 @@ static void do_redraw_screen(struct screen *scr)
+ kmscon_text_render(scr->txt);
+
+ ret = display_swap(scr->disp);
+- if (ret) {
+- if (ret != -EBUSY)
+- log_warning("cannot swap display [%s] %d", display_name(scr->disp), ret);
+- return;
+- }
+-
+- scr->swapping = true;
++ if (ret && ret != -EBUSY)
++ log_warning("cannot swap display [%s] %d", display_name(scr->disp), ret);
+ }
+
+ static void redraw_screen(struct screen *scr)
+@@ -333,7 +326,7 @@ static void redraw_screen(struct screen *scr)
+ if (!scr->term->awake || !scr->enabled)
+ return;
+
+- if (scr->swapping)
++ if (display_is_swapping(scr->disp))
+ scr->pending = true;
+ else
+ do_redraw_screen(scr);
+@@ -420,8 +413,6 @@ static void redraw_all_text(struct kmscon_terminal *term)
+ shl_dlist_for_each(iter, &term->screens)
+ {
+ scr = shl_dlist_entry(iter, struct screen, list);
+- if (display_is_swapping(scr->disp))
+- scr->swapping = true;
+ redraw_screen(scr);
+ }
+ }
+@@ -430,7 +421,6 @@ static void display_pageflip(void *unused, void *unused2, void *data)
+ {
+ struct screen *scr = data;
+
+- scr->swapping = false;
+ if (scr->pending)
+ do_redraw_screen(scr);
+ }
+--
+2.55.0
+
^ permalink raw reply related [flat|nested] only message in thread
only message in thread, other threads:[~2026-09-03 12:48 UTC | newest]
Thread overview: (only message) (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2026-09-03 12:48 [rpms/kmscon] f45: Fix freeze with vmwgfx driver Jocelyn Falempe
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox