Kernel 6.11 scrolling is not continuous in Firefox
Brief summary of the problem:
In Firefox, scrolling is not continuous on websites with many images.
It works well with 6.10.x
Hardware description:
- CPU: AMD Ryzen 7 6800U
- GPU: VGA compatible controller [0300]: Advanced Micro Devices, Inc. [AMD/ATI] Rembrandt [Radeon 680M] [1002:1681] (rev c1)
- System Memory: 16 GiB
- Display(s): Laptop OLED
System information:
- Distro name and Version: Fedora 40
- Kernel version: Linux fedori 6.11.0-rc3+ SMP PREEMPT_DYNAMIC Sat Aug 17 19:27:15 CEST 2024 x86_64 GNU/Linux
- Custom kernel: kernel from Torvalds tree
- AMD official driver version: N/A
How to reproduce the issue:
Open Firefox
Open a page with many images
Scroll
Log files (for system lockups / game freezes / crashes)
The stack when scrolling hangs for 500ms:
The __memcpy_avx_unaligned_erms takes 98%
__memcpy_avx_unaligned_erms [/usr/src/debug/glibc-2.39-22.fc40.x86_64/sysdeps/x86_64/multiarch/memmove-vec-unaligned-erms.S]
core::intrinsics::copy_nonoverlapping [/builddir/build/BUILD/rustc-1.80.0-src/library/core/src/intrinsics.rs]
core::slice::<impl [T]>::copy_from_slice [/builddir/build/BUILD/rustc-1.80.0-src/library/core/src/slice/mod.rs]
webrender::device::gl::TextureUploader::upload [gfx/wr/webrender/src/device/gl.rs]
webrender::renderer::upload::upload_to_texture_cache [gfx/wr/webrender/src/renderer/upload.rs]
webrender::renderer::Renderer::update_texture_cache [gfx/wr/webrender/src/renderer/mod.rs]
webrender::renderer::Renderer::render_impl [gfx/wr/webrender/src/renderer/mod.rs]
webrender::renderer::Renderer::render [gfx/wr/webrender/src/renderer/mod.rs]
wr_renderer_render [gfx/webrender_bindings/src/bindings.rs]
mozilla::wr::RendererOGL::UpdateAndRender(mozilla::Maybe<mozilla::gfx::IntSizeTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::wr::ImageFormat> const&, mozilla::Maybe<mozilla::Range<unsigned char> > const&, bool*, mozilla::wr::RendererStats*) [/usr/src/debug/firefox-129.0-1.fc40.x86_64/gfx/webrender_bindings/RendererOGL.cpp]
mozilla::wr::RenderThread::UpdateAndRender(mozilla::wr::WrWindowId, mozilla::layers::BaseTransactionId<mozilla::VsyncIdType> const&, mozilla::TimeStamp const&, bool, mozilla::Maybe<mozilla::gfx::IntSizeTyped<mozilla::gfx::UnknownUnits> > const&, mozilla::Maybe<mozilla::wr::ImageFormat> const&, mozilla::Maybe<mozilla::Range<unsigned char> > const&, bool*) [/usr/src/debug/firefox-129.0-1.fc40.x86_64/gfx/webrender_bindings/RenderThread.cpp]
RenderThread::UpdateAndRender
mozilla::wr::RenderThread::HandleFrameOneDocInner(mozilla::wr::WrWindowId, bool, bool, mozilla::Maybe<mozilla::wr::FramePublishId>) [/usr/src/debug/firefox-129.0-1.fc40.x86_64/gfx/webrender_bindings/RenderThread.cpp]
mozilla::wr::RenderThread::HandleFrameOneDoc(mozilla::wr::WrWindowId, bool, bool, mozilla::Maybe<mozilla::wr::FramePublishId>) [/usr/src/debug/firefox-129.0-1.fc40.x86_64/gfx/webrender_bindings/RenderThread.cpp]
mozilla::wr::RenderThread::WrNotifierEvent_HandleNewFrameReady(mozilla::wr::WrWindowId, bool, mozilla::wr::FramePublishId) [/usr/src/debug/firefox-129.0-1.fc40.x86_64/gfx/webrender_bindings/RenderThread.cpp]
mozilla::wr::RenderThread::HandleWrNotifierEvents(mozilla::wr::WrWindowId) [/usr/src/debug/firefox-129.0-1.fc40.x86_64/gfx/webrender_bindings/RenderThread.cpp]
mozilla::detail::RunnableMethodArguments<mozilla::wr::WrWindowId>::apply<mozilla::wr::RenderThread, void (mozilla::wr::RenderThread::*)(mozilla::wr::WrWindowId)>(mozilla::wr::RenderThread*, void (mozilla::wr::RenderThread::*)(mozilla::wr::WrWindowId))::{lambda(auto:1&&)#1}::operator()<StoreCopyPassByConstLRef<mozilla::wr::WrWindowId>&>(StoreCopyPassByConstLRef<mozilla::wr::WrWindowId>&) const [/usr/src/debug/firefox-129.0-1.fc40.x86_64/objdir/dist/include/nsThreadUtils.h]
std::__invoke_impl<void, mozilla::detail::RunnableMethodArguments<mozilla::wr::WrWindowId>::apply<mozilla::wr::RenderThread, void (mozilla::wr::RenderThread::*)(mozilla::wr::WrWindowId)>(mozilla::wr::RenderThread*, void (mozilla::wr::RenderThread::*)(mozilla::wr::WrWindowId))::{lambda(auto:1&&)#1}, StoreCopyPassByConstLRef<mozilla::wr::WrWindowId>&>(std::__invoke_other, mozilla::detail::RunnableMethodArguments<mozilla::wr::WrWindowId>::apply<mozilla::wr::RenderThread, void (mozilla::wr::RenderThread::*)(mozilla::wr::WrWindowId)>(mozilla::wr::RenderThread*, void (mozilla::wr::RenderThread::*)(mozilla::wr::WrWindowId))::{lambda(auto:1&&)#1}, StoreCopyPassByConstLRef<mozilla::wr::WrWindowId>&) [/usr/include/c++/14/bits/invoke.h]
std::__invoke<mozilla::detail::RunnableMethodArguments<mozilla::wr::WrWindowId>::apply<mozilla::wr::RenderThread, void (mozilla::wr::RenderThread::*)(mozilla::wr::WrWindowId)>(mozilla::wr::RenderThread*, void (mozilla::wr::RenderThread::*)(mozilla::wr::WrWindowId))::{lambda(auto:1&&)#1}, StoreCopyPassByConstLRef<mozilla::wr::WrWindowId>&>(mozilla::detail::RunnableMethodArguments<mozilla::wr::WrWindowId>::apply<mozilla::wr::RenderThread, void (mozilla::wr::RenderThread::*)(mozilla::wr::WrWindowId)>(mozilla::wr::RenderThread*, void (mozilla::wr::RenderThread::*)(mozilla::wr::WrWindowId))::{lambda(auto:1&&)#1}, StoreCopyPassByConstLRef<mozilla::wr::WrWindowId>&) [/usr/include/c++/14/bits/invoke.h]
std::__apply_impl<mozilla::detail::RunnableMethodArguments<mozilla::wr::WrWindowId>::apply<mozilla::wr::RenderThread, void (mozilla::wr::RenderThread::*)(mozilla::wr::WrWindowId)>(mozilla::wr::RenderThread*, void (mozilla::wr::RenderThread::*)(mozilla::wr::WrWindowId))::{lambda(auto:1&&)#1}, std::tuple<StoreCopyPassByConstLRef<mozilla::wr::WrWindowId> >&, (unsigned long)0>(mozilla::detail::RunnableMethodArguments<mozilla::wr::WrWindowId>::apply<mozilla::wr::RenderThread, void (mozilla::wr::RenderThread::*)(mozilla::wr::WrWindowId)>(mozilla::wr::RenderThread*, void (mozilla::wr::RenderThread::*)(mozilla::wr::WrWindowId))::{lambda(auto:1&&)#1}, std::tuple<StoreCopyPassByConstLRef<mozilla::wr::WrWindowId> >&, std::integer_sequence<unsigned long, ((unsigned long)0)...>) [/usr/include/c++/14/tuple]
std::apply<mozilla::detail::RunnableMethodArguments<mozilla::wr::WrWindowId>::apply<mozilla::wr::RenderThread, void (mozilla::wr::RenderThread::*)(mozilla::wr::WrWindowId)>(mozilla::wr::RenderThread*, void (mozilla::wr::RenderThread::*)(mozilla::wr::WrWindowId))::{lambda(auto:1&&)#1}, std::tuple<StoreCopyPassByConstLRef<mozilla::wr::WrWindowId> >&>(mozilla::detail::RunnableMethodArguments<mozilla::wr::WrWindowId>::apply<mozilla::wr::RenderThread, void (mozilla::wr::RenderThread::*)(mozilla::wr::WrWindowId)>(mozilla::wr::RenderThread*, void (mozilla::wr::RenderThread::*)(mozilla::wr::WrWindowId))::{lambda(auto:1&&)#1}, std::tuple<StoreCopyPassByConstLRef<mozilla::wr::WrWindowId> >&) [/usr/include/c++/14/tuple]
mozilla::detail::RunnableMethodArguments<mozilla::wr::WrWindowId>::apply<mozilla::wr::RenderThread, void (mozilla::wr::RenderThread::*)(mozilla::wr::WrWindowId)>(mozilla::wr::RenderThread*, void (mozilla::wr::RenderThread::*)(mozilla::wr::WrWindowId)) [/usr/src/debug/firefox-129.0-1.fc40.x86_64/objdir/dist/include/nsThreadUtils.h]
mozilla::detail::RunnableMethodImpl<mozilla::wr::RenderThread*, void (mozilla::wr::RenderThread::*)(mozilla::wr::WrWindowId), true, (mozilla::RunnableKind)0, mozilla::wr::WrWindowId>::Run() [/usr/src/debug/firefox-129.0-1.fc40.x86_64/objdir/dist/include/nsThreadUtils.h]
nsThread::ProcessNextEvent(bool, bool*) [/usr/src/debug/firefox-129.0-1.fc40.x86_64/xpcom/threads/nsThread.cpp]
NS_ProcessNextEvent(nsIThread*, bool) [/usr/src/debug/firefox-129.0-1.fc40.x86_64/xpcom/threads/nsThreadUtils.cpp]
mozilla::ipc::MessagePumpForNonMainThreads::Run(base::MessagePump::Delegate*) [/usr/src/debug/firefox-129.0-1.fc40.x86_64/ipc/glue/MessagePump.cpp]
MessageLoop::RunInternal() [/usr/src/debug/firefox-129.0-1.fc40.x86_64/ipc/chromium/src/base/message_loop.cc]
MessageLoop::RunHandler() [/usr/src/debug/firefox-129.0-1.fc40.x86_64/ipc/chromium/src/base/message_loop.cc]
MessageLoop::Run() [/usr/src/debug/firefox-129.0-1.fc40.x86_64/ipc/chromium/src/base/message_loop.cc]
nsThread::ThreadFunc(void*) [/usr/src/debug/firefox-129.0-1.fc40.x86_64/xpcom/threads/nsThread.cpp]
Edited by Gergo Koteles