From 4587e50b52e01a795f284d3c48a363b5e15d1d97 Mon Sep 17 00:00:00 2001 From: Sahan Fernando Date: Sun, 13 Feb 2022 17:14:26 +1100 Subject: [PATCH] Kernel: Fix deadlock when setting VirtIOGPU resolution --- Kernel/Graphics/VirtIOGPU/FramebufferDevice.cpp | 4 +--- 1 file changed, 1 insertion(+), 3 deletions(-) diff --git a/Kernel/Graphics/VirtIOGPU/FramebufferDevice.cpp b/Kernel/Graphics/VirtIOGPU/FramebufferDevice.cpp index f14d1be6ea..9e4d3a9c01 100644 --- a/Kernel/Graphics/VirtIOGPU/FramebufferDevice.cpp +++ b/Kernel/Graphics/VirtIOGPU/FramebufferDevice.cpp @@ -84,8 +84,6 @@ ErrorOr FramebufferDevice::set_head_resolution(size_t head, size_t width, auto& info = display_info(); - SpinlockLocker locker(adapter()->operation_lock()); - info.rect = { .x = 0, .y = 0, @@ -167,6 +165,7 @@ FramebufferDevice::~FramebufferDevice() ErrorOr FramebufferDevice::create_framebuffer() { + SpinlockLocker locker(adapter()->operation_lock()); // First delete any existing framebuffers to free the memory first m_framebuffer = nullptr; m_framebuffer_sink_vmobject = nullptr; @@ -185,7 +184,6 @@ ErrorOr FramebufferDevice::create_framebuffer() } m_framebuffer_sink_vmobject = TRY(Memory::AnonymousVMObject::try_create_with_physical_pages(pages.span())); - SpinlockLocker locker(adapter()->operation_lock()); m_current_buffer = &buffer_from_index(m_last_set_buffer_index.load()); create_buffer(m_main_buffer, 0, m_buffer_size); create_buffer(m_back_buffer, m_buffer_size, m_buffer_size);