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

--- Comment #25 from Bernhard Übelacker <bernha...@mailbox.org> ---
(In reply to Bernhard Übelacker from comment #24)
> Thread 1 in each process seem to be middle in some processing, plasmashell
> waiting for some mutex, kwin_x11 for some xcb request.

Tried to look a little further in plasmashell process.
It looks like thread 1 is inside some QSGThreadedRenderLoop and is waiting to
be woken by some other thread:

Thread 1 (Thread 0x7fd89f10aa00 (LWP 1857)):
...
#4  ___pthread_cond_wait (cond=0x7fd87006c068, mutex=0x7fd87006c040) at
./nptl/pthread_cond_wait.c:618
#5  0x00007fd8a3cd199b in QWaitConditionPrivate::wait(QDeadlineTimer)
(deadline=..., this=0x7fd87006c040) at thread/qwaitcondition_unix.cpp:146
#6  QWaitCondition::wait(QMutex*, QDeadlineTimer) (this=<optimized out>,
mutex=0x7fd87008b428, deadline=...) at thread/qwaitcondition_unix.cpp:225
#7  0x00007fd8a5a0b968 in
QSGThreadedRenderLoop::polishAndSync(QSGThreadedRenderLoop::Window*, bool)
(this=this@entry=0x7fd898007220, w=w@entry=0x7fd8980319a0,
inExpose=inExpose@entry=true) at scenegraph/qsgthreadedrenderloop.cpp:1603
#8  0x00007fd8a5a0cc23 in QSGThreadedRenderLoop::handleExposure(QQuickWindow*)
(this=0x7fd898007220, window=<optimized out>) at
scenegraph/qsgthreadedrenderloop.cpp:1374
...

https://sources.debian.org/src/qtdeclarative-opensource-src/5.15.6%2Bdfsg-2/src/quick/scenegraph/qsgthreadedrenderloop.cpp/#L1603
1603     w->thread->waitCondition.wait(&w->thread->mutex);

https://sources.debian.org/src/qtdeclarative-opensource-src/5.15.6%2Bdfsg-2/src/quick/scenegraph/qsgthreadedrenderloop.cpp/#L1374
1374     polishAndSync(w, true);


There are a few other threads executing below `QSGRenderThread::run()` and also
waiting ... :
...
#6  QWaitCondition::wait(QMutex*, QDeadlineTimer)
(this=this@entry=0x7fd870082768, mutex=mutex@entry=0x7fd870082760,
deadline=...) at thread/qwaitcondition_unix.cpp:225
#7  0x00007fd8a5a07c95 in QSGRenderThreadEventQueue::takeEvent(bool)
(wait=true, this=0x7fd870082758) at scenegraph/qsgthreadedrenderloop.cpp:257
#8  QSGRenderThread::processEventsAndWaitForMore()
(this=this@entry=0x7fd8700826c0) at scenegraph/qsgthreadedrenderloop.cpp:935
#9  0x00007fd8a5a0a0c1 in QSGRenderThread::run() (this=0x7fd8700826c0) at
scenegraph/qsgthreadedrenderloop.cpp:1052
...


But there is one thread that seems waiting in plasmashell process also for some
xcb reply:
(gdb) bt
#0  0x00007fd8a3b1afef in __GI___poll (fds=fds@entry=0x7fd72e7fa7a8,
nfds=nfds@entry=1, timeout=timeout@entry=-1) at
../sysdeps/unix/sysv/linux/poll.c:29
#1  0x00007fd8a61a4d12 in poll (__timeout=-1, __nfds=1, __fds=0x7fd72e7fa7a8)
at /usr/include/x86_64-linux-gnu/bits/poll2.h:47
#2  _xcb_conn_wait (c=c@entry=0x56038ce45910, cond=cond@entry=0x7fd7180e71c8,
vector=vector@entry=0x0, count=count@entry=0x0) at ../../src/xcb_conn.c:508
#3  0x00007fd8a61a716a in xcb_wait_for_special_event (c=0x56038ce45910,
se=0x7fd7180e71a0) at ../../src/xcb_in.c:806
#4  0x00007fd89ddf1465 in dri3_wait_for_event_locked
(draw=draw@entry=0x7fd7180f5798, full_sequence=full_sequence@entry=0x0) at
../src/loader/loader_dri3_helper.c:584
#5  0x00007fd89ddf22a4 in dri3_find_back (draw=draw@entry=0x7fd7180f5798,
prefer_a_different=<optimized out>) at ../src/loader/loader_dri3_helper.c:726
#6  0x00007fd89ddf3da1 in dri3_get_buffer (format=format@entry=4099,
buffer_type=buffer_type@entry=loader_dri3_buffer_back,
draw=draw@entry=0x7fd7180f5798, driDrawable=<optimized out>) at
../src/loader/loader_dri3_helper.c:2030
#7  0x00007fd89ddf40d3 in loader_dri3_get_buffers (driDrawable=<optimized out>,
format=4099, stamp=0x7fd718088720, loaderPrivate=0x7fd7180f5798,
buffer_mask=<optimized out>, buffers=0x7fd72e7fab00) at
../src/loader/loader_dri3_helper.c:2255
#8  0x00007fd8966ae13f in dri_image_drawable_get_buffers
(drawable=drawable@entry=0x7fd718088720, images=images@entry=0x7fd72e7fab00,
statts=statts@entry=0x7fd71816ce78, statts_count=statts_count@entry=2) at
../src/gallium/frontends/dri/dri2.c:289
#9  0x00007fd8966ae27f in dri2_allocate_textures (ctx=0x56038d312f10,
drawable=0x7fd718088720, statts=0x7fd71816ce78, statts_count=2) at
../src/gallium/frontends/dri/dri2.c:458
#10 0x00007fd8966b1265 in dri_st_framebuffer_validate (stctx=<optimized out>,
stfbi=<optimized out>, statts=0x7fd71816ce78, count=2, out=0x7fd72e7face0) at
../src/gallium/frontends/dri/dri_drawable.c:82
#11 0x00007fd896784d62 in st_framebuffer_validate
(stfb=stfb@entry=0x7fd71816ca20, st=st@entry=0x56039097e4f0) at
../src/mesa/state_tracker/st_manager.c:238
#12 0x00007fd896785405 in st_manager_validate_framebuffers (st=0x56039097e4f0)
at ../src/mesa/state_tracker/st_manager.c:1333
#13 0x00007fd89675f6ed in st_validate_state (st=st@entry=0x56039097e4f0,
pipeline=pipeline@entry=ST_PIPELINE_CLEAR) at
../src/mesa/state_tracker/st_atom.c:231
#14 0x00007fd896933314 in st_Clear (ctx=0x5603916d9e70, mask=50) at
../src/mesa/state_tracker/st_cb_clear.c:432
#15 0x00007fd8a59af885 in QSGBatchRenderer::Renderer::renderBatches()
(this=this@entry=0x7fd7180c23a0) at
scenegraph/coreapi/qsgbatchrenderer.cpp:4022
#16 0x00007fd8a59b0326 in QSGBatchRenderer::Renderer::render() (this=<optimized
out>) at scenegraph/coreapi/qsgbatchrenderer.cpp:4343
#17 0x00007fd8a5997db0 in QSGRenderer::renderScene(QSGBindable const&)
(bindable=<optimized out>, this=0x7fd7180c23a0) at
scenegraph/coreapi/qsgrenderer.cpp:264
#18 QSGRenderer::renderScene(QSGBindable const&) (this=0x7fd7180c23a0,
bindable=<optimized out>) at scenegraph/coreapi/qsgrenderer.cpp:220
#19 0x00007fd8a5998263 in QSGRenderer::renderScene(unsigned int)
(this=<optimized out>, fboId=<optimized out>) at
scenegraph/coreapi/qsgrenderer.cpp:212
#20 0x00007fd8a59fb273 in
QSGDefaultRenderContext::renderNextFrame(QSGRenderer*, unsigned int)
(this=0x560390d2ac60, renderer=0x7fd7180c23a0, fboId=<optimized out>) at
scenegraph/qsgdefaultrendercontext.cpp:228
#21 0x00007fd8a5a67cb9 in QQuickWindowPrivate::renderSceneGraph(QSize const&,
QSize const&) (this=0x5603909d9cf0, size=<optimized out>,
surfaceSize=<optimized out>) at items/qquickwindow.cpp:617
#22 0x00007fd8a5a091a7 in QSGRenderThread::syncAndRender(QImage*)
(this=0x7fd87008b3d0, grabImage=0x0) at
scenegraph/qsgthreadedrenderloop.cpp:836
#23 0x00007fd8a5a0a07f in QSGRenderThread::run() (this=0x7fd87008b3d0) at
scenegraph/qsgthreadedrenderloop.cpp:1042
#24 0x00007fd8a3ccbcd1 in QThreadPrivate::start(void*) (arg=0x7fd87008b3d0) at
thread/qthread_unix.cpp:329
#25 0x00007fd8a3aa7fd4 in start_thread (arg=<optimized out>) at
./nptl/pthread_create.c:442
#26 0x00007fd8a3b285ac in clone3 () at
../sysdeps/unix/sysv/linux/x86_64/clone3.S:81

Operating System: Debian GNU/Linux
KDE Plasma Version: 5.26.3
KDE Frameworks Version: 5.98.0
Qt Version: 5.15.6
Kernel Version: 6.0.0-3-amd64 (64-bit)
Graphics Platform: X11
Graphics Processor: AMD Radeon RX 460 Graphics


So one data point might be the graphics driver, are all experiencing this hang
using an AMD graphics card?

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

Reply via email to