From 26d9361695d9a85d8b8b450bf2e03779c5f1e59c Mon Sep 17 00:00:00 2001 From: Aleix Pol Gonzalez Date: Mon, 3 Jun 2024 08:14:32 +0000 Subject: [PATCH] core,backends/drm: Improve error logging Write something into the logs when a call goes awry, it can save some time to the next person porting kwin to a dysfunctional driver. Signed-off-by: Victoria Fischer --- src/backends/drm/drm_connector.cpp | 1 + src/backends/drm/drm_crtc.cpp | 6 +++++- src/backends/drm/drm_plane.cpp | 1 + src/core/drmdevice.cpp | 12 ++++++++++-- 4 files changed, 17 insertions(+), 3 deletions(-) diff --git a/src/backends/drm/drm_connector.cpp b/src/backends/drm/drm_connector.cpp index b1ddbb8a53..e86bcfcb72 100644 --- a/src/backends/drm/drm_connector.cpp +++ b/src/backends/drm/drm_connector.cpp @@ -264,6 +264,7 @@ bool DrmConnector::updateProperties() path.update(props); if (gpu()->atomicModeSetting() && !crtcId.isValid()) { + qCWarning(KWIN_DRM) << "Failed to update the basic connector properties (CRTC_ID)"; return false; } diff --git a/src/backends/drm/drm_crtc.cpp b/src/backends/drm/drm_crtc.cpp index c7c9168682..d632877c83 100644 --- a/src/backends/drm/drm_crtc.cpp +++ b/src/backends/drm/drm_crtc.cpp @@ -49,7 +49,11 @@ bool DrmCrtc::updateProperties() degammaLut.update(props); degammaLutSize.update(props); - return !gpu()->atomicModeSetting() || (modeId.isValid() && active.isValid()); + const bool ret = !gpu()->atomicModeSetting() || (modeId.isValid() && active.isValid()); + if (!ret) { + qCWarning(KWIN_DRM) << "Failed to update the basic crtc properties. modeId:" << modeId.isValid() << "active:" << active.isValid(); + } + return ret; } drmModeModeInfo DrmCrtc::queryCurrentMode() diff --git a/src/backends/drm/drm_plane.cpp b/src/backends/drm/drm_plane.cpp index dd4ffcb5e5..3eb6e52dec 100644 --- a/src/backends/drm/drm_plane.cpp +++ b/src/backends/drm/drm_plane.cpp @@ -100,6 +100,7 @@ bool DrmPlane::updateProperties() if (!type.isValid() || !srcX.isValid() || !srcY.isValid() || !srcW.isValid() || !srcH.isValid() || !crtcX.isValid() || !crtcY.isValid() || !crtcW.isValid() || !crtcH.isValid() || !fbId.isValid()) { + qCWarning(KWIN_DRM) << "Failed to update the basic plane properties"; return false; } diff --git a/src/core/drmdevice.cpp b/src/core/drmdevice.cpp index 81dce17174..bb2ccd75d7 100644 --- a/src/core/drmdevice.cpp +++ b/src/core/drmdevice.cpp @@ -9,6 +9,7 @@ #include "drmdevice.h" #include "gbmgraphicsbufferallocator.h" +#include "utils/common.h" #include #include @@ -73,19 +74,26 @@ std::unique_ptr DrmDevice::openWithAuthentication(const QString &path { FileDescriptor fd(::open(path.toLocal8Bit(), O_RDWR | O_CLOEXEC)); if (!fd.isValid()) { + qCWarning(KWIN_CORE) << "Failed to open drm node:" << path; return nullptr; } struct stat buf; if (fstat(fd.get(), &buf) == -1) { + qCWarning(KWIN_CORE) << "Failed to fstat drm fd" << path; return nullptr; } if (authenticatedFd != -1) { drm_magic_t magic; - drmGetMagic(fd.get(), &magic); - drmAuthMagic(authenticatedFd, magic); + if (drmGetMagic(fd.get(), &magic) < 0) { + qCDebug(KWIN_CORE) << "Failed to get the drm magic token for" << path; + } + if (drmAuthMagic(authenticatedFd, magic) < 0) { + qCWarning(KWIN_CORE) << "Failed to authenticate the drm magic token. path:" << path << "error:" << strerror(errno); + } } gbm_device *device = gbm_create_device(fd.get()); if (!device) { + qCWarning(KWIN_CORE) << "Failed to create gbm device for" << path; return nullptr; } return std::unique_ptr(new DrmDevice(path, buf.st_rdev, std::move(fd), device));