Bug#1113799: trixie-pu: package qt6-base/6.8.2+dfsg-9+deb13u1
Package: release.debian.org
Severity: normal
Tags: trixie
X-Debbugs-Cc: qt6-base@packages.debian.org, deltaone@debian.org
Control: affects -1 + src:qt6-base
User: release.debian.org@packages.debian.org
Usertags: pu
Hi Release Team,
[ Reason ]
When the screen gets locked in the Plasma 6 X11 session, it results
in a very high CPU load until the screen is unlocked again.
The Wayland session is not affected by this.
The bug was reported originally at
https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=1111957 and has since
been fixed in both unstable and testing.
[ Impact ]
Users face very high CPU loads when locking their screen under
Plasma 6 X11.
[ Tests ]
The patch comes from upstream and has gone through the usual Qt
quality assurance.
In addition, I experienced this bug myself and can confirm that the
patch fixes the issue.
[ Risks ]
The risks are very low. The patch is trivial (2 lines are removed), comes
directly from upstream and I have verified it myself.
[ Checklist ]
[x] *all* changes are documented in the d/changelog
[x] I reviewed all changes and I approve them
[x] attach debdiff against the package in (old)stable
[x] the issue is verified as fixed in unstable
[ Changes ]
Addad a 2-line patch that fixes the above-described issue.
Thank you.
--
Med vänliga hälsningar
Patrick Franz
diff -Nru qt6-base-6.8.2+dfsg/debian/changelog qt6-base-6.8.2+dfsg/debian/changelog
--- qt6-base-6.8.2+dfsg/debian/changelog 2025-07-18 15:28:20.000000000 +0200
+++ qt6-base-6.8.2+dfsg/debian/changelog 2025-09-02 21:04:45.000000000 +0200
@@ -1,3 +1,10 @@
+qt6-base (6.8.2+dfsg-9+deb13u1) trixie; urgency=medium
+
+ * Backport patch to fix high CPU load of kwin_x11 when locking the
+ screen.
+
+ -- Patrick Franz <deltaone@debian.org> Tue, 02 Sep 2025 21:04:45 +0200
+
qt6-base (6.8.2+dfsg-9) unstable; urgency=medium
[ Patrick Franz ]
diff -Nru qt6-base-6.8.2+dfsg/debian/patches/series qt6-base-6.8.2+dfsg/debian/patches/series
--- qt6-base-6.8.2+dfsg/debian/patches/series 2025-07-18 15:26:54.000000000 +0200
+++ qt6-base-6.8.2+dfsg/debian/patches/series 2025-09-02 21:03:17.000000000 +0200
@@ -1,6 +1,7 @@
# fixed in 6.8.4/6.9.2
upstream_QColorTransferGeneric_fix_BT2100PQEOTF.patch
upstream_cve-2025-5992_input_range_qcolortransformation.diff
+upstream_fix_high_cpu_load_kwin_x11.diff
# fixed in 6.9.1
upstream_prevent_recursion_in_qsortfilterproxymodel.diff
diff -Nru qt6-base-6.8.2+dfsg/debian/patches/upstream_fix_high_cpu_load_kwin_x11.diff qt6-base-6.8.2+dfsg/debian/patches/upstream_fix_high_cpu_load_kwin_x11.diff
--- qt6-base-6.8.2+dfsg/debian/patches/upstream_fix_high_cpu_load_kwin_x11.diff 1970-01-01 01:00:00.000000000 +0100
+++ qt6-base-6.8.2+dfsg/debian/patches/upstream_fix_high_cpu_load_kwin_x11.diff 2025-08-24 13:08:47.000000000 +0200
@@ -0,0 +1,49 @@
+From e2b88612e5c8dfc3f4bf416dff7b1af3e1e4f0f6 Mon Sep 17 00:00:00 2001
+From: Vlad Zahorodnii <vlad.zahorodnii@kde.org>
+Date: Sun, 27 Jul 2025 15:58:31 +0300
+Subject: [PATCH] XCB: Remove extra xcb_randr_select_input() calls
+
+This fixes high CPU usage in kwin.
+
+If there is a ConfigureNotify event for the root window, QtXCB will
+call xcb_randr_select_input(). The problem is that the X server may send
+an output change event in response to xcb_randr_select_input().
+
+When kwin sees that output change event, it will process the event and
+it can update its override redirect windows, which can produce a few
+ConfigureNotify events for the root window and make kwin get stuck in an
+update loop.
+
+Since the QXcbConnection constructor already subscribes to the RandR
+events, these xcb_randr_select_input() function calls can be removed.
+Also, `true` is not a valid argument for xcb_randr_select_input(). It
+expects a mask of events to listen. For what it's worth, `true`
+corresponds to XCB_RANDR_NOTIFY_MASK_SCREEN_CHANGE = 1, which
+xrandrSelectEvents() already subscribes to.
+
+Pick-to: 6.10 6.9 6.8
+Change-Id: I950a0a6e2e34822ac3da8cd69b96670e4bf4b07d
+Reviewed-by: Liang Qi <liang.qi@qt.io>
+---
+
+diff --git a/src/plugins/platforms/xcb/qxcbscreen.cpp b/src/plugins/platforms/xcb/qxcbscreen.cpp
+index 2f00615..c1b8f84 100644
+--- a/src/plugins/platforms/xcb/qxcbscreen.cpp
++++ b/src/plugins/platforms/xcb/qxcbscreen.cpp
+@@ -499,7 +499,6 @@
+ , m_cursor(std::make_unique<QXcbCursor>(connection, this))
+ {
+ if (connection->isAtLeastXRandR12()) {
+- xcb_randr_select_input(xcb_connection(), screen()->root, true);
+ auto crtc = Q_XCB_REPLY_UNCHECKED(xcb_randr_get_crtc_info, xcb_connection(),
+ m_crtc, output ? output->timestamp : 0);
+ if (crtc) {
+@@ -605,8 +604,6 @@
+ return;
+ }
+
+- xcb_randr_select_input(xcb_connection(), screen()->root, true);
+-
+ m_monitor = monitorInfo;
+ qCDebug(lcQpaScreen) << "xcb_randr_monitor_info_t: primary=" << m_monitor->primary << ", x=" << m_monitor->x << ", y=" << m_monitor->y
+ << ", width=" << m_monitor->width << ", height=" << m_monitor->height
Reply to: