Script 'mail_helper' called by obssrc Hello community, here is the log from the commit of package kwin6 for openSUSE:Factory checked in at 2025-03-07 16:38:52 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Comparing /work/SRC/openSUSE:Factory/kwin6 (Old) and /work/SRC/openSUSE:Factory/.kwin6.new.19136 (New) ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++
Package is "kwin6" Fri Mar 7 16:38:52 2025 rev:26 rq:1250576 version:6.3.2.1 Changes: -------- --- /work/SRC/openSUSE:Factory/kwin6/kwin6.changes 2025-02-27 14:49:57.326027695 +0100 +++ /work/SRC/openSUSE:Factory/.kwin6.new.19136/kwin6.changes 2025-03-07 16:39:57.775818742 +0100 @@ -1,0 +2,7 @@ +Thu Mar 6 08:05:23 UTC 2025 - Fabian Vogt <fab...@ritter-vogt.de> + +- Add patches to fix crashes with multiple monitors (kde#500819, kde#500797) + * 0001-backends-drm-Log-connector-CRTC-matching-steps.patch + * 0002-backends-drm-fix-testing-for-more-connectors-than-CR.patch + +------------------------------------------------------------------- New: ---- 0001-backends-drm-Log-connector-CRTC-matching-steps.patch 0002-backends-drm-fix-testing-for-more-connectors-than-CR.patch BETA DEBUG BEGIN: New:- Add patches to fix crashes with multiple monitors (kde#500819, kde#500797) * 0001-backends-drm-Log-connector-CRTC-matching-steps.patch * 0002-backends-drm-fix-testing-for-more-connectors-than-CR.patch New: * 0001-backends-drm-Log-connector-CRTC-matching-steps.patch * 0002-backends-drm-fix-testing-for-more-connectors-than-CR.patch BETA DEBUG END: ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ Other differences: ------------------ ++++++ kwin6.spec ++++++ --- /var/tmp/diff_new_pack.vpNLOP/_old 2025-03-07 16:39:58.295840502 +0100 +++ /var/tmp/diff_new_pack.vpNLOP/_new 2025-03-07 16:39:58.299840670 +0100 @@ -40,6 +40,9 @@ Source1: https://download.kde.org/stable/plasma/6.3.2/%{rname}-%{version}.tar.xz.sig Source2: plasma.keyring %endif +# PATCH-FIX-UPSTREAM +Patch1: 0001-backends-drm-Log-connector-CRTC-matching-steps.patch +Patch2: 0002-backends-drm-fix-testing-for-more-connectors-than-CR.patch BuildRequires: fdupes BuildRequires: kf6-extra-cmake-modules >= %{kf6_version} BuildRequires: libcap-progs ++++++ 0001-backends-drm-Log-connector-CRTC-matching-steps.patch ++++++ >From 6a9041012201287c4b9dc5ee0d8c61621ed98fa1 Mon Sep 17 00:00:00 2001 From: Vlad Zahorodnii <vlad.zahorod...@kde.org> Date: Thu, 27 Feb 2025 16:52:33 +0200 Subject: [PATCH 1/2] backends/drm: Log connector<->CRTC matching steps This can be useful for debugging purposes. (cherry picked from commit 7f77db993236eca3f30f9bc844ce6e6425bf8472) (cherry picked from commit bb263454548f65796e249adcf374aaebdc5e2db6) --- src/backends/drm/drm_gpu.cpp | 17 ++++++++++++----- 1 file changed, 12 insertions(+), 5 deletions(-) diff --git a/src/backends/drm/drm_gpu.cpp b/src/backends/drm/drm_gpu.cpp index 9291b5296d..de0fd7e212 100644 --- a/src/backends/drm/drm_gpu.cpp +++ b/src/backends/drm/drm_gpu.cpp @@ -345,22 +345,23 @@ void DrmGpu::removeOutputs() DrmPipeline::Error DrmGpu::checkCrtcAssignment(QList<DrmConnector *> connectors, const QList<DrmCrtc *> &crtcs) { + qCDebug(KWIN_DRM) << "Attempting to match" << connectors << "with" << crtcs; if (connectors.isEmpty() || crtcs.isEmpty()) { - if (m_pipelines.isEmpty()) { - // nothing to do - return DrmPipeline::Error::None; - } if (!connectors.empty()) { // we have no crtcs left to drive the remaining connectors + qCDebug(KWIN_DRM) << "Ran out of CRTCs"; return DrmPipeline::Error::InvalidArguments; } - return testPipelines(); + const auto result = testPipelines(); + qCDebug(KWIN_DRM) << "Testing CRTC assignment..." << (result == DrmPipeline::Error::None ? "passed" : "failed"); + return result; } auto connector = connectors.takeFirst(); auto pipeline = connector->pipeline(); if (!pipeline->enabled() || !connector->isConnected()) { // disabled pipelines don't need CRTCs pipeline->setCrtc(nullptr); + qCDebug(KWIN_DRM) << "Unassigning CRTC from connector" << connector->id(); return checkCrtcAssignment(connectors, crtcs); } DrmCrtc *currentCrtc = nullptr; @@ -375,6 +376,7 @@ DrmPipeline::Error DrmGpu::checkCrtcAssignment(QList<DrmConnector *> connectors, auto crtcsLeft = crtcs; crtcsLeft.removeOne(currentCrtc); pipeline->setCrtc(currentCrtc); + qCDebug(KWIN_DRM) << "Assigning CRTC" << currentCrtc->id() << "to connector" << connector->id(); do { DrmPipeline::Error err = checkCrtcAssignment(connectors, crtcsLeft); if (err == DrmPipeline::Error::None || err == DrmPipeline::Error::NoPermission || err == DrmPipeline::Error::FramePending) { @@ -388,6 +390,7 @@ DrmPipeline::Error DrmGpu::checkCrtcAssignment(QList<DrmConnector *> connectors, auto crtcsLeft = crtcs; crtcsLeft.removeOne(crtc); pipeline->setCrtc(crtc); + qCDebug(KWIN_DRM) << "Assigning CRTC" << crtc->id() << "to connector" << connector->id(); do { DrmPipeline::Error err = checkCrtcAssignment(connectors, crtcsLeft); if (err == DrmPipeline::Error::None || err == DrmPipeline::Error::NoPermission || err == DrmPipeline::Error::FramePending) { @@ -447,6 +450,10 @@ DrmPipeline::Error DrmGpu::testPendingConfiguration() DrmPipeline::Error DrmGpu::testPipelines() { + if (m_pipelines.isEmpty()) { + // nothing to do + return DrmPipeline::Error::None; + } QList<DrmPipeline *> inactivePipelines; std::copy_if(m_pipelines.constBegin(), m_pipelines.constEnd(), std::back_inserter(inactivePipelines), [](const auto pipeline) { return pipeline->enabled() && !pipeline->active(); -- 2.48.1 ++++++ 0002-backends-drm-fix-testing-for-more-connectors-than-CR.patch ++++++ >From 1fccab877dbcbe34dc0dde92c939713f271410d9 Mon Sep 17 00:00:00 2001 From: Xaver Hugl <xaver.h...@gmail.com> Date: Wed, 26 Feb 2025 12:58:09 +0100 Subject: [PATCH 2/2] backends/drm: fix testing for more connectors than CRTCs The connectors may not actually be enabled, so the checks could sometimes result in wrongly returning Error::NotEnoughCrtcs. BUG: 500819 CCBUG: 500797 (cherry picked from commit aa11d89a90bc4eb77bfe191a2cadede4d957d2a9) (cherry picked from commit e652bdd3118fa55563caf0125deb0999f5ebd503) --- src/backends/drm/drm_gpu.cpp | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/src/backends/drm/drm_gpu.cpp b/src/backends/drm/drm_gpu.cpp index de0fd7e212..3107ed5173 100644 --- a/src/backends/drm/drm_gpu.cpp +++ b/src/backends/drm/drm_gpu.cpp @@ -345,17 +345,12 @@ void DrmGpu::removeOutputs() DrmPipeline::Error DrmGpu::checkCrtcAssignment(QList<DrmConnector *> connectors, const QList<DrmCrtc *> &crtcs) { - qCDebug(KWIN_DRM) << "Attempting to match" << connectors << "with" << crtcs; - if (connectors.isEmpty() || crtcs.isEmpty()) { - if (!connectors.empty()) { - // we have no crtcs left to drive the remaining connectors - qCDebug(KWIN_DRM) << "Ran out of CRTCs"; - return DrmPipeline::Error::InvalidArguments; - } + if (connectors.isEmpty()) { const auto result = testPipelines(); qCDebug(KWIN_DRM) << "Testing CRTC assignment..." << (result == DrmPipeline::Error::None ? "passed" : "failed"); return result; } + qCDebug(KWIN_DRM) << "Attempting to match" << connectors << "with" << crtcs; auto connector = connectors.takeFirst(); auto pipeline = connector->pipeline(); if (!pipeline->enabled() || !connector->isConnected()) { @@ -364,6 +359,11 @@ DrmPipeline::Error DrmGpu::checkCrtcAssignment(QList<DrmConnector *> connectors, qCDebug(KWIN_DRM) << "Unassigning CRTC from connector" << connector->id(); return checkCrtcAssignment(connectors, crtcs); } + if (crtcs.isEmpty()) { + // we have no crtc left to drive this connector + qCDebug(KWIN_DRM) << "Ran out of CRTCs"; + return DrmPipeline::Error::InvalidArguments; + } DrmCrtc *currentCrtc = nullptr; if (m_atomicModeSetting) { // try the crtc that this connector is already connected to first -- 2.48.1