https://bugs.kde.org/show_bug.cgi?id=479258
Bug ID: 479258 Summary: kwin_wayland occasionally hits `assert!(__hi < __lo)` in `std::clamp()` from KWin::Window::constrainClientSize() Classification: Plasma Product: kwin Version: 5.27.10 Platform: Fedora RPMs OS: Linux Status: REPORTED Severity: crash Priority: NOR Component: platform-drm Assignee: kwin-bugs-n...@kde.org Reporter: janne-...@jannau.net Target Milestone: --- Created attachment 164596 --> https://bugs.kde.org/attachment.cgi?id=164596&action=edit drm_info output with kwin_wayland running SUMMARY kwin_wayland occasionally crashes during powering the display on after DPMS hitting `assert!(__hi < __lo)` in `std::clamp()`. This seems to be an regression after updating to kwin-wayland-5.27.10-1.fc39 from kwin-wayland-5.27.9-3.fc39. This issues seems to be triggered by the firmware of Apple's display controller. It generates a hotplug / unplug event a few seconds (~3 seconds) after the initial modeset succeeds after wakeup. > 13:37:46 kernel: apple-dcp 38bc00000.dcp: set_digital_out_mode(color:85 > timing:39) "3440x1440": 60 319750 3440 3488 3520 3600 1440 1443 1453 1481 > 0x40 0x0 > 13:37:46 kernel: apple-dcp 38bc00000.dcp: set_digital_out_mode() color mode > depth:10 format:0 colorimetry:9 eotf:0 range:0 > 13:37:46 kernel: apple-dcp 38bc00000.dcp: RTKit: syslog message: > nifiedPipeline.cpp:7462: set_digital_out_mode: Modeset requested for colorID: > 85, timingID: 39 > 13:37:47 kernel: apple-dcp 38bc00000.dcp: RTKit: syslog message: > UPTSQManager.cpp:105: IOMFB: switch to normal mode succeeded > 13:37:47 kernel: apple-dcp 38bc00000.dcp: set_digital_out_mode finished:8229 modeset succeded > 13:37:50 kernel: apple-dcp 38bc00000.dcp: RTKit: syslog message: > eoInterfaceIOAV.cpp:146: IOMFB: IOAVVideoInterface terminated > 13:37:50 kernel: apple-dcp 38bc00000.dcp: RTKit: syslog message: > oInterfaceIOAV.cpp:1094: void > VideoInterfaceIOAV::unplug_gated(IOAVVideoInterface *): display HPD removed > 13:37:50 kernel: apple-dcp 38bc00000.dcp: cb_hotplug() connected:0, > valid_mode:1 > 13:37:50 kernel: apple-dcp 38bc00000.dcp: dcp_hotplug() connected:0 > valid_mode:0 nr_modes:29 unplug event > 13:37:50 kwin_wayland_wrapper[1113221]: > /usr/include/c++/13/bits/stl_algo.h:3669: constexpr const _Tp& > std::clamp(const _Tp&, const _Tp&, const _Tp&) [with _Tp = double]: Assertion > '!(__hi < __lo)' failed. Backtrace below: > Core was generated by `/usr/bin/kwin_wayland --wayland-fd 7 --socket > wayland-0 --xwayland-fd 8 --xwayl'. > Program terminated with signal SIGABRT, Aborted. > #0 __pthread_kill_implementation (threadid=281472158524768, > signo=signo@entry=6, no_tid=no_tid@entry=0) > at pthread_kill.c:44 > Downloading source file > /usr/src/debug/glibc-2.38-14.fc39.aarch64/nptl/pthread_kill.c > 44 return INTERNAL_SYSCALL_ERROR_P (ret) ? INTERNAL_SYSCALL_ERRNO > (ret) : 0; > [Current thread is 1 (Thread 0xffff5805e560 (LWP 180747))] > Missing separate debuginfos, use: dnf debuginfo-install > kwin-wayland-5.27.10-1.fc39.aarch64 > (gdb) bt > #0 __pthread_kill_implementation (threadid=281472158524768, > signo=signo@entry=6, no_tid=no_tid@entry=0) > at pthread_kill.c:44 > #1 0x0000ffff553022f8 [PAC] in __pthread_kill_internal (signo=6, > threadid=<optimized out>) at pthread_kill.c:78 > #2 0x0000ffff552b5800 in __GI_raise (sig=sig@entry=6) at > ../sysdeps/posix/raise.c:26 > #3 0x0000ffff552a0288 [PAC] in __GI_abort () at abort.c:79 > #4 0x0000ffff555d2db8 [PAC] in std::__glibcxx_assert_fail ( > file=file@entry=0xffff5860f0b8 "/usr/include/c++/13/bits/stl_algo.h", > line=line@entry=3669, > function=function@entry=0xffff5860f060 "constexpr const _Tp& > std::clamp(const _Tp&, const _Tp&, const _Tp&) [with _Tp = double]", > condition=condition@entry=0xffff5860f050 "!(__hi < __lo)") > at ../../../../../libstdc++-v3/src/c++11/assert_fail.cc:41 > #5 0x0000ffff58425910 [PAC] in std::clamp<double> (__val=<optimized out>, > __lo=<optimized out>, __hi=<optimized out>) > at /usr/include/c++/13/bits/stl_algo.h:3667 > #6 std::clamp<double> (__hi=<optimized out>, __lo=<optimized out>, > __val=<optimized out>) > at /usr/include/c++/13/bits/stl_algo.h:3667 > #7 KWin::Window::constrainClientSize (this=0xaaab9aa7a7b0, size=..., > mode=<optimized out>) > at /usr/src/debug/kwin-5.27.10-1.fc39.aarch64/src/window.cpp:4278 > #8 0x0000ffff58427bc8 [PAC] in KWin::Window::constrainFrameSize > (this=this@entry=0xaaab9aa7a7b0, size=..., > mode=mode@entry=KWin::Window::SizeModeAny) at > /usr/src/debug/kwin-5.27.10-1.fc39.aarch64/src/window.cpp:4290 > #9 0x0000ffff5842fa20 [PAC] in KWin::Window::checkWorkspacePosition > (this=0xaaab9aa7a7b0, oldGeometry=..., > oldDesktop=<optimized out>) at > /usr/src/debug/kwin-5.27.10-1.fc39.aarch64/src/window.cpp:4236 > #10 0x0000ffff584474d0 [PAC] in KWin::Workspace::updateClientArea > (this=this@entry=0xaaab99649f40) > at /usr/src/debug/kwin-5.27.10-1.fc39.aarch64/src/workspace.cpp:2441 > #11 0x0000ffff584483a4 [PAC] in KWin::Workspace::desktopResized > (this=0xaaab99649f40) > at /usr/src/debug/kwin-5.27.10-1.fc39.aarch64/src/workspace.cpp:2224 > #12 0x0000ffff5843ef20 [PAC] in KWin::Workspace::updateOutputs > (this=this@entry=0xaaab99649f40, outputOrder=...) > at /usr/src/debug/kwin-5.27.10-1.fc39.aarch64/src/workspace.cpp:1432 > #13 0x0000ffff5843ff98 [PAC] in > KWin::Workspace::slotOutputBackendOutputsQueried (this=0xaaab99649f40) > at /usr/src/debug/kwin-5.27.10-1.fc39.aarch64/src/workspace.cpp:1327 > #14 0x0000ffff567e72bc [PAC] in QtPrivate::QSlotObjectBase::call > (a=0xfffff4c68700, r=<optimized out>, > this=0xaaab99a05160) at > ../../include/QtCore/../../src/corelib/kernel/qobjectdefs_impl.h:398 > #15 doActivate<false> (sender=0xaaab995ddbd0, signal_index=3, > argv=0xfffff4c68700) at kernel/qobject.cpp:3925 > #16 0x0000ffff58487fcc [PAC] in KWin::DrmBackend::updateOutputs > (this=<optimized out>) > at > /usr/src/debug/kwin-5.27.10-1.fc39.aarch64/src/backends/drm/drm_backend.cpp:333 > #17 0x0000ffff584828d0 [PAC] in KWin::DrmBackend::handleUdevEvent > (this=0xaaab995ddbd0) > at > /usr/src/debug/kwin-5.27.10-1.fc39.aarch64/src/backends/drm/drm_backend.cpp:259 > ... > (gdb) f 7 > #7 KWin::Window::constrainClientSize (this=0xaaab9aa7a7b0, size=..., > mode=<optimized out>) > at /usr/src/debug/kwin-5.27.10-1.fc39.aarch64/src/window.cpp:4278 > Downloading source file > /usr/src/debug/kwin-5.27.10-1.fc39.aarch64/src/window.cpp > 4278 width = std::clamp(width, minimumSize.width(), > maximumSize.width()); > (gdb) info locals > width = 323 > height = 124 > minimumSize = <optimized out> > maximumSize = <optimized out> STEPS TO REPRODUCE 1. Login to Plasma (wayland) session 2. Wait for the display to shut off 3. Wake display and unlock session OBSERVED RESULT Empty desktop due kwin_wayland crash EXPECTED RESULT kwin_wayland doesn't crash SOFTWARE/OS VERSIONS Linux/KDE Plasma: (available in About System) KDE Plasma Version: 5.27.10 KDE Frameworks Version: 5.111.0 Qt Version: 5.15.11 ADDITIONAL INFORMATION - Apple Silicon system with HDMI output running Fedora-Asahi-Remix (Fedora 39) - Display: LG UltraWide 34WK95UP-W, 5120x2160 native resolution - display connected via HDMI 2.0 limiting the max resolution to "3840x2160@60.00" but using the non-driver preferred mode "3440x1440@59.97" -- You are receiving this mail because: You are watching all bug changes.