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

Reply via email to