https://bugs.kde.org/show_bug.cgi?id=465284

            Bug ID: 465284
           Summary: kwin_wayland crashes involving dri2_create_drawable
                    when Plasma starts and the llvmpipe driver from Mesa
                    23.0-rc3 and 23.0-rc4 is used
    Classification: Plasma
           Product: kwin
           Version: 5.26.90
          Platform: Fedora RPMs
                OS: Linux
            Status: REPORTED
          Severity: normal
          Priority: NOR
         Component: wayland-generic
          Assignee: kwin-bugs-n...@kde.org
          Reporter: matt.fagn...@bell.net
  Target Milestone: ---

Created attachment 155941
  --> https://bugs.kde.org/attachment.cgi?id=155941&action=edit
Full trace of all threads of kwin_wayland crash when starting using llvmpipe
from mesa 23.0-rc3 by Adam Williamson from
https://bugzilla.redhat.com/show_bug.cgi?id=2164667#c10

SUMMARY

kwin_wayland crashes repeatedly when Plasma starts and the llvmpipe driver from
Mesa 23.0-rc3 and 23.0-rc4 is used resulting in a black screen with a flashing
text cursor _ at the top left of the screen. I first saw this when booting the
Fedora Rawhide live image Fedora-KDE-Live-x86_64-Rawhide-20230202.n.0.iso with
mesa-23.0.0~rc4-1.fc38 in a GNOME Boxes QEMU/KVM VM with 3D acceleration
disabled using the llvmpipe driver. kwin_wayland crashed 10 times in a row.
There were also many other Plasma programs that crashed as shown by coredumpctl
after the kwin_wayland ones I guess because kwin_wayland didn't start. This
problem didn't happen with llvmpipe from mesa-22.3.3-3.fc38 and earlier. Adam
Williamson first reported this problem at
https://bugzilla.redhat.com/show_bug.cgi?id=2164667 with the following trace of
the crashing thread 1 involving dri2_create_drawable

Thread 1 (Thread 0x7f3ef8a1ee40 (LWP 905)):
#0  0x0000000000000000 in ?? ()
No symbol table info available.
#1  0x00007f3eeaab44c3 in dri2_create_drawable
(dri2_dpy=dri2_dpy@entry=0x56095bfae740, config=config@entry=0x56095bf0d850,
dri2_surf=dri2_surf@entry=0x56095c3b6210,
loaderPrivate=loaderPrivate@entry=0x56095c3b38c0) at
../src/egl/drivers/dri2/egl_dri2.c:1573
        createNewDrawable = <optimized out>
#2  0x00007f3eeaab95b1 in dri2_drm_create_window_surface (disp=0x56095bfadbf0,
conf=<optimized out>, native_surface=0x56095c3b38c0, attrib_list=0x0) at
../src/egl/drivers/dri2/platform_drm.c:180
        dri2_dpy = 0x56095bfae740
        dri2_conf = <optimized out>
        dri2_surf = 0x56095c3b6210
        surface = 0x56095c3b38c0
        surf = 0x56095c3b38c0
        config = 0x56095bf0d850
#3  0x00007f3eeaab1129 in dri2_create_window_surface (disp=0x56095bfadbf0,
conf=0x56095bfb0310, native_window=0x56095c3b38c0, attrib_list=0x0) at
../src/egl/drivers/dri2/egl_dri2.c:1745
        dri2_dpy = <optimized out>
        ret = <optimized out>
#4  0x00007f3eeaaa266b in _eglCreateWindowSurfaceCommon (disp=0x56095bfadbf0,
config=<optimized out>, native_window=0x56095c3b38c0, attrib_list=0x0) at
../src/egl/main/eglapi.c:1082
        __rs = {0x0}
        __rsp = <optimized out>
        conf = 0x56095bfb0310
        surf = <optimized out>
        ret = <optimized out>
        __func__ = "_eglCreateWindowSurfaceCommon"
#5  0x00007f3eff9b2430 in KWin::GbmSurface::createSurface
(backend=0x56095bf882f0, size=..., format=875713112, flags=5,
config=0x56095bfb0310) at
/usr/src/debug/kwin-5.26.90-1.fc38.x86_64/src/backends/drm/drm_gbm_surface.cpp:134
        surface = 0x56095c3b38c0
        eglSurface = <optimized out>
#6  0x00007f3effabccb4 in KWin::EglGbmLayerSurface::createGbmSurface
(forceLinear=false, modifiers=..., format=875713112, size=...,
this=0x56095bf6daa8) at
/usr/src/debug/kwin-5.26.90-1.fc38.x86_64/src/backends/drm/drm_egl_layer_surface.cpp:325
        config = <optimized out>
        ret = std::variant<std::shared_ptr<KWin::GbmSurface>,
KWin::GbmSurface::Error> [no contained value]
        surface = <optimized out>
        allowModifiers = <optimized out>
        gbmFlags = <optimized out>
        modifiersEnvSet = <optimized out>
        modifiersEnv = <optimized out>
        allowModifiers = <optimized out>
        config = <optimized out>
        gbmFlags = <optimized out>
        ret = <optimized out>
        surface = <optimized out>
        ret = <optimized out>
        surface = <optimized out>
#7  KWin::EglGbmLayerSurface::createSurface
(importMode=KWin::EglGbmLayerSurface::MultiGpuImportMode::Dmabuf,
modifiers=..., format=875713112, size=..., this=0x56095bf6daa8) at
/usr/src/debug/kwin-5.26.90-1.fc38.x86_64/src/backends/drm/drm_egl_layer_surface.cpp:281
        ret = {gbmSurface = std::shared_ptr<KWin::GbmSurface> (empty) = {get()
= 0x0}, importSwapchain = std::shared_ptr<KWin::DumbSwapchain> (empty) = {get()
= 0x0}, importMode = KWin::EglGbmLayerSurface::MultiGpuImportMode::Dmabuf,
currentBuffer = std::shared_ptr<KWin::GbmBuffer> (empty) = {get() = 0x0},
currentFramebuffer = std::shared_ptr<KWin::DrmFramebuffer> (empty) = {get() =
0x0}, forceLinear = false}
        ret = <optimized out>
#8  KWin::EglGbmLayerSurface::createSurface(QSize const&, QMap<unsigned int,
QVector<unsigned long> > const&) const::{lambda(QVector<KWin::GbmFormat>
const&,
KWin::EglGbmLayerSurface::MultiGpuImportMode)#1}::operator()(QVector<KWin::GbmFormat>
const&, KWin::EglGbmLayerSurface::MultiGpuImportMode) const [clone .isra.0]
(__closure=__closure@entry=0x7ffcd5b33180,
importMode=importMode@entry=KWin::EglGbmLayerSurface::MultiGpuImportMode::Dmabuf,
gbmFormats=...) at
/usr/src/debug/kwin-5.26.90-1.fc38.x86_64/src/backends/drm/drm_egl_layer_surface.cpp:248
        surface = std::optional<KWin::EglGbmLayerSurface::Surface> =
{[contained value] = {gbmSurface = std::shared_ptr<KWin::GbmSurface> (use count
551797064, weak count -1052120368) = {get() = 0x7f3efdf88160
<QArrayData::shared_null>}, importSwapchain =
std::shared_ptr<KWin::DumbSwapchain> (use count -34045600, weak count 32573) =
{get() = 0x7ffcd5b330e0}, importMode =
(KWin::EglGbmLayerSurface::MultiGpuImportMode::DumbBuffer | unknown:
0xfffffffe), currentBuffer = std::shared_ptr<KWin::GbmBuffer> (use count
1547395312, weak count 22024) = {get() = 0x7ffcd5b33170}, currentFramebuffer =
std::shared_ptr<KWin::DrmFramebuffer> (expired, weak count 0) = {get() =
0x7f3eff9a3008 <QVector<KWin::GbmFormat>::realloc(int,
QFlags<QArrayData::AllocationOption>)+40>}, forceLinear = 8}}
        format = @0x56095c3b6108: {drmFormat = 875713112, bpp = 24, alphaSize =
0}
        __for_range = <optimized out>
        __for_begin = 0x56095c3b6108
        __for_end = <optimized out>
        formats = @0x7ffcd5b332a8: {d = 0x56095be6de00}
        size = @0x7ffcd5b332b0: {wd = 1280, ht = 800}
        this = 0x56095bf6daa8
#9  0x00007f3eff9a724b in KWin::EglGbmLayerSurface::createSurface (formats=...,
size=..., this=0x56095bf6daa8) at
/usr/src/debug/kwin-5.26.90-1.fc38.x86_64/src/backends/drm/drm_egl_layer_surface.cpp:256
        surface = std::optional<KWin::EglGbmLayerSurface::Surface> =
{[contained value] = {gbmSurface = <error reading variable: Cannot access
memory at address 0x7f0100000008>, importSwapchain = <error reading variable:
Cannot access memory at address 0x10>, importMode = (unknown: 0xd5b33400),
currentBuffer = std::shared_ptr<KWin::GbmBuffer> (use count -6580135, weak
count 32573) = {get() = 0x7ffcd5b333f8}, currentFramebuffer =
std::shared_ptr<KWin::DrmFramebuffer> (use count 1547383072, weak count 22024)
= {get() = 0x7f3efdd32246 <QCryptographicHash::result() const+3542>},
forceLinear = true}}
        preferredFormats = {d = 0x56095c3b60f0}
        fallbackFormats = {d = 0x7f3efdf88160 <QArrayData::shared_null>}
        sort = <optimized out>
        testFormats = {__this = 0x56095bf6daa8, __size = @0x7ffcd5b332b0,
__formats = @0x7ffcd5b332a8}
        preferredFormats = <optimized out>
        fallbackFormats = <optimized out>
        sort = <optimized out>
        testFormats = <optimized out>
        it = <optimized out>
        format = <optimized out>
        surface = <optimized out>
        surface = <optimized out>
        surface = <optimized out>
        surface = <optimized out>
#10 KWin::EglGbmLayerSurface::checkSurface (this=this@entry=0x56095bf6daa8,
size=..., formats=...) at
/usr/src/debug/kwin-5.26.90-1.fc38.x86_64/src/backends/drm/drm_egl_layer_surface.cpp:204
        newSurface = std::optional<KWin::EglGbmLayerSurface::Surface> =
{[contained value] = {gbmSurface = <error reading variable: Cannot access
memory at address 0xb03b3e57d90427ff>, importSwapchain = <error reading
variable: Cannot access memory at address 0xe6673214bbb7285d>, importMode =
(unknown: 0x56697274), currentBuffer = <error reading variable: Cannot access
memory at address 0x6c2d312d72747569>, currentFramebuffer = <error reading
variable: Cannot access memory at address 0x3a80000069746f7a>, forceLinear =
false}}
#11 0x00007f3eff9a8ec1 in KWin::EglGbmLayerSurface::renderTestBuffer
(formats=..., bufferSize=..., this=0x56095bf6daa8) at
/usr/src/debug/kwin-5.26.90-1.fc38.x86_64/src/backends/drm/drm_egl_layer_surface.cpp:188
No locals.
#12 KWin::EglGbmLayer::checkTestBuffer (this=0x56095bf6da70) at
/usr/src/debug/kwin-5.26.90-1.fc38.x86_64/src/backends/drm/drm_egl_layer.cpp:68
No locals.
#13 0x00007f3eff9b575a in KWin::DrmPipeline::legacyModeset
(this=this@entry=0x56095c3b23a0) at
/usr/include/c++/13/bits/shared_ptr_base.h:1665
        connId = 34
        buffer = std::shared_ptr<KWin::DrmFramebuffer> (use count 1547437184,
weak count 22024) = {get() = 0x56095c3c0540}
#14 0x00007f3eff9b93b1 in KWin::DrmPipeline::applyPendingChangesLegacy
(this=0x56095c3b23a0) at
/usr/src/debug/kwin-5.26.90-1.fc38.x86_64/src/backends/drm/drm_pipeline_legacy.cpp:116
        err = <optimized out>
        vrr = <optimized out>
        contentType = <optimized out>
#15 0x00007f3eff9b9859 in KWin::DrmPipeline::commitPipelinesLegacy
(mode=KWin::DrmPipeline::CommitMode::TestAllowModeset, pipelines=...) at
/usr/src/debug/kwin-5.26.90-1.fc38.x86_64/src/backends/drm/drm_pipeline_legacy.cpp:70
        pipeline = @0x56095c3c0538: 0x56095c3b23a0
        __for_range = @0x56095be81090: {d = 0x56095c3c0520}
        __for_begin = 0x56095c3c0538
        __for_end = 0x56095c3c0540
        err = KWin::DrmPipeline::Error::None
        err = <optimized out>
        pipeline = <optimized out>
        __for_range = <optimized out>
        __for_begin = <optimized out>
        __for_end = <optimized out>
        pipeline = <optimized out>
        __for_range = <optimized out>
        __for_begin = <optimized out>
        __for_end = <optimized out>
        pipeline = <optimized out>
        __for_range = <optimized out>
        __for_begin = <optimized out>
        __for_end = <optimized out>
#16 KWin::DrmPipeline::commitPipelines (pipelines=...,
mode=KWin::DrmPipeline::CommitMode::TestAllowModeset, unusedObjects=...) at
/usr/src/debug/kwin-5.26.90-1.fc38.x86_64/src/backends/drm/drm_pipeline.cpp:93
No locals.
#17 0x00007f3eff9ad9de in KWin::DrmGpu::testPipelines (this=0x56095be80ff0) at
/usr/src/debug/kwin-5.26.90-1.fc38.x86_64/src/backends/drm/drm_gpu.cpp:463
        inactivePipelines = {d = 0x7f3efdf88160 <QArrayData::shared_null>}
        test = <optimized out>
        inactivePipelines = <optimized out>
        test = <optimized out>
        pipeline = <optimized out>
        __for_range = <optimized out>
        __for_begin = <optimized out>
        __for_end = <optimized out>
        pipeline = <optimized out>
        __for_range = <optimized out>
        __for_begin = <optimized out>
        __for_end = <optimized out>
#18 KWin::DrmGpu::checkCrtcAssignment (this=this@entry=0x56095be80ff0,
connectors=..., crtcs=...) at
/usr/src/debug/kwin-5.26.90-1.fc38.x86_64/src/backends/drm/drm_gpu.cpp:368
        connector = <optimized out>
        pipeline = <optimized out>
        currentCrtc = <optimized out>
#19 0x00007f3eff9adf08 in KWin::DrmGpu::checkCrtcAssignment
(this=this@entry=0x56095be80ff0, connectors=..., crtcs=...) at
/usr/src/debug/kwin-5.26.90-1.fc38.x86_64/src/backends/drm/drm_gpu.cpp:403
        err = <optimized out>
        crtcsLeft = {d = 0x56095c3b60a0}
        crtc = @0x56095c3b53a8: 0x56095bea2370
        __for_range = @0x7ffcd5b335d0: {d = 0x56095c3b5390}
        __for_begin = 0x56095c3b53a8
        __for_end = 0x56095c3b53b0
        connector = <optimized out>
        pipeline = <optimized out>
        currentCrtc = 0x0
#20 0x00007f3eff9b0531 in KWin::DrmGpu::testPendingConfiguration
(this=0x56095be80ff0) at
/usr/src/debug/kwin-5.26.90-1.fc38.x86_64/src/backends/drm/drm_gpu.cpp:440
        connectors = {d = 0x56095c3b3980}
        crtcs = {d = 0x56095c3b5390}
        err = <optimized out>
#21 0x00007f3eff99cc5c in KWin::DrmGpu::updateOutputs (this=<optimized out>) at
/usr/src/debug/kwin-5.26.90-1.fc38.x86_64/src/backends/drm/drm_gpu.cpp:305
        resources = <optimized out>
        addedOutputs = {d = 0x56095c3c0430}
        err = <optimized out>
        lessees = <optimized out>
        existing = {d = 0x56095c3c0570}
        resources = <optimized out>
        lessees = <optimized out>
        existing = <optimized out>
        addedOutputs = <optimized out>
        err = <optimized out>
        qt_category_enabled = <optimized out>
        output = <optimized out>
        __for_range = <optimized out>
        __for_begin = <optimized out>
        __for_end = <optimized out>
        leaseActive = <optimized out>
        i = <optimized out>
        i = <optimized out>
        currentConnector = <optimized out>
        it = <optimized out>
        conn = <optimized out>
        it = <optimized out>
        conn = <optimized out>
        output = <optimized out>
        stillExists = <optimized out>
        pipeline = <optimized out>
        output = <optimized out>
        qt_category_enabled = <optimized out>
        crtc = <optimized out>
        __for_range = <optimized out>
        __for_begin = <optimized out>
        __for_end = <optimized out>
        plane = <optimized out>
        __for_range = <optimized out>
        __for_begin = <optimized out>
        __for_end = <optimized out>
        pipeline = <optimized out>
        __for_range = <optimized out>
        __for_begin = <optimized out>
        __for_end = <optimized out>
        pipeline = <optimized out>
        __for_range = <optimized out>
        __for_begin = <optimized out>
        __for_end = <optimized out>
        output = <optimized out>
        __for_range = <optimized out>
        __for_begin = <optimized out>
        __for_end = <optimized out>
        it = <optimized out>
        qt_category_enabled = <optimized out>
        pipeline = <optimized out>
        __for_range = <optimized out>
        __for_begin = <optimized out>
        __for_end = <optimized out>
        output = <optimized out>
        __for_range = <optimized out>
        __for_begin = <optimized out>
        __for_end = <optimized out>
#22 KWin::DrmBackend::updateOutputs (this=0x56095be8b570) at
/usr/src/debug/kwin-5.26.90-1.fc38.x86_64/src/backends/drm/drm_backend.cpp:325
        it = std::unique_ptr<KWin::DrmGpu> = {get() = 0x56095be80ff0}
#23 0x00007f3efdee7ef1 in QtPrivate::QSlotObjectBase::call (a=0x7ffcd5b33bb0,
r=<optimized out>, this=0x56095bfa83d0) at
../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398
No locals.
#24 doActivate<false> (sender=0x56095bf85b80, signal_index=6,
argv=0x7ffcd5b33bb0) at kernel/qobject.cpp:3923
        obj = <optimized out>
        receiver = <optimized out>
        td = <optimized out>
        receiverInSameThread = <optimized out>
        senderData = {previous = 0x0, receiver = 0x56095be8b570, sender =
0x56095bf85b80, signal = 6}
        c = 0x56095bfa8630
        connections = {d = 0x56095bfa6a90}
        list = <optimized out>
        inSenderThread = true
        highestConnectionId = 4
        signalVector = 0x56095bfa7760
        currentThreadId = 0x7f3ef8a1ee40
        sp = <optimized out>
        signal_spy_set = 0x0
        empty_argv = {0x0}
        senderDeleted = false
#25 0x00007f3eff7f458f in KWin::Compositor::setupStart (this=0x56095bf85b80) at
/usr/src/debug/kwin-5.26.90-1.fc38.x86_64/src/composite.cpp:335
        availableCompositors = {d = 0x56095be7d450}
        candidateCompositors = {d = 0x56095bfa43a0}
#26 0x00007f3eff7f4cf5 in KWin::Compositor::setupStart
(this=this@entry=0x56095bf85b80) at
/usr/src/debug/kwin-5.26.90-1.fc38.x86_64/src/composite.cpp:338
        availableCompositors = <optimized out>
        candidateCompositors = <optimized out>
        userConfigIt = <optimized out>
        qt_category_enabled = <optimized out>
        type = <optimized out>
        __for_range = <optimized out>
        __for_begin = <optimized out>
        __for_end = <optimized out>
        stop = <optimized out>
        qt_category_enabled = <optimized out>
        qt_category_enabled = <optimized out>
        qt_category_enabled = <optimized out>
        con = <optimized out>
        qt_category_enabled = <optimized out>
        qt_category_enabled = <optimized out>
#27 0x00007f3eff7f6008 in KWin::WaylandCompositor::start (this=0x56095bf85b80)
at /usr/src/debug/kwin-5.26.90-1.fc38.x86_64/src/composite.cpp:799
No locals.
#28 0x00007f3efdedefdb in QObject::event (this=0x56095bf85b80,
e=0x56095bfa6070) at kernel/qobject.cpp:1347
        mce = 0x56095bfa6070
        sender = {previous = 0x0, receiver = 0x56095bf85b80, sender = 0x0,
signal = -1}
#29 0x00007f3efd5aece5 in QApplicationPrivate::notify_helper (this=<optimized
out>, receiver=0x56095bf85b80, e=0x56095bfa6070) at
kernel/qapplication.cpp:3640
        consumed = false
        filtered = false
#30 0x00007f3efdeb35e8 in QCoreApplication::notifyInternal2
(receiver=0x56095bf85b80, event=0x56095bfa6070) at
kernel/qcoreapplication.cpp:1064
        selfRequired = true
        result = false
        cbdata = {0x56095bf85b80, 0x56095bfa6070, 0x7ffcd5b33dcf}
        d = <optimized out>
        threadData = 0x56095be70bc0
        scopeLevelCounter = {threadData = 0x56095be70bc0}
#31 0x00007f3efdeb6a95 in QCoreApplicationPrivate::sendPostedEvents
(receiver=receiver@entry=0x0, event_type=event_type@entry=0,
data=data@entry=0x56095be70bc0) at kernel/qcoreapplication.cpp:1821
        e = 0x56095bfa6070
        pe = <optimized out>
        r = 0x56095bf85b80
        relocker = <optimized out>
        event_deleter = {d = 0x56095bfa6070}
        locker = {_M_device = 0x56095be70bf0, _M_owns = false}
        startOffset = 0
        i = @0x56095be70be4: 7
        cleanup = {receiver = 0x0, event_type = 0, data = 0x56095be70bc0,
exceptionCaught = true}
#32 0x00007f3efdf03311 in QEventDispatcherUNIX::processEvents
(this=0x56095be73940, flags=...) at kernel/qeventdispatcher_unix.cpp:468
        d = 0x56095be758c0
        threadData = 0x56095be70bc0
        include_timers = <optimized out>
        include_notifiers = <optimized out>
        wait_for_events = <optimized out>
        canWait = <optimized out>
        tm = <optimized out>
        wait_tm = {tv_sec = 140723893780512, tv_nsec = 5}
        nevents = <optimized out>
#33 0x000056095ae16041 in
QUnixEventDispatcherQPA::processEvents(QFlags<QEventLoop::ProcessEventsFlag>)
()
No symbol table info available.
#34 0x00007f3efdeb1fbb in QEventLoop::exec (this=this@entry=0x7ffcd5b34020,
flags=..., flags@entry=...) at
../../include/QtCore/../../src/corelib/global/qflags.h:69
        d = 0x56095bfa6000
        threadData = <optimized out>
        locker = {val = 94598196397240}
        ref = {d = 0x56095bfa6000, locker = @0x7ffcd5b33fa8, exceptionCaught =
true}
        app = 0x7ffcd5b342c0
#35 0x00007f3efdeba23b in QCoreApplication::exec () at
../../include/QtCore/../../src/corelib/global/qflags.h:121
        threadData = 0x56095be70bc0
        eventLoop = {<QObject> = {_vptr.QObject = 0x7f3efe166b48 <vtable for
QEventLoop+16>, static staticMetaObject = {d = {superdata = {direct = 0x0},
stringdata = 0x7f3efe06c7a0 <qt_meta_stringdata_QObject>, data = 0x7f3efe06c680
<qt_meta_data_QObject>, static_metacall = 0x7f3efdee5290
<QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>,
relatedMetaObjects = 0x0, extradata = 0x0}}, d_ptr = {d = 0x56095bfa6000},
static staticQtMetaObject = {d = {superdata = {direct = 0x0}, stringdata =
0x7f3efe06f740 <qt_meta_stringdata_Qt>, data = 0x7f3efe06c8c0
<qt_meta_data_Qt>, static_metacall = 0x0, relatedMetaObjects = 0x0, extradata =
0x0}}}, static staticMetaObject = {d = {superdata = {direct = 0x7f3efe15e3c0
<QObject::staticMetaObject>}, stringdata = 0x7f3efe066580
<qt_meta_stringdata_QEventLoop>, data = 0x7f3efe066520
<qt_meta_data_QEventLoop>, static_metacall = 0x7f3efdeb1bc0
<QEventLoop::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>,
relatedMetaObjects = 0x0, extradata = 0x0}}}
        returnCode = <optimized out>
#36 0x00007f3efe35f5bd in QGuiApplication::exec () at
kernel/qguiapplication.cpp:1863
No locals.
#37 0x00007f3efd5aec59 in QApplication::exec () at kernel/qapplication.cpp:2832
No locals.
#38 0x000056095ad32c24 in main (argc=<optimized out>, argv=<optimized out>) at
/usr/src/debug/kwin-5.26.90-1.fc38.x86_64/src/main_wayland.cpp:628
        environment = {d = {d = 0x56095be6fb10}}
        a = {<KWin::Application> = {<QApplication> = {<QGuiApplication> =
{<QCoreApplication> = {<QObject> = {_vptr.QObject = 0x56095ae697a0 <vtable for
KWin::ApplicationWayland+16>, static staticMetaObject = {d = {superdata =
{direct = 0x0}, stringdata = 0x7f3efe06c7a0 <qt_meta_stringdata_QObject>, data
= 0x7f3efe06c680 <qt_meta_data_QObject>, static_metacall = 0x7f3efdee5290
<QObject::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>,
relatedMetaObjects = 0x0, extradata = 0x0}}, d_ptr = {d = 0x56095be70a50},
static staticQtMetaObject = {d = {superdata = {direct = 0x0}, stringdata =
0x7f3efe06f740 <qt_meta_stringdata_Qt>, data = 0x7f3efe06c8c0
<qt_meta_data_Qt>, static_metacall = 0x0, relatedMetaObjects = 0x0, extradata =
0x0}}}, static staticMetaObject = {d = {superdata = {direct = 0x7f3efe15e3c0
<QObject::staticMetaObject>}, stringdata = 0x7f3efe066c60
<qt_meta_stringdata_QCoreApplication>, data = 0x7f3efe066b40
<qt_meta_data_QCoreApplication>, static_metacall = 0x7f3efdeb4ef0
<QCoreApplication::qt_static_metacall(QObject*, QMetaObject::Call, int,
void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}, static self =
0x7ffcd5b342c0}, static staticMetaObject = {d = {superdata = {direct =
0x7f3efe166ce0 <QCoreApplication::staticMetaObject>}, stringdata =
0x7f3efe7315c0 <qt_meta_stringdata_QGuiApplication>, data = 0x7f3efe731340
<qt_meta_data_QGuiApplication>, static_metacall = 0x7f3efe360670
<QGuiApplication::qt_static_metacall(QObject*, QMetaObject::Call, int,
void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}}, static staticMetaObject
= {d = {superdata = {direct = 0x7f3efe816b20
<QGuiApplication::staticMetaObject>}, stringdata = 0x7f3efd9868c0
<qt_meta_stringdata_QApplication>, data = 0x7f3efd986740
<qt_meta_data_QApplication>, static_metacall = 0x7f3efd5b2a20
<QApplication::qt_static_metacall(QObject*, QMetaObject::Call, int, void**)>,
relatedMetaObjects = 0x0, extradata = 0x0}}}, static staticMetaObject = {d =
{superdata = {direct = 0x7f3efdace4a0 <QApplication::staticMetaObject>},
stringdata = 0x7f3effadb580
<_ZL36qt_meta_stringdata_KWin__Application.lto_priv.0>, data = 0x7f3effad54c0
<_ZL30qt_meta_data_KWin__Application.lto_priv.0>, static_metacall =
0x7f3eff7b8f40 <KWin::Application::qt_static_metacall(QObject*,
QMetaObject::Call, int, void**)>, relatedMetaObjects = 0x0, extradata = 0x0}},
m_eventFilters = {<QListSpecialMethods<QPointer<KWin::X11EventFilterContainer>
>> = {<No data fields>}, {p = {static shared_null = {ref = {atomic = {_q_value
= std::atomic<int> = { -1 }}}, alloc = 0, begin = 0, end = 0, array = {0x0}}, d
= 0x7f3efdf88c40 <QListData::shared_null>}, d = 0x7f3efdf88c40
<QListData::shared_null>}}, m_genericEventFilters =
{<QListSpecialMethods<QPointer<KWin::X11EventFilterContainer> >> = {<No data
fields>}, {p = {static shared_null = {ref = {atomic = {_q_value =
std::atomic<int> = { -1 }}}, alloc = 0, begin = 0, end = 0, array = {0x0}}, d =
0x7f3efdf88c40 <QListData::shared_null>}, d = 0x7f3efdf88c40
<QListData::shared_null>}}, m_eventFilter =
std::unique_ptr<KWin::XcbEventFilter> = {get() = 0x56095be7e8e0},
m_followLocale1 = true, m_configLock = false, m_config = {d = 0x56095be7a100},
m_kxkbConfig = {d = 0x56095be8ad70}, m_operationMode =
KWin::Application::OperationModeWaylandOnly, m_x11Time = 0, m_rootWindow = 0,
m_connection = 0x0, m_useKActivities = true, m_session =
std::unique_ptr<KWin::Session> = {get() = 0x56095be87520}, m_outputBackend =
std::unique_ptr<KWin::OutputBackend> = {get() = 0x56095be8b570}, m_terminating
= false, m_xwaylandScale = 1, m_processEnvironment = {d = {d =
0x56095be6fb10}}, m_pluginManager = std::unique_ptr<KWin::PluginManager> =
{get() = 0x0}, m_inputMethod = std::unique_ptr<KWin::InputMethod> = {get() =
0x56095bf85da0}, m_colorManager = std::unique_ptr<KWin::ColorManager> = {get()
= 0x0}, m_tabletModeManager = std::unique_ptr<KWin::TabletModeManager> = {get()
= 0x56095bfaaf10}, m_screenLockerWatcher =
std::unique_ptr<KWin::ScreenLockerWatcher> = {get() = 0x56095be8b400}}, static
staticMetaObject = {d = {superdata = {direct = 0x7f3effbee660
<KWin::Application::staticMetaObject>}, stringdata = 0x56095ae1f0a0
<qt_meta_stringdata_KWin__ApplicationWayland>, data = 0x56095ae1d740
<qt_meta_data_KWin__ApplicationWayland>, static_metacall = 0x56095ad34800
<KWin::ApplicationWayland::qt_static_metacall(QObject*, QMetaObject::Call, int,
void**)>, relatedMetaObjects = 0x0, extradata = 0x0}}, m_startXWayland = false,
m_applicationsToStart = {<QList<QString>> = {<QListSpecialMethods<QString>> =
{<No data fields>}, {p = {d = 0x7f3efdf88c40 <QListData::shared_null>}, d =
0x7f3efdf88c40 <QListData::shared_null>}}, <No data fields>},
m_inputMethodServerToStart = {d = 0x56095be7dc60}, m_sessionArgument = {d =
0x7f3efdf88160 <QArrayData::shared_null>}, m_xwayland =
std::unique_ptr<KWin::Xwl::Xwayland> = {get() = 0x0}, m_xwaylandListenFds = {d
= 0x7f3efdf88160 <QArrayData::shared_null>}, m_xwaylandDisplay = {d =
0x7f3efdf88160 <QArrayData::shared_null>}, m_xwaylandXauthority = {d =
0x7f3efdf88160 <QArrayData::shared_null>}, m_settingsWatcher = {value = 0x0, d
= 0x0}}
        xwaylandOption = {d = {d = 0x56095be72290}}
        waylandSocketOption = {d = {d = 0x56095be81b20}}
        x11DisplayOption = {d = {d = 0x56095be81b60}}
        waylandDisplayOption = {d = {d = 0x56095be81ba0}}
        virtualFbOption = {d = {d = 0x56095be81be0}}
        widthOption = {d = {d = 0x56095be81c50}}
        heightOption = {d = {d = 0x56095be81cf0}}
        scaleOption = {d = {d = 0x56095be81db0}}
        outputCountOption = {d = {d = 0x56095be81fa0}}
        waylandSocketFdOption = {d = {d = 0x56095be82060}}
        xwaylandListenFdOption = {d = {d = 0x56095be820d0}}
        xwaylandDisplayOption = {d = {d = 0x56095be82140}}
        xwaylandXAuthorityOption = {d = {d = 0x56095be82180}}
        replaceOption = {d = {d = 0x56095be822d0}}
        drmOption = {d = {d = 0x56095be82310}}
        locale1Option = {d = {d = 0x56095be82470}}
        parser = {d = 0x56095be7d280}
        inputMethodOption = {d = {d = 0x56095be83250}}
        screenLockerOption = {d = {d = 0x56095be83420}}
        noScreenLockerOption = {d = {d = 0x56095be834c0}}
        noGlobalShortcutsOption = {d = {d = 0x56095be835c0}}
        noActivitiesOption = {d = {d = 0x56095be836d0}}
        exitWithSessionOption = {d = {d = 0x56095be83890}}
        backendType = <optimized out>
        pluginName = {d = 0x7f3efdf88160 <QArrayData::shared_null>}
        initialWindowSize = {wd = 1024, ht = 768}
        outputCount = <optimized out>
        outputScale = <optimized out>
        ok = true
        width = <optimized out>
        height = <optimized out>
        scale = <optimized out>
        count = <optimized out>
        server = <optimized out>
        flags = <optimized out>
        socketName = {d = 0x7f3efdf88160 <QArrayData::shared_null>}
        BackendType::Kms = BackendType::Kms
        BackendType::X11 = BackendType::X11
        BackendType::Wayland = BackendType::Wayland
        BackendType::Virtual = BackendType::Virtual

The trace had errors accessing memory in frame #9 in
KWin::EglGbmLayerSurface::createSurface 
surface = std::optional<KWin::EglGbmLayerSurface::Surface> = {[contained value]
= {gbmSurface = <error reading variable: Cannot access memory at address
0x7f0100000008>, importSwapchain = <error reading variable: Cannot access
memory at address 0x10>,

Frame #10 had similar errors in KWin::EglGbmLayerSurface::checkSurface 
newSurface = std::optional<KWin::EglGbmLayerSurface::Surface> = {[contained
value] = {gbmSurface = <error reading variable: Cannot access memory at address
0xb03b3e57d90427ff>, importSwapchain = <error reading variable: Cannot access
memory at address 0xe6673214bbb7285d>, importMode = (unknown: 0x56697274),
currentBuffer = <error reading variable: Cannot access memory at address
0x6c2d312d72747569>, currentFramebuffer = <error reading variable: Cannot
access memory at address 0x3a80000069746f7a>, forceLinear = false}}

Those errors might indicate memory corruption in the Wayland surface kwin was
creating or using which could've led to the crash higher in the trace. I'm
attaching the full trace of all threads of the kwin_wayland crash using
llvmpipe from mesa 23.0-rc3 by Adam Williamson from
https://bugzilla.redhat.com/show_bug.cgi?id=2164667#c10

When I booted Fedora-KDE-Live-x86_64-Rawhide-20230202.n.0.iso in a GNOME Boxes
QEMU/KVM VM with 3D acceleration disabled using the llvmpipe driver after the
black screen I ran startx & from another VT . Plasma on X ran normally. So the
problem might be specific to Plasma on Wayland. I disabled automatic login from
sddm in System Settings and logged out. kwin_wayland on Wayland as the sddm
compositor crashed with the same type of trace after logging out. The black
screen problem with the flashing text cursor at the top left happened.

Plasma started normally without these crashes with
Fedora-KDE-Live-x86_64-Rawhide-20230202.n.0.iso in a GNOME Boxes QEMU/KVM VM
with 3D acceleration enabled using the virgl mesa driver and virtio_gpu kernel
driver and on bare metal using the radeonsi mesa driver and amdgpu and driver
with amd_iommu=off on the kernel command line to work around the black screen
problem involving amdgpu and AMD IOMMUs with 6.2 kernels I reported at
https://bugzilla.redhat.com/show_bug.cgi?id=2156691 The kwin_wayland crash
might be specific to the use of the llvmpipe driver.

A mesa patch at https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/20955
didn't fix the problem according to Adam at
https://bugzilla.redhat.com/show_bug.cgi?id=2164667#c26

STEPS TO REPRODUCE
1. Boot a Fedora 37 KDE Plasma installation updated to 2023-2-3 with
updates-testing enabled
2. Log in to Plasma on Wayland
3. Download Fedora-KDE-Live-x86_64-Rawhide-20230202.n.0.iso from
https://koji.fedoraproject.org/koji/buildinfo?buildID=2145429
mesa-23.0.0~rc4-1.fc38 was untagged from Rawhide due to this problem so later
images might have mesa-22.3.3-3.fc38 and so would not be affected
https://pagure.io/releng/issue/11247
4. Install GNOME Boxes if it isn't already with sudo dnf install gnome-boxes
5. Start GNOME Boxes
6. boot the Fedora Rawhide live image
Fedora-KDE-Live-x86_64-Rawhide-20230202.n.0.iso in a GNOME Boxes QEMU/KVM VM
with 3D acceleration disabled using the llvmpipe driver, EFI enabled, and 3 GB
RAM

OBSERVED RESULT
kwin_wayland crashes involving dri2_create_drawable when Plasma starts and the
llvmpipe driver from Mesa 23.0-rc3 and 23.0-rc4 is used

EXPECTED RESULT
kwin_wayland wouldn't crash

SOFTWARE/OS VERSIONS
Linux/KDE Plasma: Fedora Rawhide/38
(available in About System)
KDE Plasma Version: 5.26.90
KDE Frameworks Version: 5.102.0
Qt Version: 5.15.8

ADDITIONAL INFORMATION

I've seen frequent journal warnings that the dri2 screen wasn't created in
recent Rawhide KDE Plasma GNOME Boxes QEMU/KVM VMs with 3D acceleration
disabled using llvmpipe like the following in my report on plasmashell crashes
at https://bugs.kde.org/show_bug.cgi?id=464258
plasmashell[2722]: libEGL warning: egl: failed to create dri2 screen

The dri2 screen not being created properly might be related to this problem
crashes with mesa-23.0.0~rc3-2.fc38 and later given the similarities in the
functions and variables like dri2_create_drawable and
dri2_dpy->dri2->createNewDrawable.
I didn't see the libEGL warning: egl: failed to create dri2 screen in the
journal with Fedora-KDE-Live-x86_64-Rawhide-20230202.n.0.iso in a GNOME Boxes
QEMU/KVM VM with 3D acceleration disabled using the llvmpipe driver after the
black screen from another VT. Those warnings happened with many KDE programs
including kwin_wayland_wrapper in Rawhide KDE Plasma VMs from the last few
weeks at least, but I only saw them when the llvmpipe driver was used and not
with virgl and virtio_gpu or radeonsi and amdgpu. Those other KDE programs
might not have been running long enough for the dri2 screen warnings to appear
with Fedora-KDE-Live-x86_64-Rawhide-20230202.n.0.iso before kwin_wayland
crashed.

-- 
You are receiving this mail because:
You are watching all bug changes.

Reply via email to