From 49c650eed2ad00bcd5a4c180627027957ed3ff2e Mon Sep 17 00:00:00 2001 From: Xaver Hugl Date: Sat, 10 Apr 2021 14:50:28 +0200 Subject: [PATCH] platforms/drm: don't ignore blob properties without valid blobs Instead of deleting all blob properties without a valid blob check for the blob existing before using it. This is necessary because some properties are needed even without currently valid blobs. BUG: 435786 --- src/plugins/platforms/drm/drm_object.cpp | 3 --- src/plugins/platforms/drm/drm_object_connector.cpp | 5 +++-- 2 files changed, 3 insertions(+), 5 deletions(-) diff --git a/src/plugins/platforms/drm/drm_object.cpp b/src/plugins/platforms/drm/drm_object.cpp index 56eb5ee883..54d7aa3e37 100644 --- a/src/plugins/platforms/drm/drm_object.cpp +++ b/src/plugins/platforms/drm/drm_object.cpp @@ -52,9 +52,6 @@ bool DrmObject::initProps(const QVector &&vector, uint32_t o drmModePropertyBlobRes *blob = nullptr; if (prop->flags & DRM_MODE_PROP_BLOB) { blob = drmModeGetPropertyBlob(m_gpu->fd(), properties->prop_values[i]); - if (!blob) { - break; - } } qCDebug(KWIN_DRM, "Found property %s with value %lu", def.name.data(), properties->prop_values[i]); m_props[j] = new Property(prop.data(), properties->prop_values[i], def.enumNames, blob); diff --git a/src/plugins/platforms/drm/drm_object_connector.cpp b/src/plugins/platforms/drm/drm_object_connector.cpp index 0fd0fe3ad9..6bd17c3297 100644 --- a/src/plugins/platforms/drm/drm_object_connector.cpp +++ b/src/plugins/platforms/drm/drm_object_connector.cpp @@ -50,15 +50,16 @@ bool DrmConnector::init() } // parse edid - if (auto edidProp = m_props[static_cast(PropertyIndex::Edid)]) { + auto edidProp = m_props[static_cast(PropertyIndex::Edid)]; + if (edidProp && edidProp->blob() && edidProp->blob()->data) { m_edid = Edid(edidProp->blob()->data, edidProp->blob()->length); if (!m_edid.isValid()) { qCWarning(KWIN_DRM, "Couldn't parse EDID for connector with id %d", id()); } - deleteProp(PropertyIndex::Edid); } else { qCDebug(KWIN_DRM) << "Could not find edid for connector" << this; } + deleteProp(PropertyIndex::Edid); // check the physical size if (m_edid.physicalSize().isEmpty()) {